OpenJDK / amber / amber
changeset 796:2c3db720c065
6675856: Open charset tests
Summary: Moved non-confidiential test cased from closed repo to open repo
Reviewed-by: martin
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/BufferUnderflowEUCTWTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,64 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4834154 + @summary Decode a file using EUC-TW, test for decode errors + */ + +/* + * Tests for decode errors in NIO EUC-TW decoder. 4734607 details + * decoding errors which occur when the input file > 8k in size + * and contains numerous US-ASCII range chars + */ + +import java.io.*; + +public class BufferUnderflowEUCTWTest { + private static int BUFFERSIZE = 8194; + + public static void main (String[] args) throws Exception { + int i = 0; + byte[] b = new byte[BUFFERSIZE]; + + for (; i < BUFFERSIZE - 4; i++) // pad with zeroes + b[i] = 0; + + // Overspill a valid EUC-TW 4 byte sequence between 2 + // successive input buffers. + b[i++] = (byte)0x8E; + b[i++] = (byte)0xA2; + b[i++] = (byte)0xA1; + b[i++] = (byte)0xA6; + + ByteArrayInputStream r = new ByteArrayInputStream(b); + + try { + InputStreamReader isr=new InputStreamReader(r, "EUC-TW"); + char[] cc = new char[BUFFERSIZE]; + int cx = isr.read(cc); + } catch (ArrayIndexOutOfBoundsException e) { + throw new Exception("Array Index error: bug 4834154"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/CheckCaseInsensitiveEncAliases.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,99 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @bug 4216191 4721369 4807283 + @summary Test to validate case insensitivity of encoding alias names + */ + +// Fixed since 1.4.0 by virtue of NIO charset lookup mechanism +// which is by design case insensitive + +import java.lang.*; +import java.io.*; + +public class CheckCaseInsensitiveEncAliases +{ + public static void main(String args[]) throws Exception + { + // Try various encoding names in mixed cases + // Tests subset of encoding names provided within bugID 4216191 + + // Various forms of US-ASCII + tryToEncode( "ANSI_X3.4-1968" ); + tryToEncode( "iso-ir-6" ); + tryToEncode( "ANSI_X3.4-1986" ); + tryToEncode( "ISO_646.irv:1991" ); + tryToEncode( "ASCII" ); + tryToEncode( "ascii" ); + tryToEncode( "Ascii" ); + tryToEncode( "Ascii7" ); + tryToEncode( "ascii7" ); + tryToEncode( "ISO646-US" ); + tryToEncode( "US-ASCII" ); + tryToEncode( "us-ascii" ); + tryToEncode( "US-Ascii" ); + tryToEncode( "us" ); + tryToEncode( "IBM367" ); + tryToEncode( "cp367" ); + tryToEncode( "csASCII" ); + + // Variants on Unicode + tryToEncode( "Unicode" ); + tryToEncode( "UNICODE" ); + tryToEncode( "unicode" ); + + // Variants on Big5 + tryToEncode( "Big5" ); + tryToEncode( "big5" ); + tryToEncode( "bIg5" ); + tryToEncode( "biG5" ); + tryToEncode( "bIG5" ); + + // Variants of Cp1252 + tryToEncode( "Cp1252" ); + tryToEncode( "cp1252" ); + tryToEncode( "CP1252" ); + + // Variants of PCK + tryToEncode( "pck" ); + tryToEncode( "Pck" ); + + } + + + public static final String ENCODE_STRING = "Encode me"; + + public static void tryToEncode( String encoding) throws Exception + { + try + { + byte[] bytes = ENCODE_STRING.getBytes( encoding ); + System.out.println( "Encoding \"" + encoding + "\" recognized" ); + } + catch( UnsupportedEncodingException e ) + { + throw new Exception("Encoding \"" + encoding + "\" NOT recognized"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/CheckHistoricalNames.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,313 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4513767 4961027 + @summary Checks canonical names match between old and (NIO) core charsets + */ +import java.io.InputStreamReader; +import java.io.IOException; + +public class CheckHistoricalNames { + static int failed = 0; + public static void main (String[] args) throws Exception { + checkHistoricalName("ASCII"); + checkHistoricalName("Cp1252"); + checkHistoricalName("ISO8859_1"); + checkHistoricalName("UnicodeBigUnmarked"); + checkHistoricalName("UnicodeLittle"); + checkHistoricalName("UnicodeLittleUnmarked"); + checkHistoricalName("UTF8"); + checkHistoricalName("UTF-16"); + + checkMappedName("UnicodeBig", "UTF-16"); + checkMappedName("US-ASCII", "ASCII"); + checkMappedName("ISO-8859-1", "ISO8859_1"); + checkMappedName("UTF-8", "UTF8"); + checkMappedName("UTF-16BE", "UnicodeBigUnmarked"); + checkMappedName("UTF-16LE", "UnicodeLittleUnmarked"); + + checkHistoricalName("ISO8859_2"); + checkHistoricalName("ISO8859_4"); + checkHistoricalName("ISO8859_5"); + checkHistoricalName("ISO8859_7"); + checkHistoricalName("ISO8859_9"); + checkHistoricalName("ISO8859_13"); + checkHistoricalName("KOI8_R"); + checkHistoricalName("Cp1250"); + checkHistoricalName("Cp1251"); + checkHistoricalName("Cp1253"); + checkHistoricalName("Cp1254"); + checkHistoricalName("Cp1257"); + + checkMappedName("ISO-8859-2", "ISO8859_2"); + checkMappedName("ISO-8859-4", "ISO8859_4"); + checkMappedName("ISO-8859-5", "ISO8859_5"); + checkMappedName("ISO-8859-7", "ISO8859_7"); + checkMappedName("ISO-8859-9", "ISO8859_9"); + checkMappedName("ISO-8859-13", "ISO8859_13"); + checkMappedName("KOI8-R", "KOI8_R"); + checkMappedName("windows-1250", "Cp1250"); + checkMappedName("windows-1251","Cp1251"); + checkMappedName("windows-1253", "Cp1253"); + checkMappedName("windows-1254", "Cp1254"); + checkMappedName("windows-1257", "Cp1257"); + + checkHistoricalName("EUC_CN"); + checkHistoricalName("EUC_JP"); + checkHistoricalName("EUC_JP_LINUX"); + checkHistoricalName("EUC_KR"); + checkHistoricalName("EUC_TW"); + checkHistoricalName("ISO2022CN"); + checkHistoricalName("ISO2022JP"); + checkHistoricalName("ISO2022KR"); + checkHistoricalName("ISO8859_3"); + checkHistoricalName("ISO8859_6"); + checkHistoricalName("ISO8859_8"); + checkHistoricalName("Cp1255"); + checkHistoricalName("Cp1256"); + checkHistoricalName("Cp1258"); + checkHistoricalName("MS936"); + checkHistoricalName("MS949"); + checkHistoricalName("MS950"); + checkHistoricalName("TIS620"); + + checkMappedName("EUC-CN", "EUC_CN"); + checkMappedName("EUC-JP", "EUC_JP"); + checkMappedName("EUC-JP-LINUX", "EUC_JP_LINUX"); + checkMappedName("EUC-TW", "EUC_TW"); + checkMappedName("EUC-KR", "EUC_KR"); + checkMappedName("ISO-2022-CN", "ISO2022CN"); + checkMappedName("ISO-2022-JP", "ISO2022JP"); + checkMappedName("ISO-2022-KR", "ISO2022KR"); + checkMappedName("ISO-8859-3", "ISO8859_3"); + checkMappedName("ISO-8859-6", "ISO8859_6"); + checkMappedName("ISO-8859-8", "ISO8859_8"); + checkMappedName("windows-1255", "Cp1255"); + checkMappedName("windows-1256", "Cp1256"); + checkMappedName("windows-1258", "Cp1258"); + checkMappedName("windows-936", "GBK"); + checkMappedName("windows-949", "MS949"); + checkMappedName("windows-950", "MS950"); + checkMappedName("x-MS950-HKSCS", "MS950_HKSCS"); + checkMappedName("x-PCK", "PCK"); + checkMappedName("Shift_JIS", "SJIS"); + checkMappedName("x-JISAutoDetect", "JISAutoDetect"); + checkMappedName("TIS-620", "TIS620"); + checkMappedName("x-Big5-Solaris", "Big5_Solaris"); + + checkHistoricalName("Cp037"); + checkHistoricalName("Cp1006"); + checkHistoricalName("Cp1025"); + checkHistoricalName("Cp1026"); + checkHistoricalName("Cp1046"); + checkHistoricalName("Cp1047"); + checkHistoricalName("Cp1097"); + checkHistoricalName("Cp1098"); + checkHistoricalName("Cp1112"); + checkHistoricalName("Cp1122"); + checkHistoricalName("Cp1123"); + checkHistoricalName("Cp1124"); + checkHistoricalName("Cp1140"); + checkHistoricalName("Cp1141"); + checkHistoricalName("Cp1142"); + checkHistoricalName("Cp1143"); + checkHistoricalName("Cp1144"); + checkHistoricalName("Cp1145"); + checkHistoricalName("Cp1146"); + checkHistoricalName("Cp1147"); + checkHistoricalName("Cp1148"); + checkHistoricalName("Cp1149"); + checkHistoricalName("Cp1381"); + checkHistoricalName("Cp1383"); + checkHistoricalName("Cp273"); + checkHistoricalName("Cp277"); + checkHistoricalName("Cp278"); + checkHistoricalName("Cp280"); + checkHistoricalName("Cp284"); + checkHistoricalName("Cp285"); + checkHistoricalName("Cp297"); + checkHistoricalName("Cp33722"); + checkHistoricalName("Cp420"); + checkHistoricalName("Cp424"); + checkHistoricalName("Cp437"); + checkHistoricalName("Cp500"); + checkHistoricalName("Cp737"); + checkHistoricalName("Cp775"); + checkHistoricalName("Cp838"); + checkHistoricalName("Cp850"); + checkHistoricalName("Cp852"); + checkHistoricalName("Cp855"); + checkHistoricalName("Cp856"); + checkHistoricalName("Cp857"); + checkHistoricalName("Cp858"); + checkHistoricalName("Cp860"); + checkHistoricalName("Cp861"); + checkHistoricalName("Cp862"); + checkHistoricalName("Cp863"); + checkHistoricalName("Cp864"); + checkHistoricalName("Cp865"); + checkHistoricalName("Cp866"); + checkHistoricalName("Cp868"); + checkHistoricalName("Cp869"); + checkHistoricalName("Cp870"); + checkHistoricalName("Cp871"); + checkHistoricalName("Cp874"); + checkHistoricalName("Cp875"); + checkHistoricalName("Cp918"); + checkHistoricalName("Cp921"); + checkHistoricalName("Cp922"); + checkHistoricalName("Cp933"); + checkHistoricalName("Cp939"); + checkHistoricalName("Cp949"); + checkHistoricalName("Cp964"); + checkHistoricalName("Cp970"); + + checkMappedName("IBM037", "Cp037"); + checkMappedName("IBM1006", "Cp1006"); + checkMappedName("IBM1025", "Cp1025"); + checkMappedName("IBM1026", "Cp1026"); + checkMappedName("x-IBM1046", "Cp1046"); + checkMappedName("IBM1047", "Cp1047"); + checkMappedName("IBM1097", "Cp1097"); + checkMappedName("IBM1098", "Cp1098"); + checkMappedName("IBM1112", "Cp1112"); + checkMappedName("IBM1122", "Cp1122"); + checkMappedName("IBM1123", "Cp1123"); + checkMappedName("IBM1124", "Cp1124"); + checkMappedName("IBM01140", "Cp1140"); + checkMappedName("IBM01141", "Cp1141"); + checkMappedName("IBM01142", "Cp1142"); + checkMappedName("IBM01143", "Cp1143"); + checkMappedName("IBM01144", "Cp1144"); + checkMappedName("IBM01145", "Cp1145"); + checkMappedName("IBM01146", "Cp1146"); + checkMappedName("IBM01147", "Cp1147"); + checkMappedName("IBM01148", "Cp1148"); + checkMappedName("IBM01149", "Cp1149"); + checkMappedName("IBM1381", "Cp1381"); + checkMappedName("IBM1383", "Cp1383"); + checkMappedName("IBM273", "Cp273"); + checkMappedName("IBM277", "Cp277"); + checkMappedName("IBM278", "Cp278"); + checkMappedName("IBM280", "Cp280"); + checkMappedName("IBM284", "Cp284"); + checkMappedName("IBM285", "Cp285"); + checkMappedName("IBM297", "Cp297"); + checkMappedName("IBM33722", "Cp33722"); + checkMappedName("IBM420", "Cp420"); + checkMappedName("IBM424", "Cp424"); + checkMappedName("IBM437", "Cp437"); + checkMappedName("IBM500", "Cp500"); + checkMappedName("IBM737", "Cp737"); + checkMappedName("IBM775", "Cp775"); + checkMappedName("IBM838", "Cp838"); + checkMappedName("IBM850", "Cp850"); + checkMappedName("IBM852", "Cp852"); + checkMappedName("IBM855", "Cp855"); + checkMappedName("IBM856", "Cp856"); + checkMappedName("IBM857", "Cp857"); + checkMappedName("IBM00858", "Cp858"); + checkMappedName("IBM860", "Cp860"); + checkMappedName("IBM861", "Cp861"); + checkMappedName("IBM862", "Cp862"); + checkMappedName("IBM863", "Cp863"); + checkMappedName("IBM864", "Cp864"); + checkMappedName("IBM865", "Cp865"); + checkMappedName("IBM866", "Cp866"); + checkMappedName("IBM868", "Cp868"); + checkMappedName("IBM869", "Cp869"); + checkMappedName("IBM870", "Cp870"); + checkMappedName("IBM871", "Cp871"); + checkMappedName("IBM874", "Cp874"); + checkMappedName("IBM875", "Cp875"); + checkMappedName("IBM918", "Cp918"); + checkMappedName("IBM921", "Cp921"); + checkMappedName("IBM922", "Cp922"); + checkMappedName("x-IBM930", "Cp930"); + checkMappedName("IBM933", "Cp933"); + checkMappedName("x-IBM935", "Cp935"); + checkMappedName("x-IBM937", "Cp937"); + checkMappedName("IBM939", "Cp939"); + checkMappedName("x-IBM942", "Cp942"); + checkMappedName("x-IBM942C", "Cp942C"); + checkMappedName("x-IBM943", "Cp943"); + checkMappedName("x-IBM943C", "Cp943C"); + checkMappedName("x-IBM948", "Cp948"); + checkMappedName("IBM949", "Cp949"); + checkMappedName("x-IBM949C", "Cp949C"); + checkMappedName("x-IBM950", "Cp950"); + checkMappedName("IBM964", "Cp964"); + checkMappedName("IBM970", "Cp970"); + + checkHistoricalName("MacArabic"); + checkHistoricalName("MacCentralEurope"); + checkHistoricalName("MacCroatian"); + checkHistoricalName("MacCyrillic"); + checkHistoricalName("MacDingbat"); + checkHistoricalName("MacGreek"); + checkHistoricalName("MacHebrew"); + checkHistoricalName("MacIceland"); + checkHistoricalName("MacRoman"); + checkHistoricalName("MacRomania"); + checkHistoricalName("MacSymbol"); + checkHistoricalName("MacThai"); + checkHistoricalName("MacTurkish"); + checkHistoricalName("MacUkraine"); + + checkMappedName("x-MacArabic", "MacArabic"); + checkMappedName("x-MacCentralEurope", "MacCentralEurope"); + checkMappedName("x-MacCroatian", "MacCroatian"); + checkMappedName("x-MacCyrillic", "MacCyrillic"); + checkMappedName("x-MacDingbat", "MacDingbat"); + checkMappedName("x-MacGreek", "MacGreek"); + checkMappedName("x-MacHebrew", "MacHebrew"); + checkMappedName("x-MacIceland", "MacIceland"); + checkMappedName("x-MacRoman", "MacRoman"); + checkMappedName("x-MacRomania", "MacRomania"); + checkMappedName("x-MacSymbol", "MacSymbol"); + checkMappedName("x-MacThai", "MacThai"); + checkMappedName("x-MacTurkish", "MacTurkish"); + checkMappedName("x-MacUkraine", "MacUkraine"); + + if (failed != 0) + throw new Exception("Test Failed: " + failed); + else + System.out.println("Test Passed!"); + } + + private static void checkHistoricalName(String name) throws Exception { + checkMappedName(name, name); + } + + private static void checkMappedName(String alias, String canonical) + throws Exception { + InputStreamReader reader = new InputStreamReader(System.in, alias); + if (!reader.getEncoding().equals(canonical)) { + System.out.println("Failed canonical names : mismatch for " + alias + + " - expected " + canonical + + ", got " + reader.getEncoding()); + failed++; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/ConvertSingle.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,65 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4094987 + @summary Verify that malformed expression exceptions are thrown + but no internal errors in certain pathologial cases. + + */ + + +import java.io.*; +import java.nio.charset.*; + +public class ConvertSingle { + + public static void main(String args[]) throws Exception { + // This conversion is pathologically bad - it is attempting to + // read unicode from an ascii encoded string. + // The orignal bug: A internal error in ISR results if the + // byte counter in ByteToCharUnicode + // is not advanced as the input is consumed. + + try{ + String s = "\n"; + byte ss[] = null; + String sstring = "x"; + ss = s.getBytes(); + ByteArrayInputStream BAIS = new ByteArrayInputStream(ss); + InputStreamReader ISR = new InputStreamReader(BAIS, "Unicode"); + BufferedReader BR = new BufferedReader(ISR); + sstring = BR.readLine(); + BR.close(); + System.out.println(sstring); + } catch (MalformedInputException e){ + // Right error + return; + } catch (java.lang.InternalError e) { + throw new Exception("ByteToCharUnicode is failing incorrectly for " + + " single byte input"); + } + + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/Decode.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,67 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/**/ + +public class Decode { + private static boolean isAscii(char c) { + return c < '\u0080'; + } + + private static boolean isPrintable(char c) { + return ('\u0020' < c) && (c < '\u007f'); + } + + public static void main(String[] args) throws Throwable { + if (args.length < 2) + throw new Exception("Usage: java Decode CHARSET BYTE [BYTE ...]"); + String cs = args[0]; + byte[] bytes = new byte[args.length-1]; + for (int i = 1; i < args.length; i++) { + String arg = args[i]; + bytes[i-1] = + (arg.length() == 1 && isAscii(arg.charAt(0))) ? + (byte) arg.charAt(0) : + arg.equals("ESC") ? 0x1b : + arg.equals("SO") ? 0x0e : + arg.equals("SI") ? 0x0f : + arg.equals("SS2") ? (byte) 0x8e : + arg.equals("SS3") ? (byte) 0x8f : + arg.matches("0x.*") ? Integer.decode(arg).byteValue() : + Integer.decode("0x"+arg).byteValue(); + } + String s = new String(bytes, cs); + + for (int j = 0; j < s.length(); j++) { + if (j > 0) + System.out.print(' '); + char c = s.charAt(j); + if (isPrintable(c)) + System.out.print(c); + else if (c == '\u001b') System.out.print("ESC"); + else + System.out.printf("\\u%04x", (int) c); + } + System.out.print("\n"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/DecoderOverflow.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,65 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 5101128 + @summary Check behavior of CharsetDecoder.decode when overflow occurs + @author Martin Buchholz + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class DecoderOverflow { + static int failures = 0; + + public static void main(String[] args) throws Exception { + for (String csn : Charset.availableCharsets().keySet()) { + try { + test(csn); + } catch (Throwable t) { + System.out.println(csn); + t.printStackTrace(); + failures++; + } + } + if (failures > 0) + throw new Exception(failures + " charsets failed"); + } + + static void test(String encoding) throws Exception { + String text = "Vote for Duke!"; + Charset cs = Charset.forName(encoding); + if (! cs.canEncode() || ! cs.newEncoder().canEncode('.')) return; + ByteBuffer in = ByteBuffer.wrap(text.getBytes(encoding)); + CharBuffer out = CharBuffer.allocate(text.length()/2); + CoderResult result = cs.newDecoder().decode(in, out, true); + if (out.hasRemaining() || ! result.isOverflow()) + throw new Exception + ("out.hasRemaining()=" + out.hasRemaining() + + " result.isOverflow()=" + result.isOverflow() + + " in.capacity()=" + in.capacity() + + " encoding=" + encoding); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/EUCJPUnderflowDecodeTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,104 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4867457 + @summary Check for correct byte buffer underflow handling in EUC-JP + */ + +import java.io.*; +import java.nio.*; +import java.nio.charset.*; + +public class EUCJPUnderflowDecodeTest { + public static void main(String[] args) throws Exception{ + + ByteBuffer bb = ByteBuffer.allocateDirect(255); + CharBuffer cc = CharBuffer.allocate(255); + + + // Test both regular EUC-JP and Linux variant + + String[] charsetNames = { "EUC_JP", "EUC-JP-LINUX" }; + + for (int i = 0 ; i < charsetNames.length; i++) { + Charset cs = Charset.forName(charsetNames[i]); + CharsetDecoder decoder = cs.newDecoder(); + bb.clear(); + cc.clear(); + + // Fakes a partial 3 byte EUC_JP (JIS-X-0212 range) + // encoded character/byte sequence + bb.put((byte)0x8f); + bb.put((byte)0xa2); + bb.flip(); + // Now decode with endOfInput method param set to + // indicate to decoder that there is more encoded + // data to follow in a subsequent invocation + + CoderResult result = decoder.decode(bb, cc, false); + + // java.nio.charset.CharsetDecoder spec specifies + // that the coder ought to return CoderResult.UNDERFLOW + // when insufficient bytes have been supplied to complete + // the decoding operation + + if (result != CoderResult.UNDERFLOW) { + throw new Exception("test failed - UNDERFLOW not returned"); + } + + // Repeat the test with the lead byte (minus its pursuing + // trail byte) for the EUC-JP 2 byte (JIS208) range + decoder.reset(); + bb.clear(); + cc.clear(); + bb.put((byte)0xa1); + bb.flip(); + result = decoder.decode(bb, cc, false); + if (result != CoderResult.UNDERFLOW) { + throw new Exception("test failed"); + } + + // finally ensure that a valid JIS208 range EUC-JP + // 2 byte value is correctly decoded when it is presented + // at the trailing bounds of a ByteBuffer in the case where + // charset decoder expects (endOfInput ==false) more + //input to follow + + decoder.reset(); + bb.clear(); + cc.clear(); + bb.put((byte)0xa1); + bb.put((byte)0xc0); + bb.flip(); + + result = decoder.decode(bb, cc, false); + + cc.flip(); + + if (result != CoderResult.UNDERFLOW && cc.get() != '\uFF3c') { + throw new Exception("test failed to decode EUC-JP (0xA1C0)"); + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/EucJpLinux0212.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,79 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6350021 + * @summary Consistency checks when input buffer contains JISX0212 characters + * @author Martin Buchholz + */ + +import java.io.*; +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class EucJpLinux0212 { + private static void equal(CharBuffer b1, CharBuffer b2) { + equal(b1.position(), b2.position()); + equal(b1.limit(), b2.limit()); + System.out.printf("positions=%d %d%n", b1.position(), b2.position()); + System.out.printf("limits=%d %d%n", b1.limit(), b2.limit()); + for (int i = b1.position(); i < b1.limit(); i++) + equal((int)b1.get(i), (int)b2.get(i)); + } + + private static void realMain(String[] args) throws Throwable { + List<ByteBuffer> bbs = Arrays.asList( + ByteBuffer.allocate(10), + ByteBuffer.allocateDirect(10)); + List<CharBuffer> cbs = new ArrayList<CharBuffer>(); + + for (ByteBuffer bb : bbs) { + bb.put(new byte[]{ (byte)0x8f, 0x01, 0x02, + (byte)0xa1, (byte)0xc0, + 0x02, 0x03}); + bb.flip(); + CharsetDecoder decoder = Charset.forName("EUC_JP_LINUX").newDecoder(); + decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); + CharBuffer cb = decoder.decode(bb); + cbs.add(cb); + } + equal(cbs.get(0), cbs.get(1)); + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/EucJpLinuxDecoderRecoveryTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,70 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 5016049 + @summary ensure euc-jp-linux charset decoder recovery for unmappable input + */ + +import java.io.*; + +public class EucJpLinuxDecoderRecoveryTest { + public static void main(String[] args) throws Exception { + byte[] encoded = { + // EUC_JP_LINUX mappable JIS X 0208 range + (byte)0xa6, (byte)0xc5, + // EUC_JP_LINUX Unmappable (JIS X 0212 range) + (byte)0x8f, (byte)0xa2, (byte)0xb7, + // EUC_JP_LINUX mappable JIS X 0208 range + (byte)0xa6, (byte)0xc7 }; + + char[] decodedChars = new char[3]; + char[] expectedChars = + { + '\u03B5', // mapped + '\ufffd', // unmapped + '\u03B7' // mapped + }; + + ByteArrayInputStream bais = new ByteArrayInputStream(encoded); + InputStreamReader isr = new InputStreamReader(bais, "EUC_JP_LINUX"); + int n = 0; // number of chars decoded + + try { + n = isr.read(decodedChars); + } catch (Exception ex) { + throw new Error("euc-jp-linux decoding broken"); + } + + // check number of decoded chars is what is expected + if (n != expectedChars.length) + throw new Error("Unexpected number of chars decoded"); + + // Compare actual decoded with expected + + for (int i = 0; i < n; i++) { + if (expectedChars[i] != decodedChars[i]) + throw new Error("euc-jp-linux decoding incorrect"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/EuroConverter.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,158 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/** + * @test + * @bug 4114080 + * @summary Make sure the euro converters, which are derived from + * existing converters, only differ from their parents at the expected + * code point. + */ + +import java.text.*; +import java.util.*; +import java.io.*; + +/* Author: Alan Liu + * 7/14/98 + */ +public class EuroConverter { + public static void main(String args[]) throws Exception { + boolean pass = true; + char[] map = new char[256]; // map for the encoding + byte[] bytes = new byte[1]; // scratch + char[] chars = new char[1]; // scratch + for (int i=0; i<DATA.length; ) { + String euroEnc = DATA[i++]; + String parentEnc = DATA[i++]; + System.out.println("Checking encoder " + euroEnc + " against " + parentEnc); + String currentEnc = parentEnc; + + try { + // Fill map with parent values + for (int j=-128; j<128; ++j) { + bytes[0] = (byte)j; + char parentValue = new String(bytes, parentEnc).charAt(0); + // NOTE: 0x25 doesn't round trip on the EBCDIC code pages, + // so we don't check that code point in the sanity check. + if (j != 0x0025) { + chars[0] = parentValue; + int parentRoundTrip = new String(chars).getBytes(parentEnc)[0]; + // This is a sanity check -- we aren't really testing the parent + // encoder here. + if (parentRoundTrip != j) { + pass = false; + System.out.println("Error: Encoder " + parentEnc + + " fails round-trip: " + j + + " -> \\u" + Integer.toHexString(parentValue) + + " -> " + parentRoundTrip); + } + } + map[(j+0x100)&0xFF] = parentValue; + } + + // Modify map with new expected values. Each pair has code point, parent value, euro value. + // Terminated by null. + while (DATA[i] != null) { + int codePoint = Integer.valueOf(DATA[i++], 16).intValue(); + char expectedParentValue = DATA[i++].charAt(0); + char expectedEuroValue = DATA[i++].charAt(0); + // This is a sanity check -- we aren't really testing the parent + // encoder here. + if (map[codePoint] != expectedParentValue) { + pass = false; + System.out.println("Error: Encoder " + parentEnc + + " " + Integer.toHexString(codePoint) + " -> \\u" + + Integer.toHexString(map[codePoint]) + ", expected \\u" + + Integer.toHexString(expectedParentValue)); + } + // Fill in new expected value + map[codePoint] = expectedEuroValue; + } + ++i; // Skip over null at end of set + + // Now verify the euro encoder + currentEnc = euroEnc; + for (int j=-128; j<128; ++j) { + bytes[0] = (byte)j; + char euroValue = new String(bytes, euroEnc).charAt(0); + chars[0] = euroValue; + // NOTE: 0x15 doesn't round trip on the EBCDIC code pages, + // so we don't check that code point in the sanity check. + if (j != 0x0015) { + int euroRoundTrip = new String(chars).getBytes(euroEnc)[0]; + if (euroRoundTrip != j) { + pass = false; + System.out.println("Error: Encoder " + euroEnc + + " fails round-trip at " + j); + } + } + // Compare against the map + if (euroValue != map[(j+0x100)&0xFF]) { + pass = false; + System.out.println("Error: Encoder " + euroEnc + + " " + Integer.toHexString((j+0x100)&0xFF) + " -> \\u" + + Integer.toHexString(euroValue) + ", expected \\u" + + Integer.toHexString(map[(j+0x100)&0xFF])); + } + } + } catch (UnsupportedEncodingException e) { + System.out.println("Unsupported encoding " + currentEnc); + pass = false; + while (i < DATA.length && DATA[i] != null) ++i; + ++i; // Skip over null + } + } + if (!pass) { + throw new RuntimeException("Bug 4114080 - Euro encoder test failed"); + } + } + static String[] DATA = { + // New converter, parent converter, [ code point that changed, parent code point value, + // euro code point value ], null + // Any number of changed code points may be specified, including zero. + "ISO8859_15_FDIS", "ISO8859_1", + "A4", "\u00A4", "\u20AC", + "A6", "\u00A6", "\u0160", + "A8", "\u00A8", "\u0161", + "B4", "\u00B4", "\u017D", + "B8", "\u00B8", "\u017E", + "BC", "\u00BC", "\u0152", + "BD", "\u00BD", "\u0153", + "BE", "\u00BE", "\u0178", + null, + // 923 is IBM's name for ISO 8859-15; make sure they're identical + "Cp923", "ISO8859_15_FDIS", null, + "Cp858", "Cp850", "D5", "\u0131", "\u20AC", null, + "Cp1140", "Cp037", "9F", "\u00A4", "\u20AC", null, + "Cp1141", "Cp273", "9F", "\u00A4", "\u20AC", null, + "Cp1142", "Cp277", "5A", "\u00A4", "\u20AC", null, + "Cp1143", "Cp278", "5A", "\u00A4", "\u20AC", null, + "Cp1144", "Cp280", "9F", "\u00A4", "\u20AC", null, + "Cp1145", "Cp284", "9F", "\u00A4", "\u20AC", null, + "Cp1146", "Cp285", "9F", "\u00A4", "\u20AC", null, + "Cp1147", "Cp297", "9F", "\u00A4", "\u20AC", null, + "Cp1148", "Cp500", "9F", "\u00A4", "\u20AC", null, + "Cp1149", "Cp871", "9F", "\u00A4", "\u20AC", null, + }; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindASCIICodingBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,90 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @bug 6196991 + * @summary Roundtrip Encoding/Decoding of just one ASCII char + * @author Martin Buchholz + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindASCIICodingBugs { + private static int failures = 0; + + private static void check(boolean condition) { + if (! condition) { + new Error("test failed").printStackTrace(); + failures++; + } + } + + private static boolean equals(byte[] ba, ByteBuffer bb) { + if (ba.length != bb.limit()) + return false; + for (int i = 0; i < ba.length; i++) + if (ba[i] != bb.get(i)) + return false; + return true; + } + + public static void main(String[] args) throws Exception { + for (Map.Entry<String,Charset> e + : Charset.availableCharsets().entrySet()) { + String csn = e.getKey(); + Charset cs = e.getValue(); + + // Delete the following lines when these charsets are fixed! + if (csn.equals("x-JIS0208")) continue; // MalformedInput + if (csn.equals("JIS_X0212-1990")) continue; // MalformedInput + + if (! cs.canEncode()) continue; + + CharsetEncoder enc = cs.newEncoder(); + CharsetDecoder dec = cs.newDecoder(); + + if (! enc.canEncode('A')) continue; + + System.out.println(csn); + + try { + byte[] bytes1 = "A".getBytes(csn); + ByteBuffer bb = enc.encode(CharBuffer.wrap(new char[]{'A'})); + + check(equals(bytes1, bb)); + check(new String(bytes1, csn).equals("A")); + + CharBuffer cb = dec.decode(bb); + check(cb.toString().equals("A")); + } catch (Throwable t) { + t.printStackTrace(); + failures++; + } + } + + if (failures > 0) + throw new Exception(failures + "tests failed"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindASCIIRangeCodingBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,78 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @bug 6378295 + * @summary Roundtrip Encoding/Decoding of ASCII chars from 0x00-0x7f + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindASCIIRangeCodingBugs { + private static int failures = 0; + private static byte[] asciiBytes = new byte[0x80]; + private static char[] asciiChars = new char[0x80]; + private static String asciiString; + + private static void check(String csn) throws Exception { + System.out.println(csn); + if (! Arrays.equals(asciiString.getBytes(csn), asciiBytes)) { + System.out.printf("%s -> bytes%n", csn); + failures++; + } + if (! new String(asciiBytes, csn).equals(asciiString)) { + System.out.printf("%s -> chars%n", csn); + failures++; + } + } + + public static void main(String[] args) throws Exception { + for (int i = 0; i < 0x80; i++) { + asciiBytes[i] = (byte) i; + asciiChars[i] = (char) i; + } + asciiString = new String(asciiChars); + Charset ascii = Charset.forName("ASCII"); + for (Map.Entry<String,Charset> e + : Charset.availableCharsets().entrySet()) { + String csn = e.getKey(); + Charset cs = e.getValue(); + if (!cs.contains(ascii) || + csn.matches(".*2022.*") || //iso2022 family + csn.matches("x-windows-5022[0|1]") || //windows 2022jp + csn.matches(".*UTF-[16|32].*")) //multi-bytes + continue; + if (! cs.canEncode()) continue; + try { + check(csn); + } catch (Throwable t) { + t.printStackTrace(); + failures++; + } + } + if (failures > 0) + throw new Exception(failures + "tests failed"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindCanEncodeBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,93 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 5066863 5066867 5066874 5066879 5066884 5066887 + @summary canEncode() false iff encode() throws CharacterCodingException + @run main/timeout=1200 FindCanEncodeBugs + @author Martin Buchholz + */ + +import java.util.*; +import java.nio.charset.*; +import java.nio.*; + +public class FindCanEncodeBugs { + static boolean encodable1(CharsetEncoder enc, char c) { + enc.reset(); + return enc.canEncode(c); + } + + static boolean encodable2(CharsetEncoder enc, char c) { + enc.reset(); + try { enc.encode(CharBuffer.wrap(new char[]{c})); return true; } + catch (CharacterCodingException e) { return false; } + } + + public static void main(String[] args) throws Exception { + int failures = 0; + + for (Map.Entry<String,Charset> e + : Charset.availableCharsets().entrySet()) { + String csn = e.getKey(); + Charset cs = e.getValue(); + + if (! cs.canEncode() || + csn.matches("x-COMPOUND_TEXT") || + csn.matches("x-ISO-2022-CN-CNS") || // ISO2022_CN_CNS supports less + csn.matches("(x-)?IBM(970).*")) // Broken as of 2004-07 + continue; + + //System.out.println(csn); + + CharsetEncoder enc = cs.newEncoder(); + + for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; i++) { + boolean encodable1 = encodable1(enc, (char)i); + boolean encodable2 = encodable2(enc, (char)i); + if (encodable1 != encodable2) { + int start = i; + int end = i; + for (int j = i; + j <= '\uffff' && + encodable1(enc, (char)j) == encodable1 && + encodable2(enc, (char)j) == encodable2; + j++) + end = j; + System.out.printf("charset=%-18s canEncode=%-5b ", + csn, encodable1); + if (start == end) + System.out.printf("\'\\u%04x\'%n", start); + else + System.out.printf("\'\\u%04x\' - \'\\u%04x\'%n", + start, end); + i = end; + failures++; + } + } + } + + if (failures > 0) + throw new Exception(failures + " failures"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindDecoderBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,442 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6380723 + * @summary Decode many byte sequences in many ways + * @run main/timeout=1800 FindDecoderBugs + * @author Martin Buchholz + */ + +import java.util.*; +import java.util.regex.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindDecoderBugs { + + static boolean isBroken(String csn) { + if (csn.equals("x-COMPOUND_TEXT")) return true; + return false; + } + + static <T extends Comparable<? super T>> List<T> sort(Collection<T> c) { + List<T> list = new ArrayList<T>(c); + Collections.sort(list); + return list; + } + + static class TooManyFailures extends RuntimeException { + private static final long serialVersionUID = 0L; + } + + static String string(byte[] a) { + final StringBuilder sb = new StringBuilder(); + for (byte b : a) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } + + static String string(char[] a) { + final StringBuilder sb = new StringBuilder(); + for (char c : a) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("\\u%04x", (int) c)); + } + return sb.toString(); + } + + static class Reporter { + // Some machinery to make sure only a small number of errors + // that are "too similar" are reported. + static class Counts extends HashMap<String, Long> { + private static final long serialVersionUID = -1; + long inc(String signature) { + Long count = get(signature); + if (count == null) count = 0L; + put(signature, count+1); + return count+1; + } + } + + final Counts failureCounts = new Counts(); + final static long maxFailures = 2; + + final static Pattern hideBytes = Pattern.compile("\"[0-9a-f ]+\""); + final static Pattern hideChars = Pattern.compile("\\\\u[0-9a-f]{4}"); + + boolean bug(String format, Object... args) { + String signature = String.format(format, args); + signature = hideBytes.matcher(signature).replaceAll("\"??\""); + signature = hideChars.matcher(signature).replaceAll("\\u????"); + failed++; + if (failureCounts.inc(signature) <= maxFailures) { + System.out.printf(format, args); + System.out.println(); + return true; + } + return false; + } + + void summarize() { + for (String key : sort(failureCounts.keySet())) + System.out.printf("-----%n%s%nfailures=%d%n", + key, failureCounts.get(key)); + } + } + + static final Reporter reporter = new Reporter(); + + static class Result { + final int limit; + final int ipos; + final boolean direct; + final byte[] ia; + final char[] oa; + final CoderResult cr; + + Result(ByteBuffer ib, CharBuffer ob, CoderResult cr) { + ipos = ib.position(); + ia = toArray(ib); + oa = toArray(ob); + direct = ib.isDirect(); + limit = ob.limit(); + this.cr = cr; + } + + static byte[] toArray(ByteBuffer b) { + int pos = b.position(); + byte[] a = new byte[b.limit()]; + b.position(0); + b.get(a); + b.position(pos); + return a; + } + + static char[] toArray(CharBuffer b) { + char[] a = new char[b.position()]; + b.position(0); + b.get(a); + return a; + } + + static boolean eq(Result x, Result y) { + return x == y || + (x != null && y != null && + (Arrays.equals(x.oa, y.oa) && + x.ipos == y.ipos && + x.cr == y.cr)); + } + + public String toString() { + return String.format("\"%s\"[%d/%d] => %s \"%s\"[%d/%d]%s", + string(ia), ipos, ia.length, + cr, string(oa), oa.length, limit, + (direct ? " (direct)" : "")); + } + } + + // legend: r=regular d=direct In=Input Ou=Output + static final int maxBufSize = 20; + static final ByteBuffer[] ribs = new ByteBuffer[maxBufSize]; + static final ByteBuffer[] dibs = new ByteBuffer[maxBufSize]; + + static final CharBuffer[] robs = new CharBuffer[maxBufSize]; + static final CharBuffer[] dobs = new CharBuffer[maxBufSize]; + static { + for (int i = 0; i < maxBufSize; i++) { + ribs[i] = ByteBuffer.allocate(i); + dibs[i] = ByteBuffer.allocateDirect(i); + robs[i] = CharBuffer.allocate(i); + dobs[i] = ByteBuffer.allocateDirect(i*2).asCharBuffer(); + } + } + + static class CharsetTester { + private final Charset cs; + private static final long maxFailures = 5; + private long failures = 0; + // private static final long maxCharsetFailures = Long.MAX_VALUE; + private static final long maxCharsetFailures = 10000L; + private final long failed0 = failed; + + CharsetTester(Charset cs) { + this.cs = cs; + } + + static boolean bug(String format, Object... args) { + return reporter.bug(format, args); + } + + Result recode(ByteBuffer ib, CharBuffer ob) { + try { + char canary = '\u4242'; + ib.clear(); // Prepare to read + ob.clear(); // Prepare to write + for (int i = 0; i < ob.limit(); i++) + ob.put(i, canary); + CharsetDecoder coder = cs.newDecoder(); + CoderResult cr = coder.decode(ib, ob, false); + equal(ib.limit(), ib.capacity()); + equal(ob.limit(), ob.capacity()); + Result r = new Result(ib, ob, cr); + if (cr.isError()) + check(cr.length() > 0); + if (cr.isOverflow() && ob.remaining() > 10) + bug("OVERFLOW, but there's lots of room: %s %s", + cs, r); +// if (cr.isOverflow() && ib.remaining() == 0) +// bug("OVERFLOW, yet remaining() == 0: %s %s", +// cs, r); + if (cr.isError() && ib.remaining() < cr.length()) + bug("remaining() < CoderResult.length(): %s %s", + cs, r); +// if (ib.position() == 0 && ob.position() > 0) +// reporter. bug("output only if input consumed: %s %s", +// cs, r); + // Should we warn if cr.isUnmappable() ?? + CoderResult cr2 = coder.decode(ib, ob, false); + if (ib.position() != r.ipos || + ob.position() != r.oa.length || + cr != cr2) + bug("Coding operation not idempotent: %s%n %s%n %s", + cs, r, new Result(ib, ob, cr2)); + if (ob.position() < ob.limit() && + ob.get(ob.position()) != canary) + bug("Buffer overrun: %s %s %s", + cs, r, ob.get(ob.position())); + return r; + } catch (Throwable t) { + if (bug("Unexpected exception: %s %s %s", + cs, t.getClass().getSimpleName(), + new Result(ib, ob, null))) + t.printStackTrace(); + return null; + } + } + + Result recode2(byte[] ia, int n) { + int len = ia.length; + ByteBuffer rib = ByteBuffer.wrap(ia); + ByteBuffer dib = dibs[len]; + dib.clear(); dib.put(ia); dib.clear(); + CharBuffer rob = robs[n]; + CharBuffer dob = dobs[n]; + equal(rob.limit(), n); + equal(dob.limit(), n); + check(dib.isDirect()); + check(dob.isDirect()); + Result r1 = recode(rib, rob); + Result r2 = recode(dib, dob); + if (r1 != null && r2 != null && ! Result.eq(r1, r2)) + bug("Results differ for direct buffers: %s%n %s%n %s", + cs, r1, r2); + return r1; + } + + Result test(byte[] ia) { + if (failed - failed0 >= maxCharsetFailures) + throw new TooManyFailures(); + + Result roomy = recode2(ia, maxBufSize - 1); + if (roomy == null) return roomy; + int olen = roomy.oa.length; + if (olen > 0) { + if (roomy.ipos == roomy.ia.length) { + Result perfectFit = recode2(ia, olen); + if (! Result.eq(roomy, perfectFit)) + bug("Results differ: %s%n %s%n %s", + cs, roomy, perfectFit); + } + for (int i = 0; i < olen; i++) { + Result claustrophobic = recode2(ia, i); + if (claustrophobic == null) return roomy; + if (roomy.cr.isUnderflow() && + ! claustrophobic.cr.isOverflow()) + bug("Expected OVERFLOW: %s%n %s%n %s", + cs, roomy, claustrophobic); + } + } + return roomy; + } + + void testExhaustively(byte[] prefix, int n) { + int len = prefix.length; + byte[] ia = Arrays.copyOf(prefix, len + 1); + for (int i = 0; i < 0x100; i++) { + ia[len] = (byte) i; + if (n == 1) + test(ia); + else + testExhaustively(ia, n - 1); + } + } + + void testRandomly(byte[] prefix, int n) { + int len = prefix.length; + byte[] ia = Arrays.copyOf(prefix, len + n); + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < n; j++) + ia[len + j] = randomByte(); + test(ia); + } + } + + void testPrefix(byte[] prefix) { + if (prefix.length > 0) + System.out.printf("Testing prefix %s%n", string(prefix)); + + test(prefix); + + testExhaustively(prefix, 1); + testExhaustively(prefix, 2); + // Can you spare a week of CPU time? + // testExhaustively(cs, tester, prefix, 3); + + testRandomly(prefix, 3); + testRandomly(prefix, 4); + } + } + + private final static Random rnd = new Random(); + private static byte randomByte() { + return (byte) rnd.nextInt(0x100); + } + private static byte[] randomBytes(int len) { + byte[] a = new byte[len]; + for (int i = 0; i < len; i++) + a[i] = randomByte(); + return a; + } + + private static final byte SS2 = (byte) 0x8e; + private static final byte SS3 = (byte) 0x8f; + private static final byte ESC = (byte) 0x1b; + private static final byte SO = (byte) 0x0e; + private static final byte SI = (byte) 0x0f; + + private final static byte[][] stateChangers = { + {SS2}, {SS3}, {SO}, {SI} + }; + + private final static byte[][]escapeSequences = { + {ESC, '(', 'B'}, + {ESC, '(', 'I'}, + {ESC, '(', 'J'}, + {ESC, '$', '@'}, + {ESC, '$', 'A'}, + {ESC, '$', ')', 'A'}, + {ESC, '$', ')', 'C'}, + {ESC, '$', ')', 'G'}, + {ESC, '$', '*', 'H'}, + {ESC, '$', '+', 'I'}, + {ESC, '$', 'B'}, + {ESC, 'N'}, + {ESC, 'O'}, + {ESC, '$', '(', 'D'}, + }; + + private static boolean isStateChanger(Charset cs, byte[] ia) { + Result r = new CharsetTester(cs).recode2(ia, 9); + return r == null ? false : + (r.cr.isUnderflow() && + r.ipos == ia.length && + r.oa.length == 0); + } + + private final static byte[][] incompletePrefixes = { + {ESC}, + {ESC, '('}, + {ESC, '$'}, + {ESC, '$', '(',}, + }; + + private static boolean isIncompletePrefix(Charset cs, byte[] ia) { + Result r = new CharsetTester(cs).recode2(ia, 9); + return r == null ? false : + (r.cr.isUnderflow() && + r.ipos == 0 && + r.oa.length == 0); + } + + private static void testCharset(Charset cs) throws Throwable { + final String csn = cs.name(); + + if (isBroken(csn)) { + System.out.printf("Skipping possibly broken charset %s%n", csn); + return; + } + System.out.println(csn); + CharsetTester tester = new CharsetTester(cs); + + tester.testPrefix(new byte[0]); + + if (! csn.matches("(?:x-)?(?:UTF|JIS(?:_X)?0).*")) { + for (byte[] prefix : stateChangers) + if (isStateChanger(cs, prefix)) + tester.testPrefix(prefix); + + for (byte[] prefix : incompletePrefixes) + if (isIncompletePrefix(cs, prefix)) + tester.testPrefix(prefix); + + if (isIncompletePrefix(cs, new byte[] {ESC})) + for (byte[] prefix : escapeSequences) + if (isStateChanger(cs, prefix)) + tester.testPrefix(prefix); + } + } + + private static void realMain(String[] args) { + for (Charset cs : sort(Charset.availableCharsets().values())) { + try { + testCharset(cs); + } catch (TooManyFailures e) { + System.out.printf("Too many failures for %s%n", cs); + } catch (Throwable t) { + unexpected(t); + } + } + reporter.summarize(); + } + + //--------------------- Infrastructure --------------------------- + static volatile long passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String format, Object... args) { + System.out.println(String.format(format, args)); failed++;} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindEncoderBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,529 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6233345 6381699 6381702 6381705 6381706 + * @summary Encode many char sequences in many ways + * @run main/timeout=1200 FindEncoderBugs + * @author Martin Buchholz + */ + +import java.util.*; +import java.util.regex.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindEncoderBugs { + + static boolean isBroken(String csn) { + if (csn.equals("x-COMPOUND_TEXT")) return true; + if (csn.equals("x-IBM834")) return true; // stateful korean + if (csn.equals("x-IBM933")) return true; // stateful korean + if (csn.equals("x-IBM970")) return true; // stateful korean + if (csn.equals("x-IBM949")) return true; // stateful korean + if (csn.equals("x-IBM949C")) return true; // stateful korean + return false; + } + + static <T extends Comparable<? super T>> List<T> sort(Collection<T> c) { + List<T> list = new ArrayList<T>(c); + Collections.sort(list); + return list; + } + + static class TooManyFailures extends RuntimeException { + private static final long serialVersionUID = 0L; + } + + static String string(byte[] a) { + final StringBuilder sb = new StringBuilder(); + for (byte b : a) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } + + static String string(char[] a) { + final StringBuilder sb = new StringBuilder(); + for (char c : a) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("\\u%04x", (int) c)); + } + return sb.toString(); + } + + static class Reporter { + // Some machinery to make sure only a small number of errors + // that are "too similar" are reported. + static class Counts extends HashMap<String, Long> { + private static final long serialVersionUID = -1; + long inc(String signature) { + Long count = get(signature); + if (count == null) count = 0L; + put(signature, count+1); + return count+1; + } + } + + final Counts failureCounts = new Counts(); + final static long maxFailures = 2; + + final static Pattern hideBytes = Pattern.compile("\"[0-9a-f ]+\""); + final static Pattern hideChars = Pattern.compile("\\\\u[0-9a-f]{4}"); + + boolean bug(String format, Object... args) { + String signature = String.format(format, args); + // signature = hideBytes.matcher(signature).replaceAll("\"??\""); + // signature = hideChars.matcher(signature).replaceAll("\\u????"); + failed++; + if (failureCounts.inc(signature) <= maxFailures) { + System.out.printf(format, args); + System.out.println(); + return true; + } + return false; + } + + void summarize() { + for (String key : sort(failureCounts.keySet())) + System.out.printf("-----%n%s%nfailures=%d%n", + key, failureCounts.get(key)); + } + } + + static final Reporter reporter = new Reporter(); + + static class Result { + final int limit; + final int ipos; + final boolean direct; + final char[] ia; + final byte[] oa; + final CoderResult cr; + + private static byte[] toByteArray(ByteBuffer bb) { + byte[] bytes = new byte[bb.position()]; + for (int i = 0; i < bytes.length; i++) + bytes[i] = bb.get(i); + return bytes; + } + + Result(CharBuffer ib, ByteBuffer ob, CoderResult cr) { + ipos = ib.position(); + ia = toArray(ib); + oa = toArray(ob); + direct = ib.isDirect(); + limit = ob.limit(); + this.cr = cr; + } + + static char[] toArray(CharBuffer b) { + int pos = b.position(); + char[] a = new char[b.limit()]; + b.position(0); + b.get(a); + b.position(pos); + return a; + } + + static byte[] toArray(ByteBuffer b) { + byte[] a = new byte[b.position()]; + b.position(0); + b.get(a); + return a; + } + + static boolean eq(Result x, Result y) { + return x == y || + (x != null && y != null && + (Arrays.equals(x.oa, y.oa) && + x.ipos == y.ipos && + x.cr == y.cr)); + } + + public String toString() { + return String.format("\"%s\"[%d/%d] => %s \"%s\"[%d/%d]%s", + string(ia), ipos, ia.length, + cr, string(oa), oa.length, limit, + (direct ? " (direct)" : "")); + } + } + + static class CharsetTester { + private final Charset cs; + private final boolean hasBom; + private static final int maxFailures = 5; + private int failures = 0; + // private static final long maxCharsetFailures = Long.MAX_VALUE; + private static final long maxCharsetFailures = 10000L; + private final long failed0 = failed; + + // legend: r=regular d=direct In=Input Ou=Output + static final int maxBufSize = 20; + static final CharBuffer[] rInBuffers = new CharBuffer[maxBufSize]; + static final CharBuffer[] dInBuffers = new CharBuffer[maxBufSize]; + + static final ByteBuffer[] rOuBuffers = new ByteBuffer[maxBufSize]; + static final ByteBuffer[] dOuBuffers = new ByteBuffer[maxBufSize]; + static { + for (int i = 0; i < maxBufSize; i++) { + rInBuffers[i] = CharBuffer.allocate(i); + dInBuffers[i] = ByteBuffer.allocateDirect(i*2).asCharBuffer(); + rOuBuffers[i] = ByteBuffer.allocate(i); + dOuBuffers[i] = ByteBuffer.allocateDirect(i); + } + } + + CharsetTester(Charset cs) { + this.cs = cs; + this.hasBom = + cs.name().matches(".*BOM.*") || + cs.name().equals("UTF-16"); + } + + static boolean bug(String format, Object... args) { + return reporter.bug(format, args); + } + + static boolean hasBom(byte[] a) { + switch (a.length) { + case 2: case 4: + int sum = 0; + for (byte x : a) + sum += x; + return sum == (byte) 0xfe + (byte) 0xff; + default: return false; + } + } + + void testSurrogates() { + int failures = 0; + for (int i = 0; i < 10; i++) { + Result r = test(new char[] { randomHighSurrogate() }); + if (r == null) break; + if (! (r.cr.isUnderflow() && + r.ipos == 0)) + bug("Lone high surrogate not UNDERFLOW: %s %s", + cs, r); + } + for (int i = 0; i < 10; i++) { + Result r = test(new char[] { randomLowSurrogate() }); + if (r == null) break; + if (! (r.cr.isMalformed() && r.cr.length() == 1)) + bug("Lone low surrogate not MALFORMED[1]: %s %s", + cs, r); + } + char[] chars = new char[2]; + for (int i = 0; i < 10; i++) { + chars[0] = randomLowSurrogate(); // Always illegal + chars[1] = randomChar(); + Result r = test(chars); + if (r == null) break; + if (! (r.cr.isMalformed() && + r.cr.length() == 1 && + (r.ipos == 0 || (hasBom && hasBom(r.oa))))) { + if (failures++ > 5) return; + bug("Unpaired low surrogate not MALFORMED[1]: %s %s", + cs, r); + } + } + for (int i = 0; i < 10; i++) { + chars[0] = randomHighSurrogate(); + do { + chars[1] = randomChar(); + } while (Character.isLowSurrogate(chars[1])); + Result r = test(chars); + if (r == null) break; + if (! (r.cr.isMalformed() && + r.cr.length() == 1 && + (r.ipos == 0 || (hasBom && hasBom(r.oa))))) { + if (failures++ > 5) return; + bug("Unpaired high surrogate not MALFORMED[1]: %s %s", + cs, r); + } + } + for (int i = 0; i < 1000; i++) { + chars[0] = randomHighSurrogate(); + chars[1] = randomLowSurrogate(); + Result r = test(chars); + if (r == null) break; + if (! ((r.cr.isUnmappable() && + r.cr.length() == 2 && + r.oa.length == 0) + || + (r.cr.isUnderflow() && + r.oa.length > 0 && + r.ipos == 2))) { + if (failures++ > 5) return; + bug("Legal supplementary character bug: %s %s", + cs, r); + } + } + } + +// if (! (r.cr.isMalformed() && +// r.cr.length() == 1 && +// (rob.position() == 0 || hasBom(rob)))) { +// if (failures++ > 5) return; +// bug("Unpaired surrogate not malformed: %s %s", +// cs, r); +// } +// } + +// dib.clear(); dib.put(chars); dib.flip(); +// rib.position(0); +// rob.clear(); rob.limit(lim); +// for (CharBuffer ib : new CharBuffer[] { rib, dib }) { +// Result r = recode(ib, rob); +// if (! (r.cr.isMalformed() && +// r.cr.length() == 1 && +// (rob.position() == 0 || hasBom(rob)))) { +// if (failures++ > 5) return; +// bug("Unpaired surrogate not malformed: %s %s", +// cs, r); +// } +// } +// //} +// for (int i = 0; i < 10000; i++) { +// chars[0] = randomHighSurrogate(); +// chars[1] = randomLowSurrogate(); +// dib.clear(); dib.put(chars); dib.flip(); +// rib.position(0); +// rob.clear(); rob.limit(lim); +// for (CharBuffer ib : new CharBuffer[] { rib, dib }) { +// Result r = recode(ib, rob); +// if (! ((r.cr.isUnmappable() && +// r.cr.length() == 2 && +// rob.position() == 0) +// || +// (r.cr.isUnderflow() && +// rob.position() > 0 && +// ib.position() == 2))) { +// if (failures++ > 5) return; +// bug("Legal supplementary character bug: %s %s", +// cs, r); +// } +// } +// } +// } +// } + + Result recode(CharBuffer ib, ByteBuffer ob) { + try { + byte canary = 22; + ib.clear(); // Prepare to read + ob.clear(); // Prepare to write + for (int i = 0; i < ob.limit(); i++) + ob.put(i, canary); + CharsetEncoder coder = cs.newEncoder(); + CoderResult cr = coder.encode(ib, ob, false); + equal(ib.limit(), ib.capacity()); + equal(ob.limit(), ob.capacity()); + Result r = new Result(ib, ob, cr); + if (cr.isError()) + check(cr.length() > 0); + if (cr.isOverflow() && ob.remaining() > 10) + bug("OVERFLOW, but there's lots of room: %s %s", + cs, r); +// if (cr.isOverflow() && ib.remaining() == 0 && ! hasBom) +// bug("OVERFLOW, yet remaining() == 0: %s %s", +// cs, r); + if (cr.isError() && ib.remaining() < cr.length()) + bug("remaining() < CoderResult.length(): %s %s", + cs, r); +// if (ib.position() == 0 +// && ob.position() > 0 +// && ! hasBom(r.oa)) +// bug("output only if input consumed: %s %s", +// cs, r); + CoderResult cr2 = coder.encode(ib, ob, false); + if (ib.position() != r.ipos || + ob.position() != r.oa.length || + cr != cr2) + bug("Coding operation not idempotent: %s%n %s%n %s", + cs, r, new Result(ib, ob, cr2)); + if (ob.position() < ob.limit() && + ob.get(ob.position()) != canary) + bug("Buffer overrun: %s %s %s", + cs, r, ob.get(ob.position())); + return r; + } catch (Throwable t) { + if (bug("Unexpected exception: %s %s %s", + cs, t.getClass().getSimpleName(), + new Result(ib, ob, null))) + t.printStackTrace(); + return null; + } + } + + Result recode2(char[] ia, int n) { + int len = ia.length; + CharBuffer rib = CharBuffer.wrap(ia); + CharBuffer dib = dInBuffers[len]; + dib.clear(); dib.put(ia); dib.clear(); + ByteBuffer rob = rOuBuffers[n]; + ByteBuffer dob = dOuBuffers[n]; + equal(rob.limit(), n); + equal(dob.limit(), n); + check(dib.isDirect()); + check(dob.isDirect()); + Result r1 = recode(rib, rob); + Result r2 = recode(dib, dob); + if (r1 != null && r2 != null && ! Result.eq(r1, r2)) + bug("Results differ for direct buffers: %s%n %s%n %s", + cs, r1, r2); + return r1; + } + + Result test(char[] ia) { + if (failed - failed0 >= maxCharsetFailures) + throw new TooManyFailures(); + + Result roomy = recode2(ia, maxBufSize - 1); + if (roomy == null) return roomy; + int olen = roomy.oa.length; + if (olen > 0) { + if (roomy.ipos == roomy.ia.length) { + Result perfectFit = recode2(ia, olen); + if (! Result.eq(roomy, perfectFit)) + bug("Results differ: %s%n %s%n %s", + cs, roomy, perfectFit); + } + for (int i = 0; i < olen; i++) { + Result claustrophobic = recode2(ia, i); + if (claustrophobic == null) return roomy; + if (roomy.cr.isUnderflow() && + ! claustrophobic.cr.isOverflow()) + bug("Expected OVERFLOW: %s%n %s%n %s", + cs, roomy, claustrophobic); + } + } + return roomy; + } + + void testExhaustively(char[] prefix, int n) { + int len = prefix.length; + char[] ia = Arrays.copyOf(prefix, len + 1); + for (int i = 0; i < 0x10000; i++) { + ia[len] = (char) i; + if (n == 1) + test(ia); + else + testExhaustively(ia, n - 1); + } + } + + void testRandomly(char[] prefix, int n) { + int len = prefix.length; + char[] ia = Arrays.copyOf(prefix, len + n); + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < n; j++) + ia[len + j] = randomChar(); + test(ia); + } + } + + void testPrefix(char[] prefix) { + if (prefix.length > 0) + System.out.printf("Testing prefix %s%n", string(prefix)); + + test(prefix); + + testExhaustively(prefix, 1); + // Can you spare a year of CPU time? + //testExhaustively(prefix, 2); + + testRandomly(prefix, 2); + testRandomly(prefix, 3); + } + } + + private final static Random rnd = new Random(); + private static char randomChar() { + return (char) rnd.nextInt(Character.MAX_VALUE); + } + private static char randomHighSurrogate() { + return (char) (Character.MIN_HIGH_SURROGATE + rnd.nextInt(1024)); + } + private static char randomLowSurrogate() { + return (char) (Character.MIN_LOW_SURROGATE + rnd.nextInt(1024)); + } + + private static void testCharset(Charset cs) throws Throwable { + if (! cs.canEncode()) + return; + + final String csn = cs.name(); + + if (isBroken(csn)) { + System.out.printf("Skipping possibly broken charset %s%n", csn); + return; + } + System.out.println(csn); + + CharsetTester tester = new CharsetTester(cs); + + tester.testSurrogates(); + + tester.testPrefix(new char[] {}); + + if (csn.equals("x-ISCII91")) { + System.out.println("More ISCII testing..."); + new CharsetTester(cs).testPrefix(new char[]{'\u094d'}); // Halant + new CharsetTester(cs).testPrefix(new char[]{'\u093c'}); // Nukta + } + } + + private static void realMain(String[] args) { + for (Charset cs : sort(Charset.availableCharsets().values())) { + try { + testCharset(cs); + } catch (TooManyFailures e) { + System.out.printf("Too many failures for %s%n", cs); + } catch (Throwable t) { + unexpected(t); + } + } + reporter.summarize(); + } + + //--------------------- Infrastructure --------------------------- + static volatile long passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String format, Object... args) { + System.out.println(String.format(format, args)); failed++;} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/FindOneCharEncoderBugs.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,169 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 5058133 6233345 6381699 6381702 6381705 6381706 + * @summary Check that all one-char sequences can be encoded by all charsets + * @run main/timeout=1200 FindOneCharEncoderBugs + * @author Martin Buchholz + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; + +public class FindOneCharEncoderBugs { + final static String[] brokenCharsets = { + // Delete the following lines when these charsets are fixed! + "x-IBM970", + "x-COMPOUND_TEXT", // Direct buffers not supported + }; + + private static boolean equals(byte[] ba, ByteBuffer bb) { + if (ba.length != bb.limit()) + return false; + for (int i = 0; i < ba.length; i++) + if (ba[i] != bb.get(i)) + return false; + return true; + } + + private static String toString(byte[] bytes) { + final StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("%02x", (int)b)); + } + return sb.toString(); + } + + private static String toString(ByteBuffer bb) { + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bb.limit(); i++) { + if (sb.length() != 0) sb.append(' '); + sb.append(String.format("%02x", (int)bb.get(i))); + } + return sb.toString(); + } + + private static ByteBuffer convert(Charset cs, char c, CharBuffer cb) throws Throwable { + cb.clear(); cb.put(c); cb.flip(); + return cs.newEncoder() + .onUnmappableCharacter(CodingErrorAction.REPLACE) + .onMalformedInput(CodingErrorAction.REPLACE) + .encode(cb); + } + + /** Returns a direct CharBuffer with the same capacity as ordinary CharBuffer ocb */ + private static CharBuffer directCharBuffer(CharBuffer ocb) { + final CharBuffer dcb = + ByteBuffer.allocateDirect(ocb.capacity() * Character.SIZE / Byte.SIZE) + .asCharBuffer(); + check(! ocb.isDirect()); + check( dcb.isDirect()); + equal(ocb.capacity(), dcb.capacity()); + return dcb; + } + + private static void testChar(byte[] expected, CharBuffer cb, Charset cs, char c) { + try { + final ByteBuffer bb = convert(cs, c, cb); + if (! equals(expected, bb)) + fail("bytes differ charset=%s direct=%s char=\\u%04x%n%s%n%s", + cs, cb.isDirect(), (int)c, + toString(expected), toString(bb)); + } catch (Throwable t) { + System.out.printf("Unexpected exception charset=%s direct=%s char=\\u%04x%n", + cs, cb.isDirect(), (int)c); + unexpected(t); + failed++; + } + } + + private static void testCharset(Charset cs) throws Throwable { + if (! cs.canEncode()) + return; + + final String csn = cs.name(); + + for (String n : brokenCharsets) + if (csn.equals(n)) { + System.out.printf("Skipping possibly broken charset %s%n", csn); + return; + } + System.out.println(csn); + + final char[] theChar = new char[1]; + final CharBuffer ocb = CharBuffer.allocate(1); + final CharBuffer dcb = directCharBuffer(ocb); + final int maxFailuresPerCharset = 5; + final int failed0 = failed; + + for (char c = '\u0000'; + (c+1 != 0x10000) && (failed - failed0 < maxFailuresPerCharset); + c++) { + theChar[0] = c; + byte[] bytes = new String(theChar).getBytes(csn); + if (bytes.length == 0) + fail("Empty output?! charset=%s char=\\u%04x", cs, (int)c); + testChar(bytes, ocb, cs, c); + testChar(bytes, dcb, cs, c); + } + } + + private static void realMain(String[] args) { + for (Charset cs : Charset.availableCharsets().values()) { + try { testCharset(cs); } + catch (Throwable t) { unexpected(t); } + } + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String format, Object... args) { + System.out.println(String.format(format, args)); failed++;} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} + private static abstract class Fun {abstract void f() throws Throwable;} + static void THROWS(Class<? extends Throwable> k, Fun... fs) { + for (Fun f : fs) + try { f.f(); fail("Expected " + k.getName() + " not thrown"); } + catch (Throwable t) { + if (k.isAssignableFrom(t.getClass())) pass(); + else unexpected(t);}} + private static abstract class CheckedThread extends Thread { + abstract void realRun() throws Throwable; + public void run() { + try {realRun();} catch (Throwable t) {unexpected(t);}}} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/HWKatakanaMS932EncodeTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,54 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4715330 + @summary Check MS932/windows-31j encoding (char->byte) for halfwidth katakana chars + */ + +/* + * Tests encodeability of the Unicode defined Halfwidth Katakana + * characters using the MS932/windows-31j encoder + */ + +public class HWKatakanaMS932EncodeTest { + public static void main(String[] args) throws Exception { + + char[] testChars = new char[1]; + byte[] testBytes = new byte[1]; + int offset = 0; + String encoding = "windows-31j"; + + // Halfwidth Katakana chars run from U+FF61 --> U+FF9F + // and their native equivalents in Code page 932 run + // sequentially from 0xa1 --> 0xdf + + for (int lsByte = 0x61 ; lsByte <= 0x9F; lsByte++, offset++) { + testChars[0] = (char) (lsByte | 0xFF00); + String s = new String(testChars); + testBytes = s.getBytes(encoding); + if ( testBytes[0] != (byte)(0xa1 + offset)) + throw new Exception("failed Test"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/ISCIITest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,350 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4328178 + @summary Performs baseline and regression test on the ISCII91 charset + */ + +import java.io.*; + +public class ISCIITest { + + private static void failureReport() { + System.err.println ("Failed ISCII91 Regression Test"); + } + + private static void mapEquiv(int start, + int end, + String testName) + throws Exception + { + byte[] singleByte = new byte[1]; + byte[] encoded = new byte[1]; + + for (int i = start; i <= end; i++ ) { + singleByte[0] = (byte) i; + try { + String unicodeStr = + new String (singleByte,"ISCII91"); + + if (i != (int)unicodeStr.charAt(0)) { + System.err.println ("FAILED ISCII91 Regression test" + + "input byte is " + i ); + throw new Exception(""); + } + encoded = unicodeStr.getBytes("ISCII91"); + + if (encoded[0] != singleByte[0]) { + System.err.println("Encoding error " + testName); + throw new Exception("Failed ISCII91 Regression test"); + } + + } catch (UnsupportedEncodingException e) { + failureReport(); + } + } + return; + } + + private static void checkUnmapped(int start, + int end, + String testName) + throws Exception { + + byte[] singleByte = new byte[1]; + + for (int i = start; i <= end; i++ ) { + singleByte[0] = (byte) i; + try { + String unicodeStr = new String (singleByte, "ISCII91"); + + if (unicodeStr.charAt(0) != '\uFFFD') { + System.err.println("FAILED " + testName + + "input byte is " + i ); + throw new Exception ("Failed ISCII91 regression test"); + } + } catch (UnsupportedEncodingException e) { + System.err.println("Unsupported character encoding"); + } + } + return; + } + + /* + * + */ + private static void checkRange(int start, int end, + char[] expectChars, + String testName) + throws Exception { + byte[] singleByte = new byte[1]; + byte[] encoded = new byte[1]; + int lookupOffset = 0; + + for (int i=start; i <= end; i++ ) { + singleByte[0] = (byte) i; + String unicodeStr = new String (singleByte, "ISCII91"); + if (unicodeStr.charAt(0) != expectChars[lookupOffset++]) { + throw new Exception ("Failed ISCII91 Regression Test"); + } + encoded = unicodeStr.getBytes("ISCII"); + } + return; + } + + /* + * Tests the ISCII91 Indic character encoding + * as per IS 13194:1991 Bureau of Indian Standards. + */ + + private static void test () throws Exception { + + try { + + + // ISCII91 is an 8-byte encoding which retains the ASCII + // mappings in the lower half. + + mapEquiv(0, 0x7f, "7 bit ASCII range"); + + // Checks a range of characters which are unmappable according + // to the standards. + + checkUnmapped(0x81, 0x9f, "UNMAPPED"); + + // Vowel Modifier chars can be used to modify the vowel + // sound of the preceding consonant, vowel or matra character. + + byte[] testByte = new byte[1]; + char[] vowelModChars = { + '\u0901', // Vowel modifier Chandrabindu + '\u0902', // Vowel modifier Anuswar + '\u0903' // Vowel modifier Visarg + }; + + checkRange(0xa1, 0xa3, vowelModChars, "INDIC VOWEL MODIFIER CHARS"); + + char[] expectChars = { + '\u0905', // a4 -- Vowel A + '\u0906', // a5 -- Vowel AA + '\u0907', // a6 -- Vowel I + '\u0908', // a7 -- Vowel II + '\u0909', // a8 -- Vowel U + '\u090a', // a9 -- Vowel UU + '\u090b', // aa -- Vowel RI + '\u090e', // ab -- Vowel E ( Southern Scripts ) + '\u090f', // ac -- Vowel EY + '\u0910', // ad -- Vowel AI + '\u090d', // ae -- Vowel AYE ( Devanagari Script ) + '\u0912', // af -- Vowel O ( Southern Scripts ) + '\u0913', // b0 -- Vowel OW + '\u0914', // b1 -- Vowel AU + '\u0911', // b2 -- Vowel AWE ( Devanagari Script ) + }; + + checkRange(0xa4, 0xb2, expectChars, "INDIC VOWELS"); + + char[] expectConsChars = + { + '\u0915', // b3 -- Consonant KA + '\u0916', // b4 -- Consonant KHA + '\u0917', // b5 -- Consonant GA + '\u0918', // b6 -- Consonant GHA + '\u0919', // b7 -- Consonant NGA + '\u091a', // b8 -- Consonant CHA + '\u091b', // b9 -- Consonant CHHA + '\u091c', // ba -- Consonant JA + '\u091d', // bb -- Consonant JHA + '\u091e', // bc -- Consonant JNA + '\u091f', // bd -- Consonant Hard TA + '\u0920', // be -- Consonant Hard THA + '\u0921', // bf -- Consonant Hard DA + '\u0922', // c0 -- Consonant Hard DHA + '\u0923', // c1 -- Consonant Hard NA + '\u0924', // c2 -- Consonant Soft TA + '\u0925', // c3 -- Consonant Soft THA + '\u0926', // c4 -- Consonant Soft DA + '\u0927', // c5 -- Consonant Soft DHA + '\u0928', // c6 -- Consonant Soft NA + '\u0929', // c7 -- Consonant NA ( Tamil ) + '\u092a', // c8 -- Consonant PA + '\u092b', // c9 -- Consonant PHA + '\u092c', // ca -- Consonant BA + '\u092d', // cb -- Consonant BHA + '\u092e', // cc -- Consonant MA + '\u092f', // cd -- Consonant YA + '\u095f', // ce -- Consonant JYA ( Bengali, Assamese & Oriya ) + '\u0930', // cf -- Consonant RA + '\u0931', // d0 -- Consonant Hard RA ( Southern Scripts ) + '\u0932', // d1 -- Consonant LA + '\u0933', // d2 -- Consonant Hard LA + '\u0934', // d3 -- Consonant ZHA ( Tamil & Malayalam ) + '\u0935', // d4 -- Consonant VA + '\u0936', // d5 -- Consonant SHA + '\u0937', // d6 -- Consonant Hard SHA + '\u0938', // d7 -- Consonant SA + '\u0939', // d8 -- Consonant HA + }; + + checkRange(0xb3, 0xd8, expectConsChars, "INDIC CONSONANTS"); + + char[] matraChars = { + '\u093e', // da -- Vowel Sign AA + '\u093f', // db -- Vowel Sign I + '\u0940', // dc -- Vowel Sign II + '\u0941', // dd -- Vowel Sign U + '\u0942', // de -- Vowel Sign UU + '\u0943', // df -- Vowel Sign RI + '\u0946', // e0 -- Vowel Sign E ( Southern Scripts ) + '\u0947', // e1 -- Vowel Sign EY + '\u0948', // e2 -- Vowel Sign AI + '\u0945', // e3 -- Vowel Sign AYE ( Devanagari Script ) + '\u094a', // e4 -- Vowel Sign O ( Southern Scripts ) + '\u094b', // e5 -- Vowel Sign OW + '\u094c', // e6 -- Vowel Sign AU + '\u0949' // e7 -- Vowel Sign AWE ( Devanagari Script ) + }; + + // Matras or Vowel signs alter the implicit + // vowel sound associated with an Indic consonant. + + checkRange(0xda, 0xe7, matraChars, "INDIC MATRAS"); + + char[] loneContextModifierChars = { + '\u094d', // e8 -- Vowel Omission Sign ( Halant ) + '\u093c', // e9 -- Diacritic Sign ( Nukta ) + '\u0964' // ea -- Full Stop ( Viram, Northern Scripts ) + }; + + checkRange(0xe8, 0xea, + loneContextModifierChars, "LONE INDIC CONTEXT CHARS"); + + + // Test Indic script numeral chars + // (as opposed to international numerals) + + char[] expectNumeralChars = + { + '\u0966', // f1 -- Digit 0 + '\u0967', // f2 -- Digit 1 + '\u0968', // f3 -- Digit 2 + '\u0969', // f4 -- Digit 3 + '\u096a', // f5 -- Digit 4 + '\u096b', // f6 -- Digit 5 + '\u096c', // f7 -- Digit 6 + '\u096d', // f8 -- Digit 7 + '\u096e', // f9 -- Digit 8 + '\u096f' // fa -- Digit 9 + }; + + checkRange(0xf1, 0xfa, + expectNumeralChars, "NUMERAL/DIGIT CHARACTERS"); + int lookupOffset = 0; + + char[] expectNuktaSub = { + '\u0950', + '\u090c', + '\u0961', + '\u0960', + '\u0962', + '\u0963', + '\u0944', + '\u093d' + }; + + /* + * ISCII uses a number of code extension techniques + * to access a number of lesser used characters. + * The Nukta character which ordinarily signifies + * a diacritic is used in combination with existing + * characters to escape them to a different character. + * value. + */ + + byte[] codeExtensionBytes = { + (byte)0xa1 , (byte)0xe9, // Chandrabindu + Nukta + // =>DEVANAGARI OM SIGN + (byte)0xa6 , (byte)0xe9, // Vowel I + Nukta + // => DEVANAGARI VOCALIC L + (byte)0xa7 , (byte)0xe9, // Vowel II + Nukta + // => DEVANAGARI VOCALIC LL + (byte)0xaa , (byte)0xe9, // Vowel RI + Nukta + // => DEVANAGARI VOCALIC RR + (byte)0xdb , (byte)0xe9, // Vowel sign I + Nukta + // => DEVANAGARI VOWEL SIGN VOCALIC L + (byte)0xdc , (byte)0xe9, // Vowel sign II + Nukta + // => DEVANAGARI VOWEL SIGN VOCALIC LL + + (byte)0xdf , (byte)0xe9, // Vowel sign Vocalic R + Nukta + // => DEVANAGARI VOWEL SIGN VOCALIC RR + (byte)0xea , (byte)0xe9 // Full stop/Phrase separator + Nukta + // => DEVANAGARI SIGN AVAGRAHA + }; + + lookupOffset = 0; + byte[] bytePair = new byte[2]; + + for (int i=0; i < (codeExtensionBytes.length)/2; i++ ) { + bytePair[0] = (byte) codeExtensionBytes[lookupOffset++]; + bytePair[1] = (byte) codeExtensionBytes[lookupOffset++]; + + String unicodeStr = new String (bytePair,"ISCII91"); + if (unicodeStr.charAt(0) != expectNuktaSub[i]) { + throw new Exception("Failed Nukta Sub"); + } + } + + lookupOffset = 0; + byte[] comboBytes = { + (byte)0xe8 , (byte)0xe8, //HALANT + HALANT + (byte)0xe8 , (byte)0xe9 //HALANT + NUKTA aka. Soft Halant + }; + char[] expectCombChars = { + '\u094d', + '\u200c', + '\u094d', + '\u200d' + }; + + for (int i=0; i < (comboBytes.length)/2; i++ ) { + bytePair[0] = (byte) comboBytes[lookupOffset++]; + bytePair[1] = (byte) comboBytes[lookupOffset]; + String unicodeStr = new String (bytePair, "ISCII91"); + if (unicodeStr.charAt(0) != expectCombChars[lookupOffset-1] + && unicodeStr.charAt(1) != expectCombChars[lookupOffset]) { + throw new Exception("Failed ISCII91 Regression Test"); + } + lookupOffset++; + } + + } catch (UnsupportedEncodingException e) { + System.err.println ("ISCII91 encoding not supported"); + throw new Exception ("Failed ISCII91 Regression Test"); + } + } + + public static void main (String[] args) throws Exception { + test(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/ISO2022JP.trailEsc Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,454 @@ +test0 + $B!!(B $B!"(B $B!#(B $B!$(B $B!%(B $B!&(B $B!'(B $B!((B $B!)(B $B!*(B $B!+(B $B!,(B $B!-(B $B!.(B $B!/(B +$B!0(B $B!1(B $B!2(B $B!3(B $B!4(B $B!5(B $B!6(B $B!7(B $B!8(B $B!9(B $B!:(B $B!;(B $B!<(B $B!=(B $B!>(B $B!?(B + $B!A(B $B!B(B $B!C(B $B!D(B $B!E(B $B!F(B $B!G(B $B!H(B $B!I(B $B!J(B $B!K(B $B!L(B $B!M(B $B!N(B $B!O(B +$B!P(B $B!Q(B $B!R(B $B!S(B $B!T(B $B!U(B $B!V(B $B!W(B $B!X(B $B!Y(B $B!Z(B $B(B $B"*(B $B"+(B $B",(B $B"-(B $B".(B + $B":(B $B";(B $B"<(B $B"=(B $B">(B $B"?(B +$B"@(B $B"A(B $B"J(B $B"K(B $B"L(B $B"M(B $B"N(B $B"O(B +$B"P(B $B"\(B $B"](B $B"^(B $B"_(B +$B"`(B $B"a(B $B"b(B $B"c(B $B"d(B $B"e(B $B"f(B $B"g(B $B"h(B $B"i(B $B"j(B + $B"r(B $B"s(B $B"t(B $B"u(B $B"v(B $B"w(B $B"x(B $B"y(B $B"~(B +$B#0(B $B#1(B $B#2(B $B#3(B $B#4(B $B#5(B $B#6(B $B#7(B $B#8(B $B#9(B + $B#A(B $B#B(B $B#C(B $B#D(B $B#E(B $B#F(B $B#G(B $B#H(B $B#I(B $B#J(B $B#K(B $B#L(B $B#M(B $B#N(B $B#O(B +$B#P(B $B#Q(B $B#R(B $B#S(B $B#T(B $B#U(B $B#V(B $B#W(B $B#X(B $B#Y(B $B#Z(B + $B#a(B $B#b(B $B#c(B $B#d(B $B#e(B $B#f(B $B#g(B $B#h(B $B#i(B $B#j(B $B#k(B $B#l(B $B#m(B $B#n(B $B#o(B +$B#p(B $B#q(B $B#r(B $B#s(B $B#t(B $B#u(B $B#v(B $B#w(B $B#x(B $B#y(B $B#z(B + $B$!(B $B$"(B $B$#(B $B$$(B $B$%(B $B$&(B $B$'(B $B$((B $B$)(B $B$*(B $B$+(B $B$,(B $B$-(B $B$.(B $B$/(B +$B$0(B $B$1(B $B$2(B $B$3(B $B$4(B $B$5(B $B$6(B $B$7(B $B$8(B $B$9(B $B$:(B $B$;(B $B$<(B $B$=(B $B$>(B $B$?(B +$B$@(B $B$A(B $B$B(B $B$C(B $B$D(B $B$E(B $B$F(B $B$G(B $B$H(B $B$I(B $B$J(B $B$K(B $B$L(B $B$M(B $B$N(B $B$O(B +$B$P(B $B$Q(B $B$R(B $B$S(B $B$T(B $B$U(B $B$V(B $B$W(B $B$X(B $B$Y(B $B$Z(B $B$[(B $B$\(B $B$](B $B$^(B $B$_(B +$B$`(B $B$a(B $B$b(B $B$c(B $B$d(B $B$e(B $B$f(B $B$g(B $B$h(B $B$i(B $B$j(B $B$k(B $B$l(B $B$m(B $B$n(B $B$o(B +$B$p(B $B$q(B $B$r(B $B$s(B + $B%!(B $B%"(B $B%#(B $B%$(B $B%%(B $B%&(B $B%'(B $B%((B $B%)(B $B%*(B $B%+(B $B%,(B $B%-(B $B%.(B $B%/(B +$B%0(B $B%1(B $B%2(B $B%3(B $B%4(B $B%5(B $B%6(B $B%7(B $B%8(B $B%9(B $B%:(B $B%;(B $B%<(B $B%=(B $B%>(B $B%?(B +$B%@(B $B%A(B $B%B(B $B%C(B $B%D(B $B%E(B $B%F(B $B%G(B $B%H(B $B%I(B $B%J(B $B%K(B $B%L(B $B%M(B $B%N(B $B%O(B +$B%P(B $B%Q(B $B%R(B $B%S(B $B%T(B $B%U(B $B%V(B $B%W(B $B%X(B $B%Y(B $B%Z(B $B%[(B $B%\(B $B%](B $B%^(B $B%_(B +$B%`(B $B%a(B $B%b(B $B%c(B $B%d(B $B%e(B $B%f(B $B%g(B $B%h(B $B%i(B $B%j(B $B%k(B $B%l(B $B%m(B $B%n(B $B%o(B +$B%p(B $B%q(B $B%r(B $B%s(B $B%t(B $B%u(B $B%v(B + $B&!(B $B&"(B $B&#(B $B&$(B $B&%(B $B&&(B $B&'(B $B&((B $B&)(B $B&*(B $B&+(B $B&,(B $B&-(B $B&.(B $B&/(B +$B&0(B $B&1(B $B&2(B $B&3(B $B&4(B $B&5(B $B&6(B $B&7(B $B&8(B + $B&A(B $B&B(B $B&C(B $B&D(B $B&E(B $B&F(B $B&G(B $B&H(B $B&I(B $B&J(B $B&K(B $B&L(B $B&M(B $B&N(B $B&O(B +$B&P(B $B&Q(B $B&R(B $B&S(B $B&T(B $B&U(B $B&V(B $B&W(B $B&X(B + $B'!(B $B'"(B $B'#(B $B'$(B $B'%(B $B'&(B $B''(B $B'((B $B')(B $B'*(B $B'+(B $B',(B $B'-(B $B'.(B $B'/(B +$B'0(B $B'1(B $B'2(B $B'3(B $B'4(B $B'5(B $B'6(B $B'7(B $B'8(B $B'9(B $B':(B $B';(B $B'<(B $B'=(B $B'>(B $B'?(B +$B'@(B $B'A(B + $B'Q(B $B'R(B $B'S(B $B'T(B $B'U(B $B'V(B $B'W(B $B'X(B $B'Y(B $B'Z(B $B'[(B $B'\(B $B'](B $B'^(B $B'_(B +$B'`(B $B'a(B $B'b(B $B'c(B $B'd(B $B'e(B $B'f(B $B'g(B $B'h(B $B'i(B $B'j(B $B'k(B $B'l(B $B'm(B $B'n(B $B'o(B +$B'p(B $B'q(B + $B(!(B $B("(B $B(#(B $B($(B $B(%(B $B(&(B $B('(B $B(((B $B()(B $B(*(B $B(+(B $B(,(B $B(-(B $B(.(B $B(/(B +$B(0(B $B(1(B $B(2(B $B(3(B $B(4(B $B(5(B $B(6(B $B(7(B $B(8(B $B(9(B $B(:(B $B(;(B $B(<(B $B(=(B $B(>(B $B(?(B +$B(@(B + $B0!(B $B0"(B $B0#(B $B0$(B $B0%(B $B0&(B $B0'(B $B0((B $B0)(B $B0*(B $B0+(B $B0,(B $B0-(B $B0.(B $B0/(B +$B00(B $B01(B $B02(B $B03(B $B04(B $B05(B $B06(B $B07(B $B08(B $B09(B $B0:(B $B0;(B $B0<(B $B0=(B $B0>(B $B0?(B +$B0@(B $B0A(B $B0B(B $B0C(B $B0D(B $B0E(B $B0F(B $B0G(B $B0H(B $B0I(B $B0J(B $B0K(B $B0L(B $B0M(B $B0N(B $B0O(B +$B0P(B $B0Q(B $B0R(B $B0S(B $B0T(B $B0U(B $B0V(B $B0W(B $B0X(B $B0Y(B $B0Z(B $B0[(B $B0\(B $B0](B $B0^(B $B0_(B +$B0`(B $B0a(B $B0b(B $B0c(B $B0d(B $B0e(B $B0f(B $B0g(B $B0h(B $B0i(B $B0j(B $B0k(B $B0l(B $B0m(B $B0n(B $B0o(B +$B0p(B $B0q(B $B0r(B $B0s(B $B0t(B $B0u(B $B0v(B $B0w(B $B0x(B $B0y(B $B0z(B $B0{(B $B0|(B $B0}(B $B0~(B + $B1!(B $B1"(B $B1#(B $B1$(B $B1%(B $B1&(B $B1'(B $B1((B $B1)(B $B1*(B $B1+(B $B1,(B $B1-(B $B1.(B $B1/(B +$B10(B $B11(B $B12(B $B13(B $B14(B $B15(B $B16(B $B17(B $B18(B $B19(B $B1:(B $B1;(B $B1<(B $B1=(B $B1>(B $B1?(B +$B1@(B $B1A(B $B1B(B $B1C(B $B1D(B $B1E(B $B1F(B $B1G(B $B1H(B $B1I(B $B1J(B $B1K(B $B1L(B $B1M(B $B1N(B $B1O(B +$B1P(B $B1Q(B $B1R(B $B1S(B $B1T(B $B1U(B $B1V(B $B1W(B $B1X(B $B1Y(B $B1Z(B $B1[(B $B1\(B $B1](B $B1^(B $B1_(B +$B1`(B $B1a(B $B1b(B $B1c(B $B1d(B $B1e(B $B1f(B $B1g(B $B1h(B $B1i(B $B1j(B $B1k(B $B1l(B $B1m(B $B1n(B $B1o(B +$B1p(B $B1q(B $B1r(B $B1s(B $B1t(B $B1u(B $B1v(B $B1w(B $B1x(B $B1y(B $B1z(B $B1{(B $B1|(B $B1}(B $B1~(B + $B2!(B $B2"(B $B2#(B $B2$(B $B2%(B $B2&(B $B2'(B $B2((B $B2)(B $B2*(B $B2+(B $B2,(B $B2-(B $B2.(B $B2/(B +$B20(B $B21(B $B22(B $B23(B $B24(B $B25(B $B26(B $B27(B $B28(B $B29(B $B2:(B $B2;(B $B2<(B $B2=(B $B2>(B $B2?(B +$B2@(B $B2A(B $B2B(B $B2C(B $B2D(B $B2E(B $B2F(B $B2G(B $B2H(B $B2I(B $B2J(B $B2K(B $B2L(B $B2M(B $B2N(B $B2O(B +$B2P(B $B2Q(B $B2R(B $B2S(B $B2T(B $B2U(B $B2V(B $B2W(B $B2X(B $B2Y(B $B2Z(B $B2[(B $B2\(B $B2](B $B2^(B $B2_(B +$B2`(B $B2a(B $B2b(B $B2c(B $B2d(B $B2e(B $B2f(B $B2g(B $B2h(B $B2i(B $B2j(B $B2k(B $B2l(B $B2m(B $B2n(B $B2o(B +$B2p(B $B2q(B $B2r(B $B2s(B $B2t(B $B2u(B $B2v(B $B2w(B $B2x(B $B2y(B $B2z(B $B2{(B $B2|(B $B2}(B $B2~(B + $B3!(B $B3"(B $B3#(B $B3$(B $B3%(B $B3&(B $B3'(B $B3((B $B3)(B $B3*(B $B3+(B $B3,(B $B3-(B $B3.(B $B3/(B +$B30(B $B31(B $B32(B $B33(B $B34(B $B35(B $B36(B $B37(B $B38(B $B39(B $B3:(B $B3;(B $B3<(B $B3=(B $B3>(B $B3?(B +$B3@(B $B3A(B $B3B(B $B3C(B $B3D(B $B3E(B $B3F(B $B3G(B $B3H(B $B3I(B $B3J(B $B3K(B $B3L(B $B3M(B $B3N(B $B3O(B +$B3P(B $B3Q(B $B3R(B $B3S(B $B3T(B $B3U(B $B3V(B $B3W(B $B3X(B $B3Y(B $B3Z(B $B3[(B $B3\(B $B3](B $B3^(B $B3_(B +$B3`(B $B3a(B $B3b(B $B3c(B $B3d(B $B3e(B $B3f(B $B3g(B $B3h(B $B3i(B $B3j(B $B3k(B $B3l(B $B3m(B $B3n(B $B3o(B +$B3p(B $B3q(B $B3r(B $B3s(B $B3t(B $B3u(B $B3v(B $B3w(B $B3x(B $B3y(B $B3z(B $B3{(B $B3|(B $B3}(B $B3~(B + $B4!(B $B4"(B $B4#(B $B4$(B $B4%(B $B4&(B $B4'(B $B4((B $B4)(B $B4*(B $B4+(B $B4,(B $B4-(B $B4.(B $B4/(B +$B40(B $B41(B $B42(B $B43(B $B44(B $B45(B $B46(B $B47(B $B48(B $B49(B $B4:(B $B4;(B $B4<(B $B4=(B $B4>(B $B4?(B +$B4@(B $B4A(B $B4B(B $B4C(B $B4D(B $B4E(B $B4F(B $B4G(B $B4H(B $B4I(B $B4J(B $B4K(B $B4L(B $B4M(B $B4N(B $B4O(B +$B4P(B $B4Q(B $B4R(B $B4S(B $B4T(B $B4U(B $B4V(B $B4W(B $B4X(B $B4Y(B $B4Z(B $B4[(B $B4\(B $B4](B $B4^(B $B4_(B +$B4`(B $B4a(B $B4b(B $B4c(B $B4d(B $B4e(B $B4f(B $B4g(B $B4h(B $B4i(B $B4j(B $B4k(B $B4l(B $B4m(B $B4n(B $B4o(B +$B4p(B $B4q(B $B4r(B $B4s(B $B4t(B $B4u(B $B4v(B $B4w(B $B4x(B $B4y(B $B4z(B $B4{(B $B4|(B $B4}(B $B4~(B + $B5!(B $B5"(B $B5#(B $B5$(B $B5%(B $B5&(B $B5'(B $B5((B $B5)(B $B5*(B $B5+(B $B5,(B $B5-(B $B5.(B $B5/(B +$B50(B $B51(B $B52(B $B53(B $B54(B $B55(B $B56(B $B57(B $B58(B $B59(B $B5:(B $B5;(B $B5<(B $B5=(B $B5>(B $B5?(B +$B5@(B $B5A(B $B5B(B $B5C(B $B5D(B $B5E(B $B5F(B $B5G(B $B5H(B $B5I(B $B5J(B $B5K(B $B5L(B $B5M(B $B5N(B $B5O(B +$B5P(B $B5Q(B $B5R(B $B5S(B $B5T(B $B5U(B $B5V(B $B5W(B $B5X(B $B5Y(B $B5Z(B $B5[(B $B5\(B $B5](B $B5^(B $B5_(B +$B5`(B $B5a(B $B5b(B $B5c(B $B5d(B $B5e(B $B5f(B $B5g(B $B5h(B $B5i(B $B5j(B $B5k(B $B5l(B $B5m(B $B5n(B $B5o(B +$B5p(B $B5q(B $B5r(B $B5s(B $B5t(B $B5u(B $B5v(B $B5w(B $B5x(B $B5y(B $B5z(B $B5{(B $B5|(B $B5}(B $B5~(B + $B6!(B $B6"(B $B6#(B $B6$(B $B6%(B $B6&(B $B6'(B $B6((B $B6)(B $B6*(B $B6+(B $B6,(B $B6-(B $B6.(B $B6/(B +$B60(B $B61(B $B62(B $B63(B $B64(B $B65(B $B66(B $B67(B $B68(B $B69(B $B6:(B $B6;(B $B6<(B $B6=(B $B6>(B $B6?(B +$B6@(B $B6A(B $B6B(B $B6C(B $B6D(B $B6E(B $B6F(B $B6G(B $B6H(B $B6I(B $B6J(B $B6K(B $B6L(B $B6M(B $B6N(B $B6O(B +$B6P(B $B6Q(B $B6R(B $B6S(B $B6T(B $B6U(B $B6V(B $B6W(B $B6X(B $B6Y(B $B6Z(B $B6[(B $B6\(B $B6](B $B6^(B $B6_(B +$B6`(B $B6a(B $B6b(B $B6c(B $B6d(B $B6e(B $B6f(B $B6g(B $B6h(B $B6i(B $B6j(B $B6k(B $B6l(B $B6m(B $B6n(B $B6o(B +$B6p(B $B6q(B $B6r(B $B6s(B $B6t(B $B6u(B $B6v(B $B6w(B $B6x(B $B6y(B $B6z(B $B6{(B $B6|(B $B6}(B $B6~(B + $B7!(B $B7"(B $B7#(B $B7$(B $B7%(B $B7&(B $B7'(B $B7((B $B7)(B $B7*(B $B7+(B $B7,(B $B7-(B $B7.(B $B7/(B +$B70(B $B71(B $B72(B $B73(B $B74(B $B75(B $B76(B $B77(B $B78(B $B79(B $B7:(B $B7;(B $B7<(B $B7=(B $B7>(B $B7?(B +$B7@(B $B7A(B $B7B(B $B7C(B $B7D(B $B7E(B $B7F(B $B7G(B $B7H(B $B7I(B $B7J(B $B7K(B $B7L(B $B7M(B $B7N(B $B7O(B +$B7P(B $B7Q(B $B7R(B $B7S(B $B7T(B $B7U(B $B7V(B $B7W(B $B7X(B $B7Y(B $B7Z(B $B7[(B $B7\(B $B7](B $B7^(B $B7_(B +$B7`(B $B7a(B $B7b(B $B7c(B $B7d(B $B7e(B $B7f(B $B7g(B $B7h(B $B7i(B $B7j(B $B7k(B $B7l(B $B7m(B $B7n(B $B7o(B +$B7p(B $B7q(B $B7r(B $B7s(B $B7t(B $B7u(B $B7v(B $B7w(B $B7x(B $B7y(B $B7z(B $B7{(B $B7|(B $B7}(B $B7~(B + $B8!(B $B8"(B $B8#(B $B8$(B $B8%(B $B8&(B $B8'(B $B8((B $B8)(B $B8*(B $B8+(B $B8,(B $B8-(B $B8.(B $B8/(B +$B80(B $B81(B $B82(B $B83(B $B84(B $B85(B $B86(B $B87(B $B88(B $B89(B $B8:(B $B8;(B $B8<(B $B8=(B $B8>(B $B8?(B +$B8@(B $B8A(B $B8B(B $B8C(B $B8D(B $B8E(B $B8F(B $B8G(B $B8H(B $B8I(B $B8J(B $B8K(B $B8L(B $B8M(B $B8N(B $B8O(B +$B8P(B $B8Q(B $B8R(B $B8S(B $B8T(B $B8U(B $B8V(B $B8W(B $B8X(B $B8Y(B $B8Z(B $B8[(B $B8\(B $B8](B $B8^(B $B8_(B +$B8`(B $B8a(B $B8b(B $B8c(B $B8d(B $B8e(B $B8f(B $B8g(B $B8h(B $B8i(B $B8j(B $B8k(B $B8l(B $B8m(B $B8n(B $B8o(B +$B8p(B $B8q(B $B8r(B $B8s(B $B8t(B $B8u(B $B8v(B $B8w(B $B8x(B $B8y(B $B8z(B $B8{(B $B8|(B $B8}(B $B8~(B + $B9!(B $B9"(B $B9#(B $B9$(B $B9%(B $B9&(B $B9'(B $B9((B $B9)(B $B9*(B $B9+(B $B9,(B $B9-(B $B9.(B $B9/(B +$B90(B $B91(B $B92(B $B93(B $B94(B $B95(B $B96(B $B97(B $B98(B $B99(B $B9:(B $B9;(B $B9<(B $B9=(B $B9>(B $B9?(B +$B9@(B $B9A(B $B9B(B $B9C(B $B9D(B $B9E(B $B9F(B $B9G(B $B9H(B $B9I(B $B9J(B $B9K(B $B9L(B $B9M(B $B9N(B $B9O(B +$B9P(B $B9Q(B $B9R(B $B9S(B $B9T(B $B9U(B $B9V(B $B9W(B $B9X(B $B9Y(B $B9Z(B $B9[(B $B9\(B $B9](B $B9^(B $B9_(B +$B9`(B $B9a(B $B9b(B $B9c(B $B9d(B $B9e(B $B9f(B $B9g(B $B9h(B $B9i(B $B9j(B $B9k(B $B9l(B $B9m(B $B9n(B $B9o(B +$B9p(B $B9q(B $B9r(B $B9s(B $B9t(B $B9u(B $B9v(B $B9w(B $B9x(B $B9y(B $B9z(B $B9{(B $B9|(B $B9}(B $B9~(B + $B:!(B $B:"(B $B:#(B $B:$(B $B:%(B $B:&(B $B:'(B $B:((B $B:)(B $B:*(B $B:+(B $B:,(B $B:-(B $B:.(B $B:/(B +$B:0(B $B:1(B $B:2(B $B:3(B $B:4(B $B:5(B $B:6(B $B:7(B $B:8(B $B:9(B $B::(B $B:;(B $B:<(B $B:=(B $B:>(B $B:?(B +$B:@(B $B:A(B $B:B(B $B:C(B $B:D(B $B:E(B $B:F(B $B:G(B $B:H(B $B:I(B $B:J(B $B:K(B $B:L(B $B:M(B $B:N(B $B:O(B +$B:P(B $B:Q(B $B:R(B $B:S(B $B:T(B $B:U(B $B:V(B $B:W(B $B:X(B $B:Y(B $B:Z(B $B:[(B $B:\(B $B:](B $B:^(B $B:_(B +$B:`(B $B:a(B $B:b(B $B:c(B $B:d(B $B:e(B $B:f(B $B:g(B $B:h(B $B:i(B $B:j(B $B:k(B $B:l(B $B:m(B $B:n(B $B:o(B +$B:p(B $B:q(B $B:r(B $B:s(B $B:t(B $B:u(B $B:v(B $B:w(B $B:x(B $B:y(B $B:z(B $B:{(B $B:|(B $B:}(B $B:~(B + $B;!(B $B;"(B $B;#(B $B;$(B $B;%(B $B;&(B $B;'(B $B;((B $B;)(B $B;*(B $B;+(B $B;,(B $B;-(B $B;.(B $B;/(B +$B;0(B $B;1(B $B;2(B $B;3(B $B;4(B $B;5(B $B;6(B $B;7(B $B;8(B $B;9(B $B;:(B $B;;(B $B;<(B $B;=(B $B;>(B $B;?(B +$B;@(B $B;A(B $B;B(B $B;C(B $B;D(B $B;E(B $B;F(B $B;G(B $B;H(B $B;I(B $B;J(B $B;K(B $B;L(B $B;M(B $B;N(B $B;O(B +$B;P(B $B;Q(B $B;R(B $B;S(B $B;T(B $B;U(B $B;V(B $B;W(B $B;X(B $B;Y(B $B;Z(B $B;[(B $B;\(B $B;](B $B;^(B $B;_(B +$B;`(B $B;a(B $B;b(B $B;c(B $B;d(B $B;e(B $B;f(B $B;g(B $B;h(B $B;i(B $B;j(B $B;k(B $B;l(B $B;m(B $B;n(B $B;o(B +$B;p(B $B;q(B $B;r(B $B;s(B $B;t(B $B;u(B $B;v(B $B;w(B $B;x(B $B;y(B $B;z(B $B;{(B $B;|(B $B;}(B $B;~(B + $B<!(B $B<"(B $B<#(B $B<$(B $B<%(B $B<&(B $B<'(B $B<((B $B<)(B $B<*(B $B<+(B $B<,(B $B<-(B $B<.(B $B</(B +$B<0(B $B<1(B $B<2(B $B<3(B $B<4(B $B<5(B $B<6(B $B<7(B $B<8(B $B<9(B $B<:(B $B<;(B $B<<(B $B<=(B $B<>(B $B<?(B +$B<@(B $B<A(B $B<B(B $B<C(B $B<D(B $B<E(B $B<F(B $B<G(B $B<H(B $B<I(B $B<J(B $B<K(B $B<L(B $B<M(B $B<N(B $B<O(B +$B<P(B $B<Q(B $B<R(B $B<S(B $B<T(B $B<U(B $B<V(B $B<W(B $B<X(B $B<Y(B $B<Z(B $B<[(B $B<\(B $B<](B $B<^(B $B<_(B +$B<`(B $B<a(B $B<b(B $B<c(B $B<d(B $B<e(B $B<f(B $B<g(B $B<h(B $B<i(B $B<j(B $B<k(B $B<l(B $B<m(B $B<n(B $B<o(B +$B<p(B $B<q(B $B<r(B $B<s(B $B<t(B $B<u(B $B<v(B $B<w(B $B<x(B $B<y(B $B<z(B $B<{(B $B<|(B $B<}(B $B<~(B + $B=!(B $B="(B $B=#(B $B=$(B $B=%(B $B=&(B $B='(B $B=((B $B=)(B $B=*(B $B=+(B $B=,(B $B=-(B $B=.(B $B=/(B +$B=0(B $B=1(B $B=2(B $B=3(B $B=4(B $B=5(B $B=6(B $B=7(B $B=8(B $B=9(B $B=:(B $B=;(B $B=<(B $B==(B $B=>(B $B=?(B +$B=@(B $B=A(B $B=B(B $B=C(B $B=D(B $B=E(B $B=F(B $B=G(B $B=H(B $B=I(B $B=J(B $B=K(B $B=L(B $B=M(B $B=N(B $B=O(B +$B=P(B $B=Q(B $B=R(B $B=S(B $B=T(B $B=U(B $B=V(B $B=W(B $B=X(B $B=Y(B $B=Z(B $B=[(B $B=\(B $B=](B $B=^(B $B=_(B +$B=`(B $B=a(B $B=b(B $B=c(B $B=d(B $B=e(B $B=f(B $B=g(B $B=h(B $B=i(B $B=j(B $B=k(B $B=l(B $B=m(B $B=n(B $B=o(B +$B=p(B $B=q(B $B=r(B $B=s(B $B=t(B $B=u(B $B=v(B $B=w(B $B=x(B $B=y(B $B=z(B $B={(B $B=|(B $B=}(B $B=~(B + $B>!(B $B>"(B $B>#(B $B>$(B $B>%(B $B>&(B $B>'(B $B>((B $B>)(B $B>*(B $B>+(B $B>,(B $B>-(B $B>.(B $B>/(B +$B>0(B $B>1(B $B>2(B $B>3(B $B>4(B $B>5(B $B>6(B $B>7(B $B>8(B $B>9(B $B>:(B $B>;(B $B><(B $B>=(B $B>>(B $B>?(B +$B>@(B $B>A(B $B>B(B $B>C(B $B>D(B $B>E(B $B>F(B $B>G(B $B>H(B $B>I(B $B>J(B $B>K(B $B>L(B $B>M(B $B>N(B $B>O(B +$B>P(B $B>Q(B $B>R(B $B>S(B $B>T(B $B>U(B $B>V(B $B>W(B $B>X(B $B>Y(B $B>Z(B $B>[(B $B>\(B $B>](B $B>^(B $B>_(B +$B>`(B $B>a(B $B>b(B $B>c(B $B>d(B $B>e(B $B>f(B $B>g(B $B>h(B $B>i(B $B>j(B $B>k(B $B>l(B $B>m(B $B>n(B $B>o(B +$B>p(B $B>q(B $B>r(B $B>s(B $B>t(B $B>u(B $B>v(B $B>w(B $B>x(B $B>y(B $B>z(B $B>{(B $B>|(B $B>}(B $B>~(B + $B?!(B $B?"(B $B?#(B $B?$(B $B?%(B $B?&(B $B?'(B $B?((B $B?)(B $B?*(B $B?+(B $B?,(B $B?-(B $B?.(B $B?/(B +$B?0(B $B?1(B $B?2(B $B?3(B $B?4(B $B?5(B $B?6(B $B?7(B $B?8(B $B?9(B $B?:(B $B?;(B $B?<(B $B?=(B $B?>(B $B??(B +$B?@(B $B?A(B $B?B(B $B?C(B $B?D(B $B?E(B $B?F(B $B?G(B $B?H(B $B?I(B $B?J(B $B?K(B $B?L(B $B?M(B $B?N(B $B?O(B +$B?P(B $B?Q(B $B?R(B $B?S(B $B?T(B $B?U(B $B?V(B $B?W(B $B?X(B $B?Y(B $B?Z(B $B?[(B $B?\(B $B?](B $B?^(B $B?_(B +$B?`(B $B?a(B $B?b(B $B?c(B $B?d(B $B?e(B $B?f(B $B?g(B $B?h(B $B?i(B $B?j(B $B?k(B $B?l(B $B?m(B $B?n(B $B?o(B +$B?p(B $B?q(B $B?r(B $B?s(B $B?t(B $B?u(B $B?v(B $B?w(B $B?x(B $B?y(B $B?z(B $B?{(B $B?|(B $B?}(B $B?~(B + $B@!(B $B@"(B $B@#(B $B@$(B $B@%(B $B@&(B $B@'(B $B@((B $B@)(B $B@*(B $B@+(B $B@,(B $B@-(B $B@.(B $B@/(B +$B@0(B $B@1(B $B@2(B $B@3(B $B@4(B $B@5(B $B@6(B $B@7(B $B@8(B $B@9(B $B@:(B $B@;(B $B@<(B $B@=(B $B@>(B $B@?(B +$B@@(B $B@A(B $B@B(B $B@C(B $B@D(B $B@E(B $B@F(B $B@G(B $B@H(B $B@I(B $B@J(B $B@K(B $B@L(B $B@M(B $B@N(B $B@O(B +$B@P(B $B@Q(B $B@R(B $B@S(B $B@T(B $B@U(B $B@V(B $B@W(B $B@X(B $B@Y(B $B@Z(B $B@[(B $B@\(B $B@](B $B@^(B $B@_(B +$B@`(B $B@a(B $B@b(B $B@c(B $B@d(B $B@e(B $B@f(B $B@g(B $B@h(B $B@i(B $B@j(B $B@k(B $B@l(B $B@m(B $B@n(B $B@o(B +$B@p(B $B@q(B $B@r(B $B@s(B $B@t(B $B@u(B $B@v(B $B@w(B $B@x(B $B@y(B $B@z(B $B@{(B $B@|(B $B@}(B $B@~(B + $BA!(B $BA"(B $BA#(B $BA$(B $BA%(B $BA&(B $BA'(B $BA((B $BA)(B $BA*(B $BA+(B $BA,(B $BA-(B $BA.(B $BA/(B +$BA0(B $BA1(B $BA2(B $BA3(B $BA4(B $BA5(B $BA6(B $BA7(B $BA8(B $BA9(B $BA:(B $BA;(B $BA<(B $BA=(B $BA>(B $BA?(B +$BA@(B $BAA(B $BAB(B $BAC(B $BAD(B $BAE(B $BAF(B $BAG(B $BAH(B $BAI(B $BAJ(B $BAK(B $BAL(B $BAM(B $BAN(B $BAO(B +$BAP(B $BAQ(B $BAR(B $BAS(B $BAT(B $BAU(B $BAV(B $BAW(B $BAX(B $BAY(B $BAZ(B $BA[(B $BA\(B $BA](B $BA^(B $BA_(B +$BA`(B $BAa(B $BAb(B $BAc(B $BAd(B $BAe(B $BAf(B $BAg(B $BAh(B $BAi(B $BAj(B $BAk(B $BAl(B $BAm(B $BAn(B $BAo(B +$BAp(B $BAq(B $BAr(B $BAs(B $BAt(B $BAu(B $BAv(B $BAw(B $BAx(B $BAy(B $BAz(B $BA{(B $BA|(B $BA}(B $BA~(B + $BB!(B $BB"(B $BB#(B $BB$(B $BB%(B $BB&(B $BB'(B $BB((B $BB)(B $BB*(B $BB+(B $BB,(B $BB-(B $BB.(B $BB/(B +$BB0(B $BB1(B $BB2(B $BB3(B $BB4(B $BB5(B $BB6(B $BB7(B $BB8(B $BB9(B $BB:(B $BB;(B $BB<(B $BB=(B $BB>(B $BB?(B +$BB@(B $BBA(B $BBB(B $BBC(B $BBD(B $BBE(B $BBF(B $BBG(B $BBH(B $BBI(B $BBJ(B $BBK(B $BBL(B $BBM(B $BBN(B $BBO(B +$BBP(B $BBQ(B $BBR(B $BBS(B $BBT(B $BBU(B $BBV(B $BBW(B $BBX(B $BBY(B $BBZ(B $BB[(B $BB\(B $BB](B $BB^(B $BB_(B +$BB`(B $BBa(B $BBb(B $BBc(B $BBd(B $BBe(B $BBf(B $BBg(B $BBh(B $BBi(B $BBj(B $BBk(B $BBl(B $BBm(B $BBn(B $BBo(B +$BBp(B $BBq(B $BBr(B $BBs(B $BBt(B $BBu(B $BBv(B $BBw(B $BBx(B $BBy(B $BBz(B $BB{(B $BB|(B $BB}(B $BB~(B + $BC!(B $BC"(B $BC#(B $BC$(B $BC%(B $BC&(B $BC'(B $BC((B $BC)(B $BC*(B $BC+(B $BC,(B $BC-(B $BC.(B $BC/(B +$BC0(B $BC1(B $BC2(B $BC3(B $BC4(B $BC5(B $BC6(B $BC7(B $BC8(B $BC9(B $BC:(B $BC;(B $BC<(B $BC=(B $BC>(B $BC?(B +$BC@(B $BCA(B $BCB(B $BCC(B $BCD(B $BCE(B $BCF(B $BCG(B $BCH(B $BCI(B $BCJ(B $BCK(B $BCL(B $BCM(B $BCN(B $BCO(B +$BCP(B $BCQ(B $BCR(B $BCS(B $BCT(B $BCU(B $BCV(B $BCW(B $BCX(B $BCY(B $BCZ(B $BC[(B $BC\(B $BC](B $BC^(B $BC_(B +$BC`(B $BCa(B $BCb(B $BCc(B $BCd(B $BCe(B $BCf(B $BCg(B $BCh(B $BCi(B $BCj(B $BCk(B $BCl(B $BCm(B $BCn(B $BCo(B +$BCp(B $BCq(B $BCr(B $BCs(B $BCt(B $BCu(B $BCv(B $BCw(B $BCx(B $BCy(B $BCz(B $BC{(B $BC|(B $BC}(B $BC~(B + $BD!(B $BD"(B $BD#(B $BD$(B $BD%(B $BD&(B $BD'(B $BD((B $BD)(B $BD*(B $BD+(B $BD,(B $BD-(B $BD.(B $BD/(B +$BD0(B $BD1(B $BD2(B $BD3(B $BD4(B $BD5(B $BD6(B $BD7(B $BD8(B $BD9(B $BD:(B $BD;(B $BD<(B $BD=(B $BD>(B $BD?(B +$BD@(B $BDA(B $BDB(B $BDC(B $BDD(B $BDE(B $BDF(B $BDG(B $BDH(B $BDI(B $BDJ(B $BDK(B $BDL(B $BDM(B $BDN(B $BDO(B +$BDP(B $BDQ(B $BDR(B $BDS(B $BDT(B $BDU(B $BDV(B $BDW(B $BDX(B $BDY(B $BDZ(B $BD[(B $BD\(B $BD](B $BD^(B $BD_(B +$BD`(B $BDa(B $BDb(B $BDc(B $BDd(B $BDe(B $BDf(B $BDg(B $BDh(B $BDi(B $BDj(B $BDk(B $BDl(B $BDm(B $BDn(B $BDo(B +$BDp(B $BDq(B $BDr(B $BDs(B $BDt(B $BDu(B $BDv(B $BDw(B $BDx(B $BDy(B $BDz(B $BD{(B $BD|(B $BD}(B $BD~(B + $BE!(B $BE"(B $BE#(B $BE$(B $BE%(B $BE&(B $BE'(B $BE((B $BE)(B $BE*(B $BE+(B $BE,(B $BE-(B $BE.(B $BE/(B +$BE0(B $BE1(B $BE2(B $BE3(B $BE4(B $BE5(B $BE6(B $BE7(B $BE8(B $BE9(B $BE:(B $BE;(B $BE<(B $BE=(B $BE>(B $BE?(B +$BE@(B $BEA(B $BEB(B $BEC(B $BED(B $BEE(B $BEF(B $BEG(B $BEH(B $BEI(B $BEJ(B $BEK(B $BEL(B $BEM(B $BEN(B $BEO(B +$BEP(B $BEQ(B $BER(B $BES(B $BET(B $BEU(B $BEV(B $BEW(B $BEX(B $BEY(B $BEZ(B $BE[(B $BE\(B $BE](B $BE^(B $BE_(B +$BE`(B $BEa(B $BEb(B $BEc(B $BEd(B $BEe(B $BEf(B $BEg(B $BEh(B $BEi(B $BEj(B $BEk(B $BEl(B $BEm(B $BEn(B $BEo(B +$BEp(B $BEq(B $BEr(B $BEs(B $BEt(B $BEu(B $BEv(B $BEw(B $BEx(B $BEy(B $BEz(B $BE{(B $BE|(B $BE}(B $BE~(B + $BF!(B $BF"(B $BF#(B $BF$(B $BF%(B $BF&(B $BF'(B $BF((B $BF)(B $BF*(B $BF+(B $BF,(B $BF-(B $BF.(B $BF/(B +$BF0(B $BF1(B $BF2(B $BF3(B $BF4(B $BF5(B $BF6(B $BF7(B $BF8(B $BF9(B $BF:(B $BF;(B $BF<(B $BF=(B $BF>(B $BF?(B +$BF@(B $BFA(B $BFB(B $BFC(B $BFD(B $BFE(B $BFF(B $BFG(B $BFH(B $BFI(B $BFJ(B $BFK(B $BFL(B $BFM(B $BFN(B $BFO(B +$BFP(B $BFQ(B $BFR(B $BFS(B $BFT(B $BFU(B $BFV(B $BFW(B $BFX(B $BFY(B $BFZ(B $BF[(B $BF\(B $BF](B $BF^(B $BF_(B +$BF`(B $BFa(B $BFb(B $BFc(B $BFd(B $BFe(B $BFf(B $BFg(B $BFh(B $BFi(B $BFj(B $BFk(B $BFl(B $BFm(B $BFn(B $BFo(B +$BFp(B $BFq(B $BFr(B $BFs(B $BFt(B $BFu(B $BFv(B $BFw(B $BFx(B $BFy(B $BFz(B $BF{(B $BF|(B $BF}(B $BF~(B + $BG!(B $BG"(B $BG#(B $BG$(B $BG%(B $BG&(B $BG'(B $BG((B $BG)(B $BG*(B $BG+(B $BG,(B $BG-(B $BG.(B $BG/(B +$BG0(B $BG1(B $BG2(B $BG3(B $BG4(B $BG5(B $BG6(B $BG7(B $BG8(B $BG9(B $BG:(B $BG;(B $BG<(B $BG=(B $BG>(B $BG?(B +$BG@(B $BGA(B $BGB(B $BGC(B $BGD(B $BGE(B $BGF(B $BGG(B $BGH(B $BGI(B $BGJ(B $BGK(B $BGL(B $BGM(B $BGN(B $BGO(B +$BGP(B $BGQ(B $BGR(B $BGS(B $BGT(B $BGU(B $BGV(B $BGW(B $BGX(B $BGY(B $BGZ(B $BG[(B $BG\(B $BG](B $BG^(B $BG_(B +$BG`(B $BGa(B $BGb(B $BGc(B $BGd(B $BGe(B $BGf(B $BGg(B $BGh(B $BGi(B $BGj(B $BGk(B $BGl(B $BGm(B $BGn(B $BGo(B +$BGp(B $BGq(B $BGr(B $BGs(B $BGt(B $BGu(B $BGv(B $BGw(B $BGx(B $BGy(B $BGz(B $BG{(B $BG|(B $BG}(B $BG~(B + $BH!(B $BH"(B $BH#(B $BH$(B $BH%(B $BH&(B $BH'(B $BH((B $BH)(B $BH*(B $BH+(B $BH,(B $BH-(B $BH.(B $BH/(B +$BH0(B $BH1(B $BH2(B $BH3(B $BH4(B $BH5(B $BH6(B $BH7(B $BH8(B $BH9(B $BH:(B $BH;(B $BH<(B $BH=(B $BH>(B $BH?(B +$BH@(B $BHA(B $BHB(B $BHC(B $BHD(B $BHE(B $BHF(B $BHG(B $BHH(B $BHI(B $BHJ(B $BHK(B $BHL(B $BHM(B $BHN(B $BHO(B +$BHP(B $BHQ(B $BHR(B $BHS(B $BHT(B $BHU(B $BHV(B $BHW(B $BHX(B $BHY(B $BHZ(B $BH[(B $BH\(B $BH](B $BH^(B $BH_(B +$BH`(B $BHa(B $BHb(B $BHc(B $BHd(B $BHe(B $BHf(B $BHg(B $BHh(B $BHi(B $BHj(B $BHk(B $BHl(B $BHm(B $BHn(B $BHo(B +$BHp(B $BHq(B $BHr(B $BHs(B $BHt(B $BHu(B $BHv(B $BHw(B $BHx(B $BHy(B $BHz(B $BH{(B $BH|(B $BH}(B $BH~(B + $BI!(B $BI"(B $BI#(B $BI$(B $BI%(B $BI&(B $BI'(B $BI((B $BI)(B $BI*(B $BI+(B $BI,(B $BI-(B $BI.(B $BI/(B +$BI0(B $BI1(B $BI2(B $BI3(B $BI4(B $BI5(B $BI6(B $BI7(B $BI8(B $BI9(B $BI:(B $BI;(B $BI<(B $BI=(B $BI>(B $BI?(B +$BI@(B $BIA(B $BIB(B $BIC(B $BID(B $BIE(B $BIF(B $BIG(B $BIH(B $BII(B $BIJ(B $BIK(B $BIL(B $BIM(B $BIN(B $BIO(B +$BIP(B $BIQ(B $BIR(B $BIS(B $BIT(B $BIU(B $BIV(B $BIW(B $BIX(B $BIY(B $BIZ(B $BI[(B $BI\(B $BI](B $BI^(B $BI_(B +$BI`(B $BIa(B $BIb(B $BIc(B $BId(B $BIe(B $BIf(B $BIg(B $BIh(B $BIi(B $BIj(B $BIk(B $BIl(B $BIm(B $BIn(B $BIo(B +$BIp(B $BIq(B $BIr(B $BIs(B $BIt(B $BIu(B $BIv(B $BIw(B $BIx(B $BIy(B $BIz(B $BI{(B $BI|(B $BI}(B $BI~(B + $BJ!(B $BJ"(B $BJ#(B $BJ$(B $BJ%(B $BJ&(B $BJ'(B $BJ((B $BJ)(B $BJ*(B $BJ+(B $BJ,(B $BJ-(B $BJ.(B $BJ/(B +$BJ0(B $BJ1(B $BJ2(B $BJ3(B $BJ4(B $BJ5(B $BJ6(B $BJ7(B $BJ8(B $BJ9(B $BJ:(B $BJ;(B $BJ<(B $BJ=(B $BJ>(B $BJ?(B +$BJ@(B $BJA(B $BJB(B $BJC(B $BJD(B $BJE(B $BJF(B $BJG(B $BJH(B $BJI(B $BJJ(B $BJK(B $BJL(B $BJM(B $BJN(B $BJO(B +$BJP(B $BJQ(B $BJR(B $BJS(B $BJT(B $BJU(B $BJV(B $BJW(B $BJX(B $BJY(B $BJZ(B $BJ[(B $BJ\(B $BJ](B $BJ^(B $BJ_(B +$BJ`(B $BJa(B $BJb(B $BJc(B $BJd(B $BJe(B $BJf(B $BJg(B $BJh(B $BJi(B $BJj(B $BJk(B $BJl(B $BJm(B $BJn(B $BJo(B +$BJp(B $BJq(B $BJr(B $BJs(B $BJt(B $BJu(B $BJv(B $BJw(B $BJx(B $BJy(B $BJz(B $BJ{(B $BJ|(B $BJ}(B $BJ~(B + $BK!(B $BK"(B $BK#(B $BK$(B $BK%(B $BK&(B $BK'(B $BK((B $BK)(B $BK*(B $BK+(B $BK,(B $BK-(B $BK.(B $BK/(B +$BK0(B $BK1(B $BK2(B $BK3(B $BK4(B $BK5(B $BK6(B $BK7(B $BK8(B $BK9(B $BK:(B $BK;(B $BK<(B $BK=(B $BK>(B $BK?(B +$BK@(B $BKA(B $BKB(B $BKC(B $BKD(B $BKE(B $BKF(B $BKG(B $BKH(B $BKI(B $BKJ(B $BKK(B $BKL(B $BKM(B $BKN(B $BKO(B +$BKP(B $BKQ(B $BKR(B $BKS(B $BKT(B $BKU(B $BKV(B $BKW(B $BKX(B $BKY(B $BKZ(B $BK[(B $BK\(B $BK](B $BK^(B $BK_(B +$BK`(B $BKa(B $BKb(B $BKc(B $BKd(B $BKe(B $BKf(B $BKg(B $BKh(B $BKi(B $BKj(B $BKk(B $BKl(B $BKm(B $BKn(B $BKo(B +$BKp(B $BKq(B $BKr(B $BKs(B $BKt(B $BKu(B $BKv(B $BKw(B $BKx(B $BKy(B $BKz(B $BK{(B $BK|(B $BK}(B $BK~(B + $BL!(B $BL"(B $BL#(B $BL$(B $BL%(B $BL&(B $BL'(B $BL((B $BL)(B $BL*(B $BL+(B $BL,(B $BL-(B $BL.(B $BL/(B +$BL0(B $BL1(B $BL2(B $BL3(B $BL4(B $BL5(B $BL6(B $BL7(B $BL8(B $BL9(B $BL:(B $BL;(B $BL<(B $BL=(B $BL>(B $BL?(B +$BL@(B $BLA(B $BLB(B $BLC(B $BLD(B $BLE(B $BLF(B $BLG(B $BLH(B $BLI(B $BLJ(B $BLK(B $BLL(B $BLM(B $BLN(B $BLO(B +$BLP(B $BLQ(B $BLR(B $BLS(B $BLT(B $BLU(B $BLV(B $BLW(B $BLX(B $BLY(B $BLZ(B $BL[(B $BL\(B $BL](B $BL^(B $BL_(B +$BL`(B $BLa(B $BLb(B $BLc(B $BLd(B $BLe(B $BLf(B $BLg(B $BLh(B $BLi(B $BLj(B $BLk(B $BLl(B $BLm(B $BLn(B $BLo(B +$BLp(B $BLq(B $BLr(B $BLs(B $BLt(B $BLu(B $BLv(B $BLw(B $BLx(B $BLy(B $BLz(B $BL{(B $BL|(B $BL}(B $BL~(B + $BM!(B $BM"(B $BM#(B $BM$(B $BM%(B $BM&(B $BM'(B $BM((B $BM)(B $BM*(B $BM+(B $BM,(B $BM-(B $BM.(B $BM/(B +$BM0(B $BM1(B $BM2(B $BM3(B $BM4(B $BM5(B $BM6(B $BM7(B $BM8(B $BM9(B $BM:(B $BM;(B $BM<(B $BM=(B $BM>(B $BM?(B +$BM@(B $BMA(B $BMB(B $BMC(B $BMD(B $BME(B $BMF(B $BMG(B $BMH(B $BMI(B $BMJ(B $BMK(B $BML(B $BMM(B $BMN(B $BMO(B +$BMP(B $BMQ(B $BMR(B $BMS(B $BMT(B $BMU(B $BMV(B $BMW(B $BMX(B $BMY(B $BMZ(B $BM[(B $BM\(B $BM](B $BM^(B $BM_(B +$BM`(B $BMa(B $BMb(B $BMc(B $BMd(B $BMe(B $BMf(B $BMg(B $BMh(B $BMi(B $BMj(B $BMk(B $BMl(B $BMm(B $BMn(B $BMo(B +$BMp(B $BMq(B $BMr(B $BMs(B $BMt(B $BMu(B $BMv(B $BMw(B $BMx(B $BMy(B $BMz(B $BM{(B $BM|(B $BM}(B $BM~(B + $BN!(B $BN"(B $BN#(B $BN$(B $BN%(B $BN&(B $BN'(B $BN((B $BN)(B $BN*(B $BN+(B $BN,(B $BN-(B $BN.(B $BN/(B +$BN0(B $BN1(B $BN2(B $BN3(B $BN4(B $BN5(B $BN6(B $BN7(B $BN8(B $BN9(B $BN:(B $BN;(B $BN<(B $BN=(B $BN>(B $BN?(B +$BN@(B $BNA(B $BNB(B $BNC(B $BND(B $BNE(B $BNF(B $BNG(B $BNH(B $BNI(B $BNJ(B $BNK(B $BNL(B $BNM(B $BNN(B $BNO(B +$BNP(B $BNQ(B $BNR(B $BNS(B $BNT(B $BNU(B $BNV(B $BNW(B $BNX(B $BNY(B $BNZ(B $BN[(B $BN\(B $BN](B $BN^(B $BN_(B +$BN`(B $BNa(B $BNb(B $BNc(B $BNd(B $BNe(B $BNf(B $BNg(B $BNh(B $BNi(B $BNj(B $BNk(B $BNl(B $BNm(B $BNn(B $BNo(B +$BNp(B $BNq(B $BNr(B $BNs(B $BNt(B $BNu(B $BNv(B $BNw(B $BNx(B $BNy(B $BNz(B $BN{(B $BN|(B $BN}(B $BN~(B + $BO!(B $BO"(B $BO#(B $BO$(B $BO%(B $BO&(B $BO'(B $BO((B $BO)(B $BO*(B $BO+(B $BO,(B $BO-(B $BO.(B $BO/(B +$BO0(B $BO1(B $BO2(B $BO3(B $BO4(B $BO5(B $BO6(B $BO7(B $BO8(B $BO9(B $BO:(B $BO;(B $BO<(B $BO=(B $BO>(B $BO?(B +$BO@(B $BOA(B $BOB(B $BOC(B $BOD(B $BOE(B $BOF(B $BOG(B $BOH(B $BOI(B $BOJ(B $BOK(B $BOL(B $BOM(B $BON(B $BOO(B +$BOP(B $BOQ(B $BOR(B $BOS(B + $BP!(B $BP"(B $BP#(B $BP$(B $BP%(B $BP&(B $BP'(B $BP((B $BP)(B $BP*(B $BP+(B $BP,(B $BP-(B $BP.(B $BP/(B +$BP0(B $BP1(B $BP2(B $BP3(B $BP4(B $BP5(B $BP6(B $BP7(B $BP8(B $BP9(B $BP:(B $BP;(B $BP<(B $BP=(B $BP>(B $BP?(B +$BP@(B $BPA(B $BPB(B $BPC(B $BPD(B $BPE(B $BPF(B $BPG(B $BPH(B $BPI(B $BPJ(B $BPK(B $BPL(B $BPM(B $BPN(B $BPO(B +$BPP(B $BPQ(B $BPR(B $BPS(B $BPT(B $BPU(B $BPV(B $BPW(B $BPX(B $BPY(B $BPZ(B $BP[(B $BP\(B $BP](B $BP^(B $BP_(B +$BP`(B $BPa(B $BPb(B $BPc(B $BPd(B $BPe(B $BPf(B $BPg(B $BPh(B $BPi(B $BPj(B $BPk(B $BPl(B $BPm(B $BPn(B $BPo(B +$BPp(B $BPq(B $BPr(B $BPs(B $BPt(B $BPu(B $BPv(B $BPw(B $BPx(B $BPy(B $BPz(B $BP{(B $BP|(B $BP}(B $BP~(B + $BQ!(B $BQ"(B $BQ#(B $BQ$(B $BQ%(B $BQ&(B $BQ'(B $BQ((B $BQ)(B $BQ*(B $BQ+(B $BQ,(B $BQ-(B $BQ.(B $BQ/(B +$BQ0(B $BQ1(B $BQ2(B $BQ3(B $BQ4(B $BQ5(B $BQ6(B $BQ7(B $BQ8(B $BQ9(B $BQ:(B $BQ;(B $BQ<(B $BQ=(B $BQ>(B $BQ?(B +$BQ@(B $BQA(B $BQB(B $BQC(B $BQD(B $BQE(B $BQF(B $BQG(B $BQH(B $BQI(B $BQJ(B $BQK(B $BQL(B $BQM(B $BQN(B $BQO(B +$BQP(B $BQQ(B $BQR(B $BQS(B $BQT(B $BQU(B $BQV(B $BQW(B $BQX(B $BQY(B $BQZ(B $BQ[(B $BQ\(B $BQ](B $BQ^(B $BQ_(B +$BQ`(B $BQa(B $BQb(B $BQc(B $BQd(B $BQe(B $BQf(B $BQg(B $BQh(B $BQi(B $BQj(B $BQk(B $BQl(B $BQm(B $BQn(B $BQo(B +$BQp(B $BQq(B $BQr(B $BQs(B $BQt(B $BQu(B $BQv(B $BQw(B $BQx(B $BQy(B $BQz(B $BQ{(B $BQ|(B $BQ}(B $BQ~(B + $BR!(B $BR"(B $BR#(B $BR$(B $BR%(B $BR&(B $BR'(B $BR((B $BR)(B $BR*(B $BR+(B $BR,(B $BR-(B $BR.(B $BR/(B +$BR0(B $BR1(B $BR2(B $BR3(B $BR4(B $BR5(B $BR6(B $BR7(B $BR8(B $BR9(B $BR:(B $BR;(B $BR<(B $BR=(B $BR>(B $BR?(B +$BR@(B $BRA(B $BRB(B $BRC(B $BRD(B $BRE(B $BRF(B $BRG(B $BRH(B $BRI(B $BRJ(B $BRK(B $BRL(B $BRM(B $BRN(B $BRO(B +$BRP(B $BRQ(B $BRR(B $BRS(B $BRT(B $BRU(B $BRV(B $BRW(B $BRX(B $BRY(B $BRZ(B $BR[(B $BR\(B $BR](B $BR^(B $BR_(B +$BR`(B $BRa(B $BRb(B $BRc(B $BRd(B $BRe(B $BRf(B $BRg(B $BRh(B $BRi(B $BRj(B $BRk(B $BRl(B $BRm(B $BRn(B $BRo(B +$BRp(B $BRq(B $BRr(B $BRs(B $BRt(B $BRu(B $BRv(B $BRw(B $BRx(B $BRy(B $BRz(B $BR{(B $BR|(B $BR}(B $BR~(B + $BS!(B $BS"(B $BS#(B $BS$(B $BS%(B $BS&(B $BS'(B $BS((B $BS)(B $BS*(B $BS+(B $BS,(B $BS-(B $BS.(B $BS/(B +$BS0(B $BS1(B $BS2(B $BS3(B $BS4(B $BS5(B $BS6(B $BS7(B $BS8(B $BS9(B $BS:(B $BS;(B $BS<(B $BS=(B $BS>(B $BS?(B +$BS@(B $BSA(B $BSB(B $BSC(B $BSD(B $BSE(B $BSF(B $BSG(B $BSH(B $BSI(B $BSJ(B $BSK(B $BSL(B $BSM(B $BSN(B $BSO(B +$BSP(B $BSQ(B $BSR(B $BSS(B $BST(B $BSU(B $BSV(B $BSW(B $BSX(B $BSY(B $BSZ(B $BS[(B $BS\(B $BS](B $BS^(B $BS_(B +$BS`(B $BSa(B $BSb(B $BSc(B $BSd(B $BSe(B $BSf(B $BSg(B $BSh(B $BSi(B $BSj(B $BSk(B $BSl(B $BSm(B $BSn(B $BSo(B +$BSp(B $BSq(B $BSr(B $BSs(B $BSt(B $BSu(B $BSv(B $BSw(B $BSx(B $BSy(B $BSz(B $BS{(B $BS|(B $BS}(B $BS~(B + $BT!(B $BT"(B $BT#(B $BT$(B $BT%(B $BT&(B $BT'(B $BT((B $BT)(B $BT*(B $BT+(B $BT,(B $BT-(B $BT.(B $BT/(B +$BT0(B $BT1(B $BT2(B $BT3(B $BT4(B $BT5(B $BT6(B $BT7(B $BT8(B $BT9(B $BT:(B $BT;(B $BT<(B $BT=(B $BT>(B $BT?(B +$BT@(B $BTA(B $BTB(B $BTC(B $BTD(B $BTE(B $BTF(B $BTG(B $BTH(B $BTI(B $BTJ(B $BTK(B $BTL(B $BTM(B $BTN(B $BTO(B +$BTP(B $BTQ(B $BTR(B $BTS(B $BTT(B $BTU(B $BTV(B $BTW(B $BTX(B $BTY(B $BTZ(B $BT[(B $BT\(B $BT](B $BT^(B $BT_(B +$BT`(B $BTa(B $BTb(B $BTc(B $BTd(B $BTe(B $BTf(B $BTg(B $BTh(B $BTi(B $BTj(B $BTk(B $BTl(B $BTm(B $BTn(B $BTo(B +$BTp(B $BTq(B $BTr(B $BTs(B $BTt(B $BTu(B $BTv(B $BTw(B $BTx(B $BTy(B $BTz(B $BT{(B $BT|(B $BT}(B $BT~(B + $BU!(B $BU"(B $BU#(B $BU$(B $BU%(B $BU&(B $BU'(B $BU((B $BU)(B $BU*(B $BU+(B $BU,(B $BU-(B $BU.(B $BU/(B +$BU0(B $BU1(B $BU2(B $BU3(B $BU4(B $BU5(B $BU6(B $BU7(B $BU8(B $BU9(B $BU:(B $BU;(B $BU<(B $BU=(B $BU>(B $BU?(B +$BU@(B $BUA(B $BUB(B $BUC(B $BUD(B $BUE(B $BUF(B $BUG(B $BUH(B $BUI(B $BUJ(B $BUK(B $BUL(B $BUM(B $BUN(B $BUO(B +$BUP(B $BUQ(B $BUR(B $BUS(B $BUT(B $BUU(B $BUV(B $BUW(B $BUX(B $BUY(B $BUZ(B $BU[(B $BU\(B $BU](B $BU^(B $BU_(B +$BU`(B $BUa(B $BUb(B $BUc(B $BUd(B $BUe(B $BUf(B $BUg(B $BUh(B $BUi(B $BUj(B $BUk(B $BUl(B $BUm(B $BUn(B $BUo(B +$BUp(B $BUq(B $BUr(B $BUs(B $BUt(B $BUu(B $BUv(B $BUw(B $BUx(B $BUy(B $BUz(B $BU{(B $BU|(B $BU}(B $BU~(B + $BV!(B $BV"(B $BV#(B $BV$(B $BV%(B $BV&(B $BV'(B $BV((B $BV)(B $BV*(B $BV+(B $BV,(B $BV-(B $BV.(B $BV/(B +$BV0(B $BV1(B $BV2(B $BV3(B $BV4(B $BV5(B $BV6(B $BV7(B $BV8(B $BV9(B $BV:(B $BV;(B $BV<(B $BV=(B $BV>(B $BV?(B +$BV@(B $BVA(B $BVB(B $BVC(B $BVD(B $BVE(B $BVF(B $BVG(B $BVH(B $BVI(B $BVJ(B $BVK(B $BVL(B $BVM(B $BVN(B $BVO(B +$BVP(B $BVQ(B $BVR(B $BVS(B $BVT(B $BVU(B $BVV(B $BVW(B $BVX(B $BVY(B $BVZ(B $BV[(B $BV\(B $BV](B $BV^(B $BV_(B +$BV`(B $BVa(B $BVb(B $BVc(B $BVd(B $BVe(B $BVf(B $BVg(B $BVh(B $BVi(B $BVj(B $BVk(B $BVl(B $BVm(B $BVn(B $BVo(B +$BVp(B $BVq(B $BVr(B $BVs(B $BVt(B $BVu(B $BVv(B $BVw(B $BVx(B $BVy(B $BVz(B $BV{(B $BV|(B $BV}(B $BV~(B + $BW!(B $BW"(B $BW#(B $BW$(B $BW%(B $BW&(B $BW'(B $BW((B $BW)(B $BW*(B $BW+(B $BW,(B $BW-(B $BW.(B $BW/(B +$BW0(B $BW1(B $BW2(B $BW3(B $BW4(B $BW5(B $BW6(B $BW7(B $BW8(B $BW9(B $BW:(B $BW;(B $BW<(B $BW=(B $BW>(B $BW?(B +$BW@(B $BWA(B $BWB(B $BWC(B $BWD(B $BWE(B $BWF(B $BWG(B $BWH(B $BWI(B $BWJ(B $BWK(B $BWL(B $BWM(B $BWN(B $BWO(B +$BWP(B $BWQ(B $BWR(B $BWS(B $BWT(B $BWU(B $BWV(B $BWW(B $BWX(B $BWY(B $BWZ(B $BW[(B $BW\(B $BW](B $BW^(B $BW_(B +$BW`(B $BWa(B $BWb(B $BWc(B $BWd(B $BWe(B $BWf(B $BWg(B $BWh(B $BWi(B $BWj(B $BWk(B $BWl(B $BWm(B $BWn(B $BWo(B +$BWp(B $BWq(B $BWr(B $BWs(B $BWt(B $BWu(B $BWv(B $BWw(B $BWx(B $BWy(B $BWz(B $BW{(B $BW|(B $BW}(B $BW~(B + $BX!(B $BX"(B $BX#(B $BX$(B $BX%(B $BX&(B $BX'(B $BX((B $BX)(B $BX*(B $BX+(B $BX,(B $BX-(B $BX.(B $BX/(B +$BX0(B $BX1(B $BX2(B $BX3(B $BX4(B $BX5(B $BX6(B $BX7(B $BX8(B $BX9(B $BX:(B $BX;(B $BX<(B $BX=(B $BX>(B $BX?(B +$BX@(B $BXA(B $BXB(B $BXC(B $BXD(B $BXE(B $BXF(B $BXG(B $BXH(B $BXI(B $BXJ(B $BXK(B $BXL(B $BXM(B $BXN(B $BXO(B +$BXP(B $BXQ(B $BXR(B $BXS(B $BXT(B $BXU(B $BXV(B $BXW(B $BXX(B $BXY(B $BXZ(B $BX[(B $BX\(B $BX](B $BX^(B $BX_(B +$BX`(B $BXa(B $BXb(B $BXc(B $BXd(B $BXe(B $BXf(B $BXg(B $BXh(B $BXi(B $BXj(B $BXk(B $BXl(B $BXm(B $BXn(B $BXo(B +$BXp(B $BXq(B $BXr(B $BXs(B $BXt(B $BXu(B $BXv(B $BXw(B $BXx(B $BXy(B $BXz(B $BX{(B $BX|(B $BX}(B $BX~(B + $BY!(B $BY"(B $BY#(B $BY$(B $BY%(B $BY&(B $BY'(B $BY((B $BY)(B $BY*(B $BY+(B $BY,(B $BY-(B $BY.(B $BY/(B +$BY0(B $BY1(B $BY2(B $BY3(B $BY4(B $BY5(B $BY6(B $BY7(B $BY8(B $BY9(B $BY:(B $BY;(B $BY<(B $BY=(B $BY>(B $BY?(B +$BY@(B $BYA(B $BYB(B $BYC(B $BYD(B $BYE(B $BYF(B $BYG(B $BYH(B $BYI(B $BYJ(B $BYK(B $BYL(B $BYM(B $BYN(B $BYO(B +$BYP(B $BYQ(B $BYR(B $BYS(B $BYT(B $BYU(B $BYV(B $BYW(B $BYX(B $BYY(B $BYZ(B $BY[(B $BY\(B $BY](B $BY^(B $BY_(B +$BY`(B $BYa(B $BYb(B $BYc(B $BYd(B $BYe(B $BYf(B $BYg(B $BYh(B $BYi(B $BYj(B $BYk(B $BYl(B $BYm(B $BYn(B $BYo(B +$BYp(B $BYq(B $BYr(B $BYs(B $BYt(B $BYu(B $BYv(B $BYw(B $BYx(B $BYy(B $BYz(B $BY{(B $BY|(B $BY}(B $BY~(B + $BZ!(B $BZ"(B $BZ#(B $BZ$(B $BZ%(B $BZ&(B $BZ'(B $BZ((B $BZ)(B $BZ*(B $BZ+(B $BZ,(B $BZ-(B $BZ.(B $BZ/(B +$BZ0(B $BZ1(B $BZ2(B $BZ3(B $BZ4(B $BZ5(B $BZ6(B $BZ7(B $BZ8(B $BZ9(B $BZ:(B $BZ;(B $BZ<(B $BZ=(B $BZ>(B $BZ?(B +$BZ@(B $BZA(B $BZB(B $BZC(B $BZD(B $BZE(B $BZF(B $BZG(B $BZH(B $BZI(B $BZJ(B $BZK(B $BZL(B $BZM(B $BZN(B $BZO(B +$BZP(B $BZQ(B $BZR(B $BZS(B $BZT(B $BZU(B $BZV(B $BZW(B $BZX(B $BZY(B $BZZ(B $BZ[(B $BZ\(B $BZ](B $BZ^(B $BZ_(B +$BZ`(B $BZa(B $BZb(B $BZc(B $BZd(B $BZe(B $BZf(B $BZg(B $BZh(B $BZi(B $BZj(B $BZk(B $BZl(B $BZm(B $BZn(B $BZo(B +$BZp(B $BZq(B $BZr(B $BZs(B $BZt(B $BZu(B $BZv(B $BZw(B $BZx(B $BZy(B $BZz(B $BZ{(B $BZ|(B $BZ}(B $BZ~(B + $B[!(B $B["(B $B[#(B $B[$(B $B[%(B $B[&(B $B['(B $B[((B $B[)(B $B[*(B $B[+(B $B[,(B $B[-(B $B[.(B $B[/(B +$B[0(B $B[1(B $B[2(B $B[3(B $B[4(B $B[5(B $B[6(B $B[7(B $B[8(B $B[9(B $B[:(B $B[;(B $B[<(B $B[=(B $B[>(B $B[?(B +$B[@(B $B[A(B $B[B(B $B[C(B $B[D(B $B[E(B $B[F(B $B[G(B $B[H(B $B[I(B $B[J(B $B[K(B $B[L(B $B[M(B $B[N(B $B[O(B +$B[P(B $B[Q(B $B[R(B $B[S(B $B[T(B $B[U(B $B[V(B $B[W(B $B[X(B $B[Y(B $B[Z(B $B[[(B $B[\(B $B[](B $B[^(B $B[_(B +$B[`(B $B[a(B $B[b(B $B[c(B $B[d(B $B[e(B $B[f(B $B[g(B $B[h(B $B[i(B $B[j(B $B[k(B $B[l(B $B[m(B $B[n(B $B[o(B +$B[p(B $B[q(B $B[r(B $B[s(B $B[t(B $B[u(B $B[v(B $B[w(B $B[x(B $B[y(B $B[z(B $B[{(B $B[|(B $B[}(B $B[~(B + $B\!(B $B\"(B $B\#(B $B\$(B $B\%(B $B\&(B $B\'(B $B\((B $B\)(B $B\*(B $B\+(B $B\,(B $B\-(B $B\.(B $B\/(B +$B\0(B $B\1(B $B\2(B $B\3(B $B\4(B $B\5(B $B\6(B $B\7(B $B\8(B $B\9(B $B\:(B $B\;(B $B\<(B $B\=(B $B\>(B $B\?(B +$B\@(B $B\A(B $B\B(B $B\C(B $B\D(B $B\E(B $B\F(B $B\G(B $B\H(B $B\I(B $B\J(B $B\K(B $B\L(B $B\M(B $B\N(B $B\O(B +$B\P(B $B\Q(B $B\R(B $B\S(B $B\T(B $B\U(B $B\V(B $B\W(B $B\X(B $B\Y(B $B\Z(B $B\[(B $B\\(B $B\](B $B\^(B $B\_(B +$B\`(B $B\a(B $B\b(B $B\c(B $B\d(B $B\e(B $B\f(B $B\g(B $B\h(B $B\i(B $B\j(B $B\k(B $B\l(B $B\m(B $B\n(B $B\o(B +$B\p(B $B\q(B $B\r(B $B\s(B $B\t(B $B\u(B $B\v(B $B\w(B $B\x(B $B\y(B $B\z(B $B\{(B $B\|(B $B\}(B $B\~(B + $B]!(B $B]"(B $B]#(B $B]$(B $B]%(B $B]&(B $B]'(B $B]((B $B])(B $B]*(B $B]+(B $B],(B $B]-(B $B].(B $B]/(B +$B]0(B $B]1(B $B]2(B $B]3(B $B]4(B $B]5(B $B]6(B $B]7(B $B]8(B $B]9(B $B]:(B $B];(B $B]<(B $B]=(B $B]>(B $B]?(B +$B]@(B $B]A(B $B]B(B $B]C(B $B]D(B $B]E(B $B]F(B $B]G(B $B]H(B $B]I(B $B]J(B $B]K(B $B]L(B $B]M(B $B]N(B $B]O(B +$B]P(B $B]Q(B $B]R(B $B]S(B $B]T(B $B]U(B $B]V(B $B]W(B $B]X(B $B]Y(B $B]Z(B $B][(B $B]\(B $B]](B $B]^(B $B]_(B +$B]`(B $B]a(B $B]b(B $B]c(B $B]d(B $B]e(B $B]f(B $B]g(B $B]h(B $B]i(B $B]j(B $B]k(B $B]l(B $B]m(B $B]n(B $B]o(B +$B]p(B $B]q(B $B]r(B $B]s(B $B]t(B $B]u(B $B]v(B $B]w(B $B]x(B $B]y(B $B]z(B $B]{(B $B]|(B $B]}(B $B]~(B + $B^!(B $B^"(B $B^#(B $B^$(B $B^%(B $B^&(B $B^'(B $B^((B $B^)(B $B^*(B $B^+(B $B^,(B $B^-(B $B^.(B $B^/(B +$B^0(B $B^1(B $B^2(B $B^3(B $B^4(B $B^5(B $B^6(B $B^7(B $B^8(B $B^9(B $B^:(B $B^;(B $B^<(B $B^=(B $B^>(B $B^?(B +$B^@(B $B^A(B $B^B(B $B^C(B $B^D(B $B^E(B $B^F(B $B^G(B $B^H(B $B^I(B $B^J(B $B^K(B $B^L(B $B^M(B $B^N(B $B^O(B +$B^P(B $B^Q(B $B^R(B $B^S(B $B^T(B $B^U(B $B^V(B $B^W(B $B^X(B $B^Y(B $B^Z(B $B^[(B $B^\(B $B^](B $B^^(B $B^_(B +$B^`(B $B^a(B $B^b(B $B^c(B $B^d(B $B^e(B $B^f(B $B^g(B $B^h(B $B^i(B $B^j(B $B^k(B $B^l(B $B^m(B $B^n(B $B^o(B +$B^p(B $B^q(B $B^r(B $B^s(B $B^t(B $B^u(B $B^v(B $B^w(B $B^x(B $B^y(B $B^z(B $B^{(B $B^|(B $B^}(B $B^~(B + $B_!(B $B_"(B $B_#(B $B_$(B $B_%(B $B_&(B $B_'(B $B_((B $B_)(B $B_*(B $B_+(B $B_,(B $B_-(B $B_.(B $B_/(B +$B_0(B $B_1(B $B_2(B $B_3(B $B_4(B $B_5(B $B_6(B $B_7(B $B_8(B $B_9(B $B_:(B $B_;(B $B_<(B $B_=(B $B_>(B $B_?(B +$B_@(B $B_A(B $B_B(B $B_C(B $B_D(B $B_E(B $B_F(B $B_G(B $B_H(B $B_I(B $B_J(B $B_K(B $B_L(B $B_M(B $B_N(B $B_O(B +$B_P(B $B_Q(B $B_R(B $B_S(B $B_T(B $B_U(B $B_V(B $B_W(B $B_X(B $B_Y(B $B_Z(B $B_[(B $B_\(B $B_](B $B_^(B $B__(B +$B_`(B $B_a(B $B_b(B $B_c(B $B_d(B $B_e(B $B_f(B $B_g(B $B_h(B $B_i(B $B_j(B $B_k(B $B_l(B $B_m(B $B_n(B $B_o(B +$B_p(B $B_q(B $B_r(B $B_s(B $B_t(B $B_u(B $B_v(B $B_w(B $B_x(B $B_y(B $B_z(B $B_{(B $B_|(B $B_}(B $B_~(B + $B`!(B $B`"(B $B`#(B $B`$(B $B`%(B $B`&(B $B`'(B $B`((B $B`)(B $B`*(B $B`+(B $B`,(B $B`-(B $B`.(B $B`/(B +$B`0(B $B`1(B $B`2(B $B`3(B $B`4(B $B`5(B $B`6(B $B`7(B $B`8(B $B`9(B $B`:(B $B`;(B $B`<(B $B`=(B $B`>(B $B`?(B +$B`@(B $B`A(B $B`B(B $B`C(B $B`D(B $B`E(B $B`F(B $B`G(B $B`H(B $B`I(B $B`J(B $B`K(B $B`L(B $B`M(B $B`N(B $B`O(B +$B`P(B $B`Q(B $B`R(B $B`S(B $B`T(B $B`U(B $B`V(B $B`W(B $B`X(B $B`Y(B $B`Z(B $B`[(B $B`\(B $B`](B $B`^(B $B`_(B +$B``(B $B`a(B $B`b(B $B`c(B $B`d(B $B`e(B $B`f(B $B`g(B $B`h(B $B`i(B $B`j(B $B`k(B $B`l(B $B`m(B $B`n(B $B`o(B +$B`p(B $B`q(B $B`r(B $B`s(B $B`t(B $B`u(B $B`v(B $B`w(B $B`x(B $B`y(B $B`z(B $B`{(B $B`|(B $B`}(B $B`~(B + $Ba!(B $Ba"(B $Ba#(B $Ba$(B $Ba%(B $Ba&(B $Ba'(B $Ba((B $Ba)(B $Ba*(B $Ba+(B $Ba,(B $Ba-(B $Ba.(B $Ba/(B +$Ba0(B $Ba1(B $Ba2(B $Ba3(B $Ba4(B $Ba5(B $Ba6(B $Ba7(B $Ba8(B $Ba9(B $Ba:(B $Ba;(B $Ba<(B $Ba=(B $Ba>(B $Ba?(B +$Ba@(B $BaA(B $BaB(B $BaC(B $BaD(B $BaE(B $BaF(B $BaG(B $BaH(B $BaI(B $BaJ(B $BaK(B $BaL(B $BaM(B $BaN(B $BaO(B +$BaP(B $BaQ(B $BaR(B $BaS(B $BaT(B $BaU(B $BaV(B $BaW(B $BaX(B $BaY(B $BaZ(B $Ba[(B $Ba\(B $Ba](B $Ba^(B $Ba_(B +$Ba`(B $Baa(B $Bab(B $Bac(B $Bad(B $Bae(B $Baf(B $Bag(B $Bah(B $Bai(B $Baj(B $Bak(B $Bal(B $Bam(B $Ban(B $Bao(B +$Bap(B $Baq(B $Bar(B $Bas(B $Bat(B $Bau(B $Bav(B $Baw(B $Bax(B $Bay(B $Baz(B $Ba{(B $Ba|(B $Ba}(B $Ba~(B + $Bb!(B $Bb"(B $Bb#(B $Bb$(B $Bb%(B $Bb&(B $Bb'(B $Bb((B $Bb)(B $Bb*(B $Bb+(B $Bb,(B $Bb-(B $Bb.(B $Bb/(B +$Bb0(B $Bb1(B $Bb2(B $Bb3(B $Bb4(B $Bb5(B $Bb6(B $Bb7(B $Bb8(B $Bb9(B $Bb:(B $Bb;(B $Bb<(B $Bb=(B $Bb>(B $Bb?(B +$Bb@(B $BbA(B $BbB(B $BbC(B $BbD(B $BbE(B $BbF(B $BbG(B $BbH(B $BbI(B $BbJ(B $BbK(B $BbL(B $BbM(B $BbN(B $BbO(B +$BbP(B $BbQ(B $BbR(B $BbS(B $BbT(B $BbU(B $BbV(B $BbW(B $BbX(B $BbY(B $BbZ(B $Bb[(B $Bb\(B $Bb](B $Bb^(B $Bb_(B +$Bb`(B $Bba(B $Bbb(B $Bbc(B $Bbd(B $Bbe(B $Bbf(B $Bbg(B $Bbh(B $Bbi(B $Bbj(B $Bbk(B $Bbl(B $Bbm(B $Bbn(B $Bbo(B +$Bbp(B $Bbq(B $Bbr(B $Bbs(B $Bbt(B $Bbu(B $Bbv(B $Bbw(B $Bbx(B $Bby(B $Bbz(B $Bb{(B $Bb|(B $Bb}(B $Bb~(B + $Bc!(B $Bc"(B $Bc#(B $Bc$(B $Bc%(B $Bc&(B $Bc'(B $Bc((B $Bc)(B $Bc*(B $Bc+(B $Bc,(B $Bc-(B $Bc.(B $Bc/(B +$Bc0(B $Bc1(B $Bc2(B $Bc3(B $Bc4(B $Bc5(B $Bc6(B $Bc7(B $Bc8(B $Bc9(B $Bc:(B $Bc;(B $Bc<(B $Bc=(B $Bc>(B $Bc?(B +$Bc@(B $BcA(B $BcB(B $BcC(B $BcD(B $BcE(B $BcF(B $BcG(B $BcH(B $BcI(B $BcJ(B $BcK(B $BcL(B $BcM(B $BcN(B $BcO(B +$BcP(B $BcQ(B $BcR(B $BcS(B $BcT(B $BcU(B $BcV(B $BcW(B $BcX(B $BcY(B $BcZ(B $Bc[(B $Bc\(B $Bc](B $Bc^(B $Bc_(B +$Bc`(B $Bca(B $Bcb(B $Bcc(B $Bcd(B $Bce(B $Bcf(B $Bcg(B $Bch(B $Bci(B $Bcj(B $Bck(B $Bcl(B $Bcm(B $Bcn(B $Bco(B +$Bcp(B $Bcq(B $Bcr(B $Bcs(B $Bct(B $Bcu(B $Bcv(B $Bcw(B $Bcx(B $Bcy(B $Bcz(B $Bc{(B $Bc|(B $Bc}(B $Bc~(B + $Bd!(B $Bd"(B $Bd#(B $Bd$(B $Bd%(B $Bd&(B $Bd'(B $Bd((B $Bd)(B $Bd*(B $Bd+(B $Bd,(B $Bd-(B $Bd.(B $Bd/(B +$Bd0(B $Bd1(B $Bd2(B $Bd3(B $Bd4(B $Bd5(B $Bd6(B $Bd7(B $Bd8(B $Bd9(B $Bd:(B $Bd;(B $Bd<(B $Bd=(B $Bd>(B $Bd?(B +$Bd@(B $BdA(B $BdB(B $BdC(B $BdD(B $BdE(B $BdF(B $BdG(B $BdH(B $BdI(B $BdJ(B $BdK(B $BdL(B $BdM(B $BdN(B $BdO(B +$BdP(B $BdQ(B $BdR(B $BdS(B $BdT(B $BdU(B $BdV(B $BdW(B $BdX(B $BdY(B $BdZ(B $Bd[(B $Bd\(B $Bd](B $Bd^(B $Bd_(B +$Bd`(B $Bda(B $Bdb(B $Bdc(B $Bdd(B $Bde(B $Bdf(B $Bdg(B $Bdh(B $Bdi(B $Bdj(B $Bdk(B $Bdl(B $Bdm(B $Bdn(B $Bdo(B +$Bdp(B $Bdq(B $Bdr(B $Bds(B $Bdt(B $Bdu(B $Bdv(B $Bdw(B $Bdx(B $Bdy(B $Bdz(B $Bd{(B $Bd|(B $Bd}(B $Bd~(B + $Be!(B $Be"(B $Be#(B $Be$(B $Be%(B $Be&(B $Be'(B $Be((B $Be)(B $Be*(B $Be+(B $Be,(B $Be-(B $Be.(B $Be/(B +$Be0(B $Be1(B $Be2(B $Be3(B $Be4(B $Be5(B $Be6(B $Be7(B $Be8(B $Be9(B $Be:(B $Be;(B $Be<(B $Be=(B $Be>(B $Be?(B +$Be@(B $BeA(B $BeB(B $BeC(B $BeD(B $BeE(B $BeF(B $BeG(B $BeH(B $BeI(B $BeJ(B $BeK(B $BeL(B $BeM(B $BeN(B $BeO(B +$BeP(B $BeQ(B $BeR(B $BeS(B $BeT(B $BeU(B $BeV(B $BeW(B $BeX(B $BeY(B $BeZ(B $Be[(B $Be\(B $Be](B $Be^(B $Be_(B +$Be`(B $Bea(B $Beb(B $Bec(B $Bed(B $Bee(B $Bef(B $Beg(B $Beh(B $Bei(B $Bej(B $Bek(B $Bel(B $Bem(B $Ben(B $Beo(B +$Bep(B $Beq(B $Ber(B $Bes(B $Bet(B $Beu(B $Bev(B $Bew(B $Bex(B $Bey(B $Bez(B $Be{(B $Be|(B $Be}(B $Be~(B + $Bf!(B $Bf"(B $Bf#(B $Bf$(B $Bf%(B $Bf&(B $Bf'(B $Bf((B $Bf)(B $Bf*(B $Bf+(B $Bf,(B $Bf-(B $Bf.(B $Bf/(B +$Bf0(B $Bf1(B $Bf2(B $Bf3(B $Bf4(B $Bf5(B $Bf6(B $Bf7(B $Bf8(B $Bf9(B $Bf:(B $Bf;(B $Bf<(B $Bf=(B $Bf>(B $Bf?(B +$Bf@(B $BfA(B $BfB(B $BfC(B $BfD(B $BfE(B $BfF(B $BfG(B $BfH(B $BfI(B $BfJ(B $BfK(B $BfL(B $BfM(B $BfN(B $BfO(B +$BfP(B $BfQ(B $BfR(B $BfS(B $BfT(B $BfU(B $BfV(B $BfW(B $BfX(B $BfY(B $BfZ(B $Bf[(B $Bf\(B $Bf](B $Bf^(B $Bf_(B +$Bf`(B $Bfa(B $Bfb(B $Bfc(B $Bfd(B $Bfe(B $Bff(B $Bfg(B $Bfh(B $Bfi(B $Bfj(B $Bfk(B $Bfl(B $Bfm(B $Bfn(B $Bfo(B +$Bfp(B $Bfq(B $Bfr(B $Bfs(B $Bft(B $Bfu(B $Bfv(B $Bfw(B $Bfx(B $Bfy(B $Bfz(B $Bf{(B $Bf|(B $Bf}(B $Bf~(B + $Bg!(B $Bg"(B $Bg#(B $Bg$(B $Bg%(B $Bg&(B $Bg'(B $Bg((B $Bg)(B $Bg*(B $Bg+(B $Bg,(B $Bg-(B $Bg.(B $Bg/(B +$Bg0(B $Bg1(B $Bg2(B $Bg3(B $Bg4(B $Bg5(B $Bg6(B $Bg7(B $Bg8(B $Bg9(B $Bg:(B $Bg;(B $Bg<(B $Bg=(B $Bg>(B $Bg?(B +$Bg@(B $BgA(B $BgB(B $BgC(B $BgD(B $BgE(B $BgF(B $BgG(B $BgH(B $BgI(B $BgJ(B $BgK(B $BgL(B $BgM(B $BgN(B $BgO(B +$BgP(B $BgQ(B $BgR(B $BgS(B $BgT(B $BgU(B $BgV(B $BgW(B $BgX(B $BgY(B $BgZ(B $Bg[(B $Bg\(B $Bg](B $Bg^(B $Bg_(B +$Bg`(B $Bga(B $Bgb(B $Bgc(B $Bgd(B $Bge(B $Bgf(B $Bgg(B $Bgh(B $Bgi(B $Bgj(B $Bgk(B $Bgl(B $Bgm(B $Bgn(B $Bgo(B +$Bgp(B $Bgq(B $Bgr(B $Bgs(B $Bgt(B $Bgu(B $Bgv(B $Bgw(B $Bgx(B $Bgy(B $Bgz(B $Bg{(B $Bg|(B $Bg}(B $Bg~(B + $Bh!(B $Bh"(B $Bh#(B $Bh$(B $Bh%(B $Bh&(B $Bh'(B $Bh((B $Bh)(B $Bh*(B $Bh+(B $Bh,(B $Bh-(B $Bh.(B $Bh/(B +$Bh0(B $Bh1(B $Bh2(B $Bh3(B $Bh4(B $Bh5(B $Bh6(B $Bh7(B $Bh8(B $Bh9(B $Bh:(B $Bh;(B $Bh<(B $Bh=(B $Bh>(B $Bh?(B +$Bh@(B $BhA(B $BhB(B $BhC(B $BhD(B $BhE(B $BhF(B $BhG(B $BhH(B $BhI(B $BhJ(B $BhK(B $BhL(B $BhM(B $BhN(B $BhO(B +$BhP(B $BhQ(B $BhR(B $BhS(B $BhT(B $BhU(B $BhV(B $BhW(B $BhX(B $BhY(B $BhZ(B $Bh[(B $Bh\(B $Bh](B $Bh^(B $Bh_(B +$Bh`(B $Bha(B $Bhb(B $Bhc(B $Bhd(B $Bhe(B $Bhf(B $Bhg(B $Bhh(B $Bhi(B $Bhj(B $Bhk(B $Bhl(B $Bhm(B $Bhn(B $Bho(B +$Bhp(B $Bhq(B $Bhr(B $Bhs(B $Bht(B $Bhu(B $Bhv(B $Bhw(B $Bhx(B $Bhy(B $Bhz(B $Bh{(B $Bh|(B $Bh}(B $Bh~(B + $Bi!(B $Bi"(B $Bi#(B $Bi$(B $Bi%(B $Bi&(B $Bi'(B $Bi((B $Bi)(B $Bi*(B $Bi+(B $Bi,(B $Bi-(B $Bi.(B $Bi/(B +$Bi0(B $Bi1(B $Bi2(B $Bi3(B $Bi4(B $Bi5(B $Bi6(B $Bi7(B $Bi8(B $Bi9(B $Bi:(B $Bi;(B $Bi<(B $Bi=(B $Bi>(B $Bi?(B +$Bi@(B $BiA(B $BiB(B $BiC(B $BiD(B $BiE(B $BiF(B $BiG(B $BiH(B $BiI(B $BiJ(B $BiK(B $BiL(B $BiM(B $BiN(B $BiO(B +$BiP(B $BiQ(B $BiR(B $BiS(B $BiT(B $BiU(B $BiV(B $BiW(B $BiX(B $BiY(B $BiZ(B $Bi[(B $Bi\(B $Bi](B $Bi^(B $Bi_(B +$Bi`(B $Bia(B $Bib(B $Bic(B $Bid(B $Bie(B $Bif(B $Big(B $Bih(B $Bii(B $Bij(B $Bik(B $Bil(B $Bim(B $Bin(B $Bio(B +$Bip(B $Biq(B $Bir(B $Bis(B $Bit(B $Biu(B $Biv(B $Biw(B $Bix(B $Biy(B $Biz(B $Bi{(B $Bi|(B $Bi}(B $Bi~(B + $Bj!(B $Bj"(B $Bj#(B $Bj$(B $Bj%(B $Bj&(B $Bj'(B $Bj((B $Bj)(B $Bj*(B $Bj+(B $Bj,(B $Bj-(B $Bj.(B $Bj/(B +$Bj0(B $Bj1(B $Bj2(B $Bj3(B $Bj4(B $Bj5(B $Bj6(B $Bj7(B $Bj8(B $Bj9(B $Bj:(B $Bj;(B $Bj<(B $Bj=(B $Bj>(B $Bj?(B +$Bj@(B $BjA(B $BjB(B $BjC(B $BjD(B $BjE(B $BjF(B $BjG(B $BjH(B $BjI(B $BjJ(B $BjK(B $BjL(B $BjM(B $BjN(B $BjO(B +$BjP(B $BjQ(B $BjR(B $BjS(B $BjT(B $BjU(B $BjV(B $BjW(B $BjX(B $BjY(B $BjZ(B $Bj[(B $Bj\(B $Bj](B $Bj^(B $Bj_(B +$Bj`(B $Bja(B $Bjb(B $Bjc(B $Bjd(B $Bje(B $Bjf(B $Bjg(B $Bjh(B $Bji(B $Bjj(B $Bjk(B $Bjl(B $Bjm(B $Bjn(B $Bjo(B +$Bjp(B $Bjq(B $Bjr(B $Bjs(B $Bjt(B $Bju(B $Bjv(B $Bjw(B $Bjx(B $Bjy(B $Bjz(B $Bj{(B $Bj|(B $Bj}(B $Bj~(B + $Bk!(B $Bk"(B $Bk#(B $Bk$(B $Bk%(B $Bk&(B $Bk'(B $Bk((B $Bk)(B $Bk*(B $Bk+(B $Bk,(B $Bk-(B $Bk.(B $Bk/(B +$Bk0(B $Bk1(B $Bk2(B $Bk3(B $Bk4(B $Bk5(B $Bk6(B $Bk7(B $Bk8(B $Bk9(B $Bk:(B $Bk;(B $Bk<(B $Bk=(B $Bk>(B $Bk?(B +$Bk@(B $BkA(B $BkB(B $BkC(B $BkD(B $BkE(B $BkF(B $BkG(B $BkH(B $BkI(B $BkJ(B $BkK(B $BkL(B $BkM(B $BkN(B $BkO(B +$BkP(B $BkQ(B $BkR(B $BkS(B $BkT(B $BkU(B $BkV(B $BkW(B $BkX(B $BkY(B $BkZ(B $Bk[(B $Bk\(B $Bk](B $Bk^(B $Bk_(B +$Bk`(B $Bka(B $Bkb(B $Bkc(B $Bkd(B $Bke(B $Bkf(B $Bkg(B $Bkh(B $Bki(B $Bkj(B $Bkk(B $Bkl(B $Bkm(B $Bkn(B $Bko(B +$Bkp(B $Bkq(B $Bkr(B $Bks(B $Bkt(B $Bku(B $Bkv(B $Bkw(B $Bkx(B $Bky(B $Bkz(B $Bk{(B $Bk|(B $Bk}(B $Bk~(B + $Bl!(B $Bl"(B $Bl#(B $Bl$(B $Bl%(B $Bl&(B $Bl'(B $Bl((B $Bl)(B $Bl*(B $Bl+(B $Bl,(B $Bl-(B $Bl.(B $Bl/(B +$Bl0(B $Bl1(B $Bl2(B $Bl3(B $Bl4(B $Bl5(B $Bl6(B $Bl7(B $Bl8(B $Bl9(B $Bl:(B $Bl;(B $Bl<(B $Bl=(B $Bl>(B $Bl?(B +$Bl@(B $BlA(B $BlB(B $BlC(B $BlD(B $BlE(B $BlF(B $BlG(B $BlH(B $BlI(B $BlJ(B $BlK(B $BlL(B $BlM(B $BlN(B $BlO(B +$BlP(B $BlQ(B $BlR(B $BlS(B $BlT(B $BlU(B $BlV(B $BlW(B $BlX(B $BlY(B $BlZ(B $Bl[(B $Bl\(B $Bl](B $Bl^(B $Bl_(B +$Bl`(B $Bla(B $Blb(B $Blc(B $Bld(B $Ble(B $Blf(B $Blg(B $Blh(B $Bli(B $Blj(B $Blk(B $Bll(B $Blm(B $Bln(B $Blo(B +$Blp(B $Blq(B $Blr(B $Bls(B $Blt(B $Blu(B $Blv(B $Blw(B $Blx(B $Bly(B $Blz(B $Bl{(B $Bl|(B $Bl}(B $Bl~(B + $Bm!(B $Bm"(B $Bm#(B $Bm$(B $Bm%(B $Bm&(B $Bm'(B $Bm((B $Bm)(B $Bm*(B $Bm+(B $Bm,(B $Bm-(B $Bm.(B $Bm/(B +$Bm0(B $Bm1(B $Bm2(B $Bm3(B $Bm4(B $Bm5(B $Bm6(B $Bm7(B $Bm8(B $Bm9(B $Bm:(B $Bm;(B $Bm<(B $Bm=(B $Bm>(B $Bm?(B +$Bm@(B $BmA(B $BmB(B $BmC(B $BmD(B $BmE(B $BmF(B $BmG(B $BmH(B $BmI(B $BmJ(B $BmK(B $BmL(B $BmM(B $BmN(B $BmO(B +$BmP(B $BmQ(B $BmR(B $BmS(B $BmT(B $BmU(B $BmV(B $BmW(B $BmX(B $BmY(B $BmZ(B $Bm[(B $Bm\(B $Bm](B $Bm^(B $Bm_(B +$Bm`(B $Bma(B $Bmb(B $Bmc(B $Bmd(B $Bme(B $Bmf(B $Bmg(B $Bmh(B $Bmi(B $Bmj(B $Bmk(B $Bml(B $Bmm(B $Bmn(B $Bmo(B +$Bmp(B $Bmq(B $Bmr(B $Bms(B $Bmt(B $Bmu(B $Bmv(B $Bmw(B $Bmx(B $Bmy(B $Bmz(B $Bm{(B $Bm|(B $Bm}(B $Bm~(B + $Bn!(B $Bn"(B $Bn#(B $Bn$(B $Bn%(B $Bn&(B $Bn'(B $Bn((B $Bn)(B $Bn*(B $Bn+(B $Bn,(B $Bn-(B $Bn.(B $Bn/(B +$Bn0(B $Bn1(B $Bn2(B $Bn3(B $Bn4(B $Bn5(B $Bn6(B $Bn7(B $Bn8(B $Bn9(B $Bn:(B $Bn;(B $Bn<(B $Bn=(B $Bn>(B $Bn?(B +$Bn@(B $BnA(B $BnB(B $BnC(B $BnD(B $BnE(B $BnF(B $BnG(B $BnH(B $BnI(B $BnJ(B $BnK(B $BnL(B $BnM(B $BnN(B $BnO(B +$BnP(B $BnQ(B $BnR(B $BnS(B $BnT(B $BnU(B $BnV(B $BnW(B $BnX(B $BnY(B $BnZ(B $Bn[(B $Bn\(B $Bn](B $Bn^(B $Bn_(B +$Bn`(B $Bna(B $Bnb(B $Bnc(B $Bnd(B $Bne(B $Bnf(B $Bng(B $Bnh(B $Bni(B $Bnj(B $Bnk(B $Bnl(B $Bnm(B $Bnn(B $Bno(B +$Bnp(B $Bnq(B $Bnr(B $Bns(B $Bnt(B $Bnu(B $Bnv(B $Bnw(B $Bnx(B $Bny(B $Bnz(B $Bn{(B $Bn|(B $Bn}(B $Bn~(B + $Bo!(B $Bo"(B $Bo#(B $Bo$(B $Bo%(B $Bo&(B $Bo'(B $Bo((B $Bo)(B $Bo*(B $Bo+(B $Bo,(B $Bo-(B $Bo.(B $Bo/(B +$Bo0(B $Bo1(B $Bo2(B $Bo3(B $Bo4(B $Bo5(B $Bo6(B $Bo7(B $Bo8(B $Bo9(B $Bo:(B $Bo;(B $Bo<(B $Bo=(B $Bo>(B $Bo?(B +$Bo@(B $BoA(B $BoB(B $BoC(B $BoD(B $BoE(B $BoF(B $BoG(B $BoH(B $BoI(B $BoJ(B $BoK(B $BoL(B $BoM(B $BoN(B $BoO(B +$BoP(B $BoQ(B $BoR(B $BoS(B $BoT(B $BoU(B $BoV(B $BoW(B $BoX(B $BoY(B $BoZ(B $Bo[(B $Bo\(B $Bo](B $Bo^(B $Bo_(B +$Bo`(B $Boa(B $Bob(B $Boc(B $Bod(B $Boe(B $Bof(B $Bog(B $Boh(B $Boi(B $Boj(B $Bok(B $Bol(B $Bom(B $Bon(B $Boo(B +$Bop(B $Boq(B $Bor(B $Bos(B $Bot(B $Bou(B $Bov(B $Bow(B $Box(B $Boy(B $Boz(B $Bo{(B $Bo|(B $Bo}(B $Bo~(B + $Bp!(B $Bp"(B $Bp#(B $Bp$(B $Bp%(B $Bp&(B $Bp'(B $Bp((B $Bp)(B $Bp*(B $Bp+(B $Bp,(B $Bp-(B $Bp.(B $Bp/(B +$Bp0(B $Bp1(B $Bp2(B $Bp3(B $Bp4(B $Bp5(B $Bp6(B $Bp7(B $Bp8(B $Bp9(B $Bp:(B $Bp;(B $Bp<(B $Bp=(B $Bp>(B $Bp?(B +$Bp@(B $BpA(B $BpB(B $BpC(B $BpD(B $BpE(B $BpF(B $BpG(B $BpH(B $BpI(B $BpJ(B $BpK(B $BpL(B $BpM(B $BpN(B $BpO(B +$BpP(B $BpQ(B $BpR(B $BpS(B $BpT(B $BpU(B $BpV(B $BpW(B $BpX(B $BpY(B $BpZ(B $Bp[(B $Bp\(B $Bp](B $Bp^(B $Bp_(B +$Bp`(B $Bpa(B $Bpb(B $Bpc(B $Bpd(B $Bpe(B $Bpf(B $Bpg(B $Bph(B $Bpi(B $Bpj(B $Bpk(B $Bpl(B $Bpm(B $Bpn(B $Bpo(B +$Bpp(B $Bpq(B $Bpr(B $Bps(B $Bpt(B $Bpu(B $Bpv(B $Bpw(B $Bpx(B $Bpy(B $Bpz(B $Bp{(B $Bp|(B $Bp}(B $Bp~(B + $Bq!(B $Bq"(B $Bq#(B $Bq$(B $Bq%(B $Bq&(B $Bq'(B $Bq((B $Bq)(B $Bq*(B $Bq+(B $Bq,(B $Bq-(B $Bq.(B $Bq/(B +$Bq0(B $Bq1(B $Bq2(B $Bq3(B $Bq4(B $Bq5(B $Bq6(B $Bq7(B $Bq8(B $Bq9(B $Bq:(B $Bq;(B $Bq<(B $Bq=(B $Bq>(B $Bq?(B +$Bq@(B $BqA(B $BqB(B $BqC(B $BqD(B $BqE(B $BqF(B $BqG(B $BqH(B $BqI(B $BqJ(B $BqK(B $BqL(B $BqM(B $BqN(B $BqO(B +$BqP(B $BqQ(B $BqR(B $BqS(B $BqT(B $BqU(B $BqV(B $BqW(B $BqX(B $BqY(B $BqZ(B $Bq[(B $Bq\(B $Bq](B $Bq^(B $Bq_(B +$Bq`(B $Bqa(B $Bqb(B $Bqc(B $Bqd(B $Bqe(B $Bqf(B $Bqg(B $Bqh(B $Bqi(B $Bqj(B $Bqk(B $Bql(B $Bqm(B $Bqn(B $Bqo(B +$Bqp(B $Bqq(B $Bqr(B $Bqs(B $Bqt(B $Bqu(B $Bqv(B $Bqw(B $Bqx(B $Bqy(B $Bqz(B $Bq{(B $Bq|(B $Bq}(B $Bq~(B + $Br!(B $Br"(B $Br#(B $Br$(B $Br%(B $Br&(B $Br'(B $Br((B $Br)(B $Br*(B $Br+(B $Br,(B $Br-(B $Br.(B $Br/(B +$Br0(B $Br1(B $Br2(B $Br3(B $Br4(B $Br5(B $Br6(B $Br7(B $Br8(B $Br9(B $Br:(B $Br;(B $Br<(B $Br=(B $Br>(B $Br?(B +$Br@(B $BrA(B $BrB(B $BrC(B $BrD(B $BrE(B $BrF(B $BrG(B $BrH(B $BrI(B $BrJ(B $BrK(B $BrL(B $BrM(B $BrN(B $BrO(B +$BrP(B $BrQ(B $BrR(B $BrS(B $BrT(B $BrU(B $BrV(B $BrW(B $BrX(B $BrY(B $BrZ(B $Br[(B $Br\(B $Br](B $Br^(B $Br_(B +$Br`(B $Bra(B $Brb(B $Brc(B $Brd(B $Bre(B $Brf(B $Brg(B $Brh(B $Bri(B $Brj(B $Brk(B $Brl(B $Brm(B $Brn(B $Bro(B +$Brp(B $Brq(B $Brr(B $Brs(B $Brt(B $Bru(B $Brv(B $Brw(B $Brx(B $Bry(B $Brz(B $Br{(B $Br|(B $Br}(B $Br~(B + $Bs!(B $Bs"(B $Bs#(B $Bs$(B $Bs%(B $Bs&(B $Bs'(B $Bs((B $Bs)(B $Bs*(B $Bs+(B $Bs,(B $Bs-(B $Bs.(B $Bs/(B +$Bs0(B $Bs1(B $Bs2(B $Bs3(B $Bs4(B $Bs5(B $Bs6(B $Bs7(B $Bs8(B $Bs9(B $Bs:(B $Bs;(B $Bs<(B $Bs=(B $Bs>(B $Bs?(B +$Bs@(B $BsA(B $BsB(B $BsC(B $BsD(B $BsE(B $BsF(B $BsG(B $BsH(B $BsI(B $BsJ(B $BsK(B $BsL(B $BsM(B $BsN(B $BsO(B +$BsP(B $BsQ(B $BsR(B $BsS(B $BsT(B $BsU(B $BsV(B $BsW(B $BsX(B $BsY(B $BsZ(B $Bs[(B $Bs\(B $Bs](B $Bs^(B $Bs_(B +$Bs`(B $Bsa(B $Bsb(B $Bsc(B $Bsd(B $Bse(B $Bsf(B $Bsg(B $Bsh(B $Bsi(B $Bsj(B $Bsk(B $Bsl(B $Bsm(B $Bsn(B $Bso(B +$Bsp(B $Bsq(B $Bsr(B $Bss(B $Bst(B $Bsu(B $Bsv(B $Bsw(B $Bsx(B $Bsy(B $Bsz(B $Bs{(B $Bs|(B $Bs}(B $Bs~(B + $Bt!(B $Bt"(B $Bt#(B $Bt$(B $Bt%(B $Bt&(B + +JIS0123 ($BF|K\8l(B) $B$3$s$K$A$O(B + JIS -- $B855$(B $B3+H/(B + $B/export/Users/ianl/1.4.2/test/sun/nio/cs/SCCS/s.ISO2022JP.data0%G!<%?%Y!<%9$KAw$k$Y$-$G$J$$$3$H$KCmL\$7$F$/$@$5$$!#(B</p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/ISO8859x.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,105 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6419791 + * @summary + * @author Martin Buchholz + */ + +import java.io.*; +import java.util.*; +import java.nio.charset.*; +import java.nio.*; + +public class ISO8859x { + final static byte[] lowBytes = new byte[0xa0]; + final static char[] lowChars = new char[0xa0]; + final static String lowString; + static { + for (int i = 0; i < 0xa0; i++) { + lowBytes[i] = (byte) i; + lowChars[i] = (char) i; + } + lowString = new String(lowChars); + } + + private static void testCharset(Charset cs) throws Throwable { + String csn = cs.name(); + System.out.println(csn); + + check(cs.canEncode()); + check(Arrays.equals(lowString.getBytes(csn), lowBytes)); + check(new String(lowBytes, csn).equals(lowString)); + + CharsetEncoder encoder = cs.newEncoder(); + CharsetDecoder decoder = cs.newDecoder(); + decoder.onUnmappableCharacter(CodingErrorAction.REPORT) + .onMalformedInput(CodingErrorAction.REPORT); + encoder.onUnmappableCharacter(CodingErrorAction.REPORT) + .onMalformedInput(CodingErrorAction.REPORT); + + byte[] bytes = new byte[1]; + for (int c = 0xa0; c < 0x100; c++) { + try { + bytes[0] = (byte) c; + char[] chars; + try { chars = decoder.decode(ByteBuffer.wrap(bytes)).array(); } + catch (UnmappableCharacterException x) { continue; } + equal(chars.length, 1); + byte[] bytes2 = encoder.encode(CharBuffer.wrap(chars)).array(); + check(Arrays.equals(bytes2, bytes)); + } catch (Throwable t) { + System.out.printf("cs=%s c=%02x%n", cs, c); + unexpected(t); + } + } + } + + private static void realMain(String[] args) throws Throwable { + for (Map.Entry<String,Charset> e + : Charset.availableCharsets().entrySet()) { + String csn = e.getKey(); + Charset cs = e.getValue(); + if (csn.matches(".*(8859).*")) + try { testCharset(cs); } + catch (Throwable t) { unexpected(t); } + } + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void check(boolean cond) {if (cond) pass(); else fail();} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/JISAutoDetectTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,158 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 4087261 4184592 + * @summary Make sure to determine Japanese text encoding as correctly + * as possible. + */ + +import java.nio.charset.*; +import java.nio.*; + +public class JISAutoDetectTest { + + class TestData { + byte[] input; + byte[] input2; // for second call + String expectedCharset; + } + TestData[] data = new TestData[50]; + + public static void main(String[] argv) throws Exception { + JISAutoDetectTest test = new JISAutoDetectTest(); + test.execute(); + } + + void execute() throws Exception { + CharBuffer output = CharBuffer.allocate(128); + CharBuffer expectedOutput = CharBuffer.allocate(128); + + for (int i = 0; i < data.length; i++) { + if (data[i] == null) + break; + + CharsetDecoder autoDetect = Charset.forName("JISAutoDetect").newDecoder(); + CharsetDecoder dec = Charset.forName(data[i].expectedCharset).newDecoder(); + CoderResult ncr, mcr; + output.clear(); + expectedOutput.clear(); + ncr = autoDetect.decode(ByteBuffer.wrap(data[i].input), + output, + true); + mcr = dec.decode(ByteBuffer.wrap(data[i].input), + expectedOutput, + true); + + if (data[i].input2 != null) { + ncr = autoDetect.decode(ByteBuffer.wrap(data[i].input2), + output, + true); + mcr = dec.decode(ByteBuffer.wrap(data[i].input2), + expectedOutput, + true); + } + String testNumber = " (test#: " + i + ")"; + if (ncr != mcr) + throw new Exception("JISAutoDetect returned a wrong result"); + output.flip(); + expectedOutput.flip(); + if (output.limit() != expectedOutput.limit()) + throw new Exception("JISAutoDetect returned a wrong length"+testNumber); + + for (int x = 0; x < output.limit(); x++) { + if (expectedOutput.charAt(x) != output.charAt(x)) + throw new Exception("JISAutoDetect returned a wrong string"+testNumber); + } + } + } + + public JISAutoDetectTest() { + int i = 0; + + // 0 + data[i] = new TestData(); + data[i].input = new byte[] { (byte)'C', (byte)'o', (byte)'p', (byte)'y', + (byte)'r', (byte)'i', (byte)'g', (byte)'h', + (byte)'t', (byte)' ', (byte)0xa9, (byte)' ', + (byte)'1', (byte)'9', (byte)'9', (byte)'8' }; + data[i].expectedCharset = "SJIS"; + + // 1 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde, + (byte)0x82, (byte)0xc5, (byte)0x82, (byte)0xb7 }; + data[i].expectedCharset = "SJIS"; + + // 2 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde}; + data[i].expectedCharset = "SJIS"; + + // 3 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd }; + data[i].expectedCharset = "SJIS"; + + // 4 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0x8f, (byte)0xa1, (byte)0xaa }; + data[i].expectedCharset = "SJIS"; + + // 5 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0xa4, (byte)0xd2, (byte)0xa4, (byte)0xe9, + (byte)0xa4, (byte)0xac, (byte)0xa4, (byte)0xca }; + data[i].expectedCharset = "EUC_JP"; + + // 6 + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde, + (byte)0xa4, (byte)0xc7, (byte)0xa4, (byte)0xb9 }; + data[i].expectedCharset = "EUC_JP"; + + // 7 (for 4184592) + i++; + data[i] = new TestData(); + data[i].input = new byte[] { (byte)'a', (byte)'b', (byte)'c' }; + data[i].input2 = new byte[] { (byte)0x1b, (byte)'$', (byte)'B', + (byte)'#', (byte)'4', (byte)'$', (byte)'5', + (byte)0x1b, (byte)'(', (byte)'B' }; + data[i].expectedCharset = "ISO2022JP"; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/LatinCharReplacementTWTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,80 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4658679 4879644 + @summary Checks replacement logic within EUC-TW decoder +*/ + +/* + * Tests goodness of fix for bugID 4658679: EUC-TW decoder should + * perform replacement when it encounters latin chars outside the + * normal US-ASCII range. For example: Isolated occurrences of + * French accented chars. See bugID: 4658679. + */ +import java.io.*; +public class LatinCharReplacementTWTest { + public static void main(String[] args) throws Exception { + final String bugID = "4658679"; + // Attempt to decode + byte[] input = { (byte)0xa1, + (byte)0xf0, + (byte)'r', + (byte)'e', + (byte)'s', + (byte)0xe9, // illegal within EUC-TW + (byte)'r', + (byte)'v', + (byte)0xe9, // illegal within EUC-TW + (byte)'s', + (byte)0xa2, + (byte)0xf8 + }; + + char[] expected = { (char) 0xa7, + (char) 'r', + (char) 'e', + (char) 's', + (char) 0xFFFD, // replacement for accented lowercase e + (char) 'r', + (char) 'v', + (char) 0xFFFD, // replacement for accented lowercase e + (char) 's', + (char) 0xb0 }; + + ByteArrayInputStream bais = new ByteArrayInputStream(input); + InputStreamReader isr = new InputStreamReader(bais, "x-EUC-TW"); + + char[] decoded = new char[128]; + int numChars = isr.read(decoded); + + if (numChars != expected.length) { + throw new Exception("failure of test for bug " + bugID); + } + + for (int i = 0 ; i < numChars; i++) { + if (decoded[i] != expected[i]) + throw new Exception("failure of test for bug " + bugID); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/LeftOverSurrogate.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,55 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4160949 + @summary Verify that left over high surrogate does not + cause an UnknownCharacterException when substitutition mode is turned on. + */ + +import java.nio.*; +import java.nio.charset.*; + +public class LeftOverSurrogate { + + public static void main(String args[]) throws Exception { + String s = "abc\uD800\uDC00qrst"; // Valid surrogate + char[] c = s.toCharArray(); + CharsetEncoder enc = Charset.forName("ISO8859_1").newEncoder() + .onUnmappableCharacter(CodingErrorAction.REPLACE); + /* Process the first 4 characters, including the high surrogate + which should be stored */ + ByteBuffer bb = ByteBuffer.allocate(10); + CharBuffer cb = CharBuffer.wrap(c); + cb.limit(4); + enc.encode(cb, bb, false); + cb.limit(7); + enc.encode(cb, bb, true); + byte[] first = bb.array(); + for(int i = 0; i < 7; i++) + System.err.printf("[%d]=%d was %d\n", + i, + (int) first[i] &0xffff, + (int) c[i] & 0xffff); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/MalformedSurrogates.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,85 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4153987 + @summary Malformed surrogates should be handled by the converter in + substitution mode. + */ + +import java.io.*; + +public class MalformedSurrogates { + + public static void main(String[] args) throws Exception { + + String fe = System.getProperty("file.encoding"); + if ( fe.equalsIgnoreCase("UTF8") + || fe.equalsIgnoreCase("UTF-8") + || fe.equalsIgnoreCase("UTF_8")) + // This test is meaningless if the default charset + // does handle surrogates + return; + + System.out.println("Testing string conversion..."); + /* Example with malformed surrogate, and an offset */ + String t = "abc\uD800\uDB00efgh"; + String t2 = t.substring(2); + byte[] b = t2.getBytes(); + System.err.println(b.length); + for (int i = 0; i < b.length; i++) + System.err.println("[" + i + "]" + "=" + (char) b[i] + + "=" + (int) b[i]); + if (b.length != 7) { + throw new Exception("Bad string conversion for bad surrogate"); + } + + /* Example with a proper surrogate, no offset. Always worked */ + String t3 = "abc\uD800\uDC00efgh"; + byte[] b2 = t3.getBytes(); + System.out.println(b2.length); + for(int i = 0; i < b2.length; i++) + System.err.println("[" + i + "]" + "=" + (char) b2[i]); + if (b2.length != 8) { + throw new Exception("Bad string conversion for good surrogate"); + } + + OutputStream os = new ByteArrayOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os); + System.out.println("Testing flush...."); + /* Check for the case where the converter has a left over + high surrogate when flush is called on the converter */ + osw.flush(); + String s = "abc\uD800"; // High surrogate + char[] c = s.toCharArray(); + osw.write(s, 0, 4); + osw.flush(); + + System.out.println("Testing convert..."); + /* Verify that all other characters go through */ + for (int k = 1; k < 65535 ; k++) { + osw.write("Char[" + k + "]=\"" + ((char) k) + "\""); + } + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/NIOJISAutoDetectTest.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,282 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 4831163 5053096 5056440 + * @summary NIO charset basic verification of JISAutodetect decoder + * @author Martin Buchholz + */ + +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CoderResult; +import static java.lang.System.*; + +public class NIOJISAutoDetectTest { + private static int failures = 0; + + private static void fail(String failureMsg) { + System.out.println(failureMsg); + failures++; + } + + private static void check(boolean cond, String msg) { + if (!cond) { + fail("test failed: " + msg); + new Exception().printStackTrace(); + } + } + + private static String SJISName() throws Exception { + return detectingCharset(new byte[] {(byte)0xbb, (byte)0xdd, + (byte)0xcf, (byte)0xb2}); + } + + private static String EUCJName() throws Exception { + return detectingCharset(new byte[] {(byte)0xa4, (byte)0xd2, + (byte)0xa4, (byte)0xe9}); + } + + private static String detectingCharset(byte[] bytes) throws Exception { + //---------------------------------------------------------------- + // Test special public methods of CharsetDecoder while we're here + //---------------------------------------------------------------- + CharsetDecoder cd = Charset.forName("JISAutodetect").newDecoder(); + check(cd.isAutoDetecting(), "isAutodecting()"); + check(! cd.isCharsetDetected(), "isCharsetDetected"); + cd.decode(ByteBuffer.wrap(new byte[] {(byte)'A'})); + check(! cd.isCharsetDetected(), "isCharsetDetected"); + try { + cd.detectedCharset(); + fail("no IllegalStateException"); + } catch (IllegalStateException e) {} + cd.decode(ByteBuffer.wrap(bytes)); + check(cd.isCharsetDetected(), "isCharsetDetected"); + Charset cs = cd.detectedCharset(); + check(cs != null, "cs != null"); + check(! cs.newDecoder().isAutoDetecting(), "isAutodetecting()"); + return cs.name(); + } + + public static void main(String[] argv) throws Exception { + //---------------------------------------------------------------- + // Used to throw BufferOverflowException + //---------------------------------------------------------------- + out.println(new String(new byte[] {0x61}, "JISAutoDetect")); + + //---------------------------------------------------------------- + // InputStreamReader(...JISAutoDetect) used to infloop + //---------------------------------------------------------------- + { + byte[] bytes = "ABCD\n".getBytes(); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + InputStreamReader isr = new InputStreamReader(bais, "JISAutoDetect"); + BufferedReader reader = new BufferedReader(isr); + check (reader.readLine().equals("ABCD"), "first read gets text"); + // used to return "ABCD" on second and subsequent reads + check (reader.readLine() == null, "second read gets null"); + } + + //---------------------------------------------------------------- + // Check all Japanese chars for sanity + //---------------------------------------------------------------- + String SJIS = SJISName(); + String EUCJ = EUCJName(); + out.printf("SJIS charset is %s%n", SJIS); + out.printf("EUCJ charset is %s%n", EUCJ); + + int cnt2022 = 0; + int cnteucj = 0; + int cntsjis = 0; + int cntBAD = 0; + for (char c = '\u0000'; c < '\uffff'; c++) { + if (c == '\u001b' || // ESC + c == '\u2014') // Em-Dash? + continue; + String s = new String (new char[] {c}); + + //---------------------------------------------------------------- + // JISAutoDetect can handle all chars that EUC-JP can, + // unless there is an ambiguity with SJIS. + //---------------------------------------------------------------- + byte[] beucj = s.getBytes(EUCJ); + String seucj = new String(beucj, EUCJ); + if (seucj.equals(s)) { + cnteucj++; + String sauto = new String(beucj, "JISAutoDetect"); + + if (! sauto.equals(seucj)) { + cntBAD++; + String ssjis = new String(beucj, SJIS); + if (! sauto.equals(ssjis)) { + fail("Autodetection agrees with neither EUC nor SJIS"); + } + } + } else + continue; // Optimization + + //---------------------------------------------------------------- + // JISAutoDetect can handle all chars that ISO-2022-JP can. + //---------------------------------------------------------------- + byte[] b2022 = s.getBytes("ISO-2022-JP"); + if (new String(b2022, "ISO-2022-JP").equals(s)) { + cnt2022++; + check(new String(b2022,"JISAutoDetect").equals(s), + "ISO2022 autodetection"); + } + + //---------------------------------------------------------------- + // JISAutoDetect can handle almost all chars that SJIS can. + //---------------------------------------------------------------- + byte[] bsjis = s.getBytes(SJIS); + if (new String(bsjis, SJIS).equals(s)) { + cntsjis++; + check(new String(bsjis,"JISAutoDetect").equals(s), + "SJIS autodetection"); + } + } + out.printf("There are %d ISO-2022-JP-encodable characters.%n", cnt2022); + out.printf("There are %d SJIS-encodable characters.%n", cntsjis); + out.printf("There are %d EUC-JP-encodable characters.%n", cnteucj); + out.printf("There are %d characters that are " + + "misdetected as SJIS after being EUC-encoded.%n", cntBAD); + + + //---------------------------------------------------------------- + // tests for specific byte sequences + //---------------------------------------------------------------- + test("ISO-2022-JP", new byte[] {'A', 'B', 'C'}); + test("EUC-JP", new byte[] {'A', 'B', 'C'}); + test("SJIS", new byte[] {'A', 'B', 'C'}); + + test("SJIS", + new byte[] { 'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', + ' ', (byte)0xa9, ' ', '1', '9', '9', '8' }); + + test("SJIS", + new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde, + (byte)0x82, (byte)0xc5, (byte)0x82, (byte)0xb7 }); + + test("EUC-JP", + new byte[] { (byte)0xa4, (byte)0xd2, (byte)0xa4, (byte)0xe9, + (byte)0xa4, (byte)0xac, (byte)0xa4, (byte)0xca }); + + test("SJIS", + new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde}); + + test("SJIS", + new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd }); + + test("SJIS", + new byte[] { (byte)0x8f, (byte)0xa1, (byte)0xaa }); + + test("EUC-JP", + new byte[] { (byte)0x8f, (byte)0xc5, (byte)0xe0, (byte)0x20}); + + test("EUC-JP", + new byte[] { (byte)0xbb, (byte)0xdd, (byte)0xcf, (byte)0xb2, + (byte)0xb8, (byte)0xdb, (byte)0xbc, (byte)0xbd, + (byte)0xc3, (byte)0xd1, (byte)0xbd, (byte)0xde, + (byte)0xa4, (byte)0xc7, (byte)0xa4, (byte)0xb9 }); + + test("ISO-2022-JP", + new byte[] { 0x1b, '$', 'B', '#', '4', '$', '5', 0x1b, '(', 'B' }); + + + //---------------------------------------------------------------- + // Check handling of ambiguous end-of-input in middle of first char + //---------------------------------------------------------------- + { + CharsetDecoder dc = Charset.forName("x-JISAutoDetect").newDecoder(); + ByteBuffer bb = ByteBuffer.allocate(128); + CharBuffer cb = CharBuffer.allocate(128); + bb.put((byte)'A').put((byte)0x8f); + bb.flip(); + CoderResult res = dc.decode(bb,cb,false); + check(res.isUnderflow(), "isUnderflow"); + check(bb.position() == 1, "bb.position()"); + check(cb.position() == 1, "cb.position()"); + res = dc.decode(bb,cb,false); + check(res.isUnderflow(), "isUnderflow"); + check(bb.position() == 1, "bb.position()"); + check(cb.position() == 1, "cb.position()"); + bb.compact(); + bb.put((byte)0xa1); + bb.flip(); + res = dc.decode(bb,cb,true); + check(res.isUnderflow(), "isUnderflow"); + check(bb.position() == 2, "bb.position()"); + check(cb.position() == 2, "cb.position()"); + } + + + if (failures > 0) + throw new RuntimeException(failures + " tests failed"); + } + + static void checkCoderResult(CoderResult result) { + check(result.isUnderflow(), + "Unexpected coder result: " + result); + } + + static void test(String expectedCharset, byte[] input) throws Exception { + Charset cs = Charset.forName("x-JISAutoDetect"); + CharsetDecoder autoDetect = cs.newDecoder(); + + Charset cs2 = Charset.forName(expectedCharset); + CharsetDecoder decoder = cs2.newDecoder(); + + ByteBuffer bb = ByteBuffer.allocate(128); + CharBuffer charOutput = CharBuffer.allocate(128); + CharBuffer charExpected = CharBuffer.allocate(128); + + bb.put(input); + bb.flip(); + bb.mark(); + + CoderResult result = autoDetect.decode(bb, charOutput, true); + checkCoderResult(result); + charOutput.flip(); + String actual = charOutput.toString(); + + bb.reset(); + + result = decoder.decode(bb, charExpected, true); + checkCoderResult(result); + charExpected.flip(); + String expected = charExpected.toString(); + + check(actual.equals(expected), + String.format("actual=%s expected=%s", actual, expected)); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/ReadZero.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,58 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @summary Verify that if InputStream.read returns 0 we throw an exception. + * @bug 4684515 + */ + +import java.io.*; + +public class ReadZero { + + public static void main(String [] args) throws IOException { + ReadZero r = new ReadZero(); + r.testInputStream(); + } + + private void testInputStream() throws IOException { + File f = new File(System.getProperty("test.src", "."), "ReadZero.java"); + InputStream is = new FileInputStream(f) { + public int read(byte [] b, int off, int len) { + System.out.println("FileInputStream.read"); + return 0; + } + }; + + is.read(new byte[1], 0, 1); // ok + InputStreamReader isr = new InputStreamReader(is); + + try { + int res = isr.read(new char[1], 0, 1); + } catch (IOException x) { + System.out.println("IOException caught"); + return; + } + throw new RuntimeException("IOException not thrown"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/SJISCanEncode.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,73 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4913702 + @summary validates canEncode(char c) method for sun.nio.cs.Shift_JIS + */ + + +import java.nio.*; +import java.nio.charset.*; + +public class SJISCanEncode { + private Charset cs; + private CharsetEncoder encoder; + + private void canEncodeTest(char inputChar, + boolean expectedResult) + throws Exception { + String msg = "err: Shift_JIS canEncode() return value "; + + if (encoder.canEncode(inputChar) != expectedResult) { + throw new Exception(msg + !(expectedResult) + + ": " + Integer.toHexString((int)inputChar)); + } + } + + public static void main(String[] args) throws Exception { + SJISCanEncode test = new SJISCanEncode(); + test.cs = Charset.forName("SJIS"); + test.encoder = test.cs.newEncoder(); + + // us-ascii (mappable by Shift_JIS) + test.canEncodeTest('\u0001', true); + + // Halfwidth Katakana + test.canEncodeTest('\uFF01', true); + + // CJK ideograph + test.canEncodeTest('\u4E9C', true); + + //Hiragana + test.canEncodeTest('\u3041', true); + // fullwidth Katakana + test.canEncodeTest('\u30A1', true); + + // U+0080 should be unmappable + // U+4000 is a BMP character not covered by Shift_JISe + + test.canEncodeTest('\u0080', false); + test.canEncodeTest('\u4000', false); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/StreamEncoderClose.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,76 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 5005426 + @summary Check if StreamEncoder close() method works correctly from + error recovery after the underneath OutputStream failed to + close the first time. + */ + +import java.io.*; +public class StreamEncoderClose { + public static void main( String arg[] ) throws Exception { + byte[] expected = {(byte)0x1b,(byte)0x24,(byte)0x42, + (byte)0x30,(byte)0x6c, + (byte)0x1b,(byte)0x28,(byte)0x42}; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + MyBufferedOutputStream mbos = new MyBufferedOutputStream(baos); + PrintWriter pw = new PrintWriter(new OutputStreamWriter(mbos, "ISO-2022-JP")); + mbos.dontClose(); + pw.write("\u4e00"); + pw.close(); // 1st PrintWriter Close + mbos.canClose(); + pw.close(); // 2nd PrintWriter Close + + //double check, probably not necessary + byte[] out = baos.toByteArray(); + if (out.length != expected.length) { + throw new IOException("Failed"); + } + for (int i = 0; i < out.length; i++) { + //System.out.printf("(byte)0x%x,", out[i] & 0xff); + if (out[i] != expected[i]) + throw new IOException("Failed"); + } + } + + static class MyBufferedOutputStream extends BufferedOutputStream { + MyBufferedOutputStream(OutputStream os) { + super(os); + } + private boolean status; + public void dontClose() { + status = false; + } + public void canClose() { + status = true; + } + public void close() throws IOException { + if ( status == false ) { + throw new IOException("Can't close "); + } + super.close(); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/SurrogateGB18030Test.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,121 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4896454 + @summary Check GB18030 surrogate encoding/decoding handling + */ + +import java.nio.*; +import java.nio.charset.*; + +public class SurrogateGB18030Test { + public static void main(String[] args) throws Exception { + SurrogateGB18030Test test = new SurrogateGB18030Test(); + + test.roundtripTest(); + + /** + * Valid Surrogate pair and 4 byte GB18030 representation + */ + + String inputString = "\uD800\uDC00"; + + byte[] expectedBytes = { (byte)0x90, + (byte)0x30, + (byte)0x81, + (byte)0x30 + }; + test.encodeTest(inputString, expectedBytes); + + /** + * Vice-versa : check that 4 byte GB18030 value encodes correctly + */ + + String expectedStr = "\uDBFF\uDFFF"; + + byte[] inputBytes = { (byte)0xe3, + (byte)0x32, + (byte)0x9a, + (byte)0x35 + }; + + + test.decodeTest(inputBytes, expectedStr); + + } + + private void roundtripTest() throws Exception + { + byte[] ba; + char[] pair = new char[2]; + for (char high = '\ud800'; high <= '\udbff'; high++) { + for (char low = '\udc00'; low <= '\udfff'; low++) { + pair[0] = high; + pair[1] = low; + String s = new String(pair); + if (!s.equals(new String(s.getBytes("gb18030"), "gb18030"))) + throw new Exception ("GB18030 roundtrip failure"); + } + } + + } + + private void encodeTest(String inputString, byte[] expectedBytes) + throws Exception + { + byte[] encoded = inputString.getBytes("GB18030"); + + CharBuffer cb = CharBuffer.wrap(inputString.toCharArray()); + ByteBuffer bb = ByteBuffer.allocate(4); + + CharsetEncoder encoder = Charset.forName("GB18030").newEncoder(); + encoder.encode(cb, bb, true); + + bb.flip(); + for (int i = 0 ; i < expectedBytes.length; i++) { + if (encoded[i] != expectedBytes[i] + || bb.get() != expectedBytes[i]) + throw new Exception ("GB18030 encode failure"); + } + } + + private void decodeTest(byte[] inputBytes, String expectedStr) + throws Exception + { + String s2 = new String(inputBytes, "GB18030"); + + CharsetDecoder decoder = Charset.forName("GB18030").newDecoder(); + + ByteBuffer bb = ByteBuffer.wrap(inputBytes); + CharBuffer cb = CharBuffer.allocate(2); + decoder.decode(bb, cb, true); + + cb.flip(); + for (int i = 0 ; i < expectedStr.length(); i++) { + if (expectedStr.charAt(i) != cb.get() + || s2.charAt(i) != expectedStr.charAt(i)) + throw new Exception ("GB18030 encode failure"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/SurrogateTestEUCTW.java Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,95 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4847097 + @summary Check surrogate coverage of EUC_TW + */ + +/* + * Tests the full surrogate mapping roundtrip fidelity of the + * EUC-TW charset coder updated to support the additional + * planes 4,5,6,7,15 + * + * byte->char mappings are contained in external files + * using plane{x}.surrogate as the convention for the input filenames + * + */ + +import java.io.*; +public class SurrogateTestEUCTW { + + private static final String testRootDir + = System.getProperty("test.src", "."); + + public static void main(String[] args) throws Exception { + char[] surrogatePair = new char[2]; + int[] expectBytes = new int[4]; + + // Iterate test over each supported CNS-11643 plane + // containing supplementary character mappings + + String[] testPlane = { "3", "4", "5", "6" ,"7", "15" }; + + for (int i = 0 ; i < testPlane.length; i++) { + FileReader f = new FileReader(testRootDir + + System.getProperty("file.separator") + + "SurrogateTestEUCTW.plane" + + testPlane[i] + + ".surrogates"); + BufferedReader r = new BufferedReader(f); + String line; + + while ((line = r.readLine()) != null) { + int charValue = Integer.parseInt(line.substring(9,14), 16); + surrogatePair[0] = (char) ((charValue - 0x10000) / 0x400 + + 0xd800); + surrogatePair[1] = (char) ((charValue - 0x10000) % 0x400 + + 0xdc00); + // Synthesize 4 byte expected byte values from CNS input values + expectBytes[0] = 0x8E; + expectBytes[1] = 0xA0 + Integer.parseInt(testPlane[i]); + expectBytes[2] = 0x80 | Integer.parseInt(line.substring(2,4), 16); + expectBytes[3] = 0x80 | Integer.parseInt(line.substring(4,6), 16); + + String testStr = new String(surrogatePair); + byte[] encodedBytes = testStr.getBytes("EUC-TW"); + + for (int x = 0 ; x < 4 ; x++) { + if (encodedBytes[x] != (byte)(expectBytes[x] & 0xff)) { + throw new Exception("EUC_TW Surrogate Encoder error"); + } + } + + // Next: test round-trip fidelity + String decoded = new String(encodedBytes, "EUC-TW"); + + if (!decoded.equals(testStr)) { + throw new Exception("EUCTW Decoder error"); + } + } + r.close(); + f.close(); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane15.surrogates Mon Jun 30 14:06:34 2008 -0700 @@ -0,0 +1,6476 @@ +0x2121 0x20002 +0x2122 0x2008C +0x2123 0x200D4 +0x2124 0x201A5 +0x2125 0x20092 +0x2126 0x20093 +0x2127 0x200D8 +0x2128 0x200D9 +0x2129 0x201A7 +0x212A 0x2062B +0x212B 0x2062C +0x212C 0x2062D +0x212D 0x20630 +0x212E 0x2062E +0x212F 0x206AB +0x2131 0x2092D +0x2132 0x2096D +0x2133 0x2F834 +0x2134 0x20A0F +0x2136 0x20B9D +0x2137 0x211A2 +0x2138 0x215D4 +0x2139 0x21B56 +0x213A 0x21BC3 +0x213B 0x22014 +0x213D 0x2471A +0x213E 0x2000F +0x213F 0x20010 +0x2140 0x2009A +0x2141 0x2009B +0x2143 0x201AC +0x2145 0x20097 +0x2146 0x20546 +0x2148 0x20576 +0x2149 0x20577 +0x214A 0x205AE +0x214B 0x2063A +0x214C 0x2067D +0x214D 0x21BC5 +0x214E 0x20BA8 +0x2151 0x21241 +0x2152 0x21242 +0x2153 0x215D8 +0x2154 0x215D9 +0x2155 0x216AA +0x2156 0x216AB +0x2157 0x21942 +0x2158 0x21941 +0x215A 0x21BC6 +0x215C 0x21D35 +0x215D 0x21D36 +0x215E 0x21D37 +0x215F 0x2F883 +0x2160 0x2634D +0x2162 0x221B5 +0x2163 0x22317 +0x2164 0x22482 +0x2165 0x233B6 +0x2167 0x23C72 +0x2168 0x2455C +0x2169 0x245A8 +0x216B 0x215E3 +0x216E 0x200E6 +0x216F 0x20144 +0x2170 0x20145 +0x2173 0x201C4 +0x2174 0x201C5 +0x2175 0x201C6 +0x2176 0x201C7 +0x2177 0x201C8 +0x2178 0x201C9 +0x2179 0x201CA +0x217A 0x201D4 +0x217B 0x2057D +0x217C 0x26272 +0x217D 0x205B2 +0x217E 0x205B4 +0x2221 0x20682 +0x2222 0x206C7 +0x2223 0x206C8 +0x2225 0x2083C +0x2226 0x2083D +0x2227 0x2083E +0x2228 0x2083F +0x2229 0x2F824 +0x222A 0x208D3 +0x222B 0x20147 +0x222D 0x20A3D +0x222E 0x20AE2 +0x222F 0x20BB8 +0x2230 0x20BB9 +0x2231 0x20BC2 +0x2232 0x20BBA +0x2233 0x20BC6 +0x2234 0x20BBB +0x2235 0x211AD +0x2236 0x2124C +0x2237 0x2124D +0x2239 0x216B2 +0x223A 0x216B3 +0x223B 0x216B4 +0x223C 0x216B5 +0x223D 0x219C3 +0x223E 0x219C4 +0x223F 0x219C5 +0x2240 0x219C6 +0x2241 0x219C7 +0x2243 0x21BCE +0x2244 0x21C30 +0x2245 0x21D47 +0x2246 0x21D48 +0x2248 0x2205C +0x224A 0x2205F +0x224B 0x22318 +0x224C 0x22319 +0x224D 0x2237E +0x224F 0x225B0 +0x2250 0x22A75 +0x2252 0x22A76 +0x2253 0x23041 +0x2254 0x23142 +0x2256 0x233BD +0x225A 0x23B1E +0x225B 0x23B1F +0x225C 0x23C87 +0x225E 0x23C78 +0x225F 0x24188 +0x2260 0x24189 +0x2261 0x2418A +0x2262 0x24617 +0x2263 0x24615 +0x2267 0x250E5 +0x2268 0x25609 +0x2269 0x2573B +0x226A 0x2574F +0x226C 0x2662E +0x226D 0x2662F +0x226E 0x26AFF +0x226F 0x26AFD +0x2270 0x26AFE +0x2274 0x20023 +0x2275 0x200EA +0x2276 0x2012A +0x2277 0x20149 +0x2278 0x2014A +0x2279 0x2014B +0x227A 0x201DF +0x227B 0x201E0 +0x227C 0x201E1 +0x227D 0x201E2 +0x227E 0x205C1 +0x2321 0x201E3 +0x2322 0x201E4 +0x2323 0x201E5 +0x2324 0x205C0 +0x2325 0x201E6 +0x2326 0x201F7 +0x2328 0x201E7 +0x2329 0x201E8 +0x232A 0x201E9 +0x232B 0x201EA +0x232C 0x201EB +0x232D 0x2050E +0x232E 0x20580 +0x232F 0x20581 +0x2330 0x205BA +0x2331 0x205BB +0x2332 0x205BC +0x2333 0x205BD +0x2334 0x2063F +0x2335 0x20640 +0x2336 0x20688 +0x2337 0x2F81F +0x2338 0x20846 +0x233A 0x20847 +0x233B 0x20848 +0x233C 0x20936 +0x233D 0x20972 +0x233E 0x20996 +0x233F 0x20A47 +0x2340 0x20AE7 +0x2341 0x20B34 +0x2342 0x20B35 +0x2343 0x20B36 +0x2344 0x20B37 +0x2345 0x20BE3 +0x2346 0x20BE4 +0x2347 0x20BE5 +0x2348 0x20BEB +0x234A 0x20BE6 +0x234B 0x20BE7 +0x234C 0x20BE8 +0x234F 0x211B9 +0x2351 0x211BA +0x2353 0x21263 +0x2354 0x21264 +0x2356 0x21265 +0x2358 0x21266 +0x2359 0x2127C +0x235A 0x21267 +0x235B 0x2F85A +0x235C 0x21559 +0x235D 0x215E9 +0x235E 0x215EA +0x235F 0x215EB +0x2360 0x215EC +0x2361 0x215ED +0x2362 0x215EE +0x2363 0x215EF +0x2364 0x216BF +0x2365 0x216CB +0x2366 0x216C3 +0x2367 0x216D5 +0x2368 0x216C4 +0x2369 0x216C5 +0x236A 0x216D3 +0x236B 0x216C6 +0x236C 0x216C7 +0x236D 0x216C8 +0x236E 0x216C9 +0x236F 0x216CA +0x2370 0x2194A +0x2372 0x219D1 +0x2373 0x21B61 +0x2374 0x21C37 +0x2376 0x21D64 +0x2377 0x21D66 +0x2379 0x21D67 +0x237A 0x21D68 +0x237B 0x21D69 +0x237D 0x21D73 +0x237E 0x21D6A +0x2421 0x21D6B +0x2424 0x22072 +0x2426 0x221B9 +0x2427 0x2231C +0x2428 0x22336 +0x2429 0x223BC +0x242A 0x223BE +0x242B 0x223BF +0x242C 0x223C0 +0x242D 0x22487 +0x242E 0x225DC +0x242F 0x225DD +0x2430 0x225F5 +0x2431 0x225DE +0x2432 0x225DF +0x2433 0x2F89E +0x2434 0x225E0 +0x2435 0x225E1 +0x2436 0x225E2 +0x2437 0x22A2C +0x2438 0x22A2D +0x243A 0x22AA9 +0x243B 0x22A9C +0x243C 0x22A9D +0x243D 0x22A9E +0x243E 0x22A9F +0x243F 0x22AA0 +0x2440 0x22AA1 +0x2441 0x22AA2 +0x2443 0x22AA3 +0x2444 0x22AA4 +0x2445 0x22AA7 +0x2446 0x23042 +0x2447 0x23093 +0x2448 0x23151 +0x244A 0x23152 +0x244B 0x23144 +0x244C 0x23153 +0x244D 0x23322 +0x244E 0x233C6 +0x244F 0x233C7 +0x2450 0x233C9 +0x2451 0x2F8DD +0x2452 0x233CA +0x2454 0x233C8 +0x2455 0x23B24 +0x2456 0x23B25 +0x2457 0x23B26 +0x2459 0x23B27 +0x245A 0x23B28 +0x245C 0x23C58 +0x245D 0x2F8FB +0x245E 0x23CA7 +0x245F 0x23C88 +0x2460 0x23C89 +0x2461 0x23CA5 +0x2462 0x23CA8 +0x2463 0x23CA9 +0x2464 0x23CAA +0x2465 0x23CAB +0x2466 0x23CAC +0x2467 0x23CAD +0x2469 0x23C79 +0x246B 0x24194 +0x246C 0x24195 +0x246D 0x24196 +0x2470 0x24197 +0x2472 0x24198 +0x2473 0x2454E +0x2474 0x2454F +0x2475 0x24619 +0x2477 0x24741 +0x2478 0x2F92A +0x2479 0x248F7 +0x247A 0x24C04 +0x247B 0x24C19 +0x247C 0x24C17 +0x247D 0x25040 +0x247E 0x250EC +0x2521 0x2541B +0x2522 0x2541C +0x2524 0x2560E +0x2525 0x25752 +0x2526 0x25AD8 +0x2527 0x25E26 +0x2528 0x26274 +0x252A 0x26275 +0x252B 0x269C6 +0x252C 0x26B0B +0x252D 0x26B0C +0x252E 0x26B0D +0x252F 0x26B0E +0x2530 0x26B0F +0x2531 0x26B10 +0x2533 0x28459 +0x2534 0x2845A +0x2535 0x28683 +0x2536 0x28684 +0x2537 0x28685 +0x253A 0x28E20 +0x253B 0x28E21 +0x253C 0x28E22 +0x253D 0x28E23 +0x253E 0x28E24 +0x253F 0x28E29 +0x2540 0x200F4 +0x2542 0x2158F +0x2543 0x20151 +0x2545 0x20217 +0x2546 0x20218 +0x2547 0x2025B +0x2548 0x20219 +0x2549 0x2021A +0x254B 0x2021B +0x254C 0x2021C +0x254D 0x2021D +0x254E 0x2021E +0x254F 0x2021F +0x2550 0x20220 +0x2551 0x20221 +0x2552 0x2048B +0x2553 0x20488 +0x2555 0x20585 +0x2556 0x26287 +0x2557 0x205C7 +0x2558 0x2064C +0x2559 0x2064D +0x255A 0x206FC +0x255B 0x206FD +0x255C 0x206FE +0x255D 0x206FF +0x2560 0x20856 +0x2561 0x20857 +0x2562 0x20858 +0x2563 0x20859 +0x2564 0x208DC +0x2565 0x208DD +0x2566 0x20973 +0x2567 0x2099D +0x2568 0x209A1 +0x2569 0x2099E +0x256A 0x2099F +0x256B 0x209A0 +0x256C 0x209E6 +0x256D 0x20A51 +0x256E 0x20A52 +0x256F 0x20B3D +0x2570 0x20C22 +0x2572 0x20C23 +0x2573 0x20C24 +0x2574 0x20C25 +0x2575 0x20C26 +0x2576 0x20C27 +0x2577 0x20C28 +0x2578 0x20C29 +0x2579 0x20C2A +0x257A 0x20C2B +0x257C 0x20C40 +0x257D 0x20C2C +0x257E 0x20C2D +0x2621 0x20C2E +0x2622 0x20C2F +0x2623 0x20C30 +0x2624 0x211D0 +0x2625 0x212A8 +0x2626 0x21294 +0x2627 0x21295 +0x2628 0x21296 +0x2629 0x21297 +0x262A 0x21298 +0x262B 0x2129C +0x262C 0x2129B +0x262E 0x212A1 +0x262F 0x212A0 +0x2630 0x21299 +0x2631 0x2129A +0x2632 0x212A7 +0x2634 0x21564 +0x2636 0x21600 +0x2637 0x21601 +0x263A 0x216E5 +0x263B 0x216E9 +0x263C 0x216FB +0x263D 0x216FC +0x263E 0x216EA +0x263F 0x216EB +0x2640 0x216EC +0x2641 0x216ED +0x2642 0x216EE +0x2643 0x216EF +0x2644 0x216FA +0x2645 0x216F0 +0x2646 0x216F1 +0x2647 0x216F2 +0x2648 0x216F3 +0x2649 0x216F4 +0x264A 0x21952 +0x264B 0x21953 +0x264C 0x21954 +0x264D 0x21955 +0x264E 0x21958 +0x264F 0x21956 +0x2651 0x219DD +0x2652 0x219DE +0x2653 0x219E3 +0x2654 0x219DF +0x2655 0x219E0 +0x2656 0x21B22 +0x2657 0x21B23 +0x2658 0x21B68 +0x2659 0x21BDF +0x265B 0x21C44 +0x265C 0x21D94 +0x265D 0x21D95 +0x265E 0x21D96 +0x265F 0x21D97 +0x2660 0x21D98 +0x2661 0x21D99 +0x2662 0x2F879 +0x2663 0x21D9A +0x2664 0x21D9B +0x2665 0x21D9D +0x2666 0x21D9E +0x2667 0x21D9F +0x2668 0x21DA0 +0x2669 0x21FF3 +0x266A 0x21FF2 +0x266B 0x2201F +0x266C 0x22088 +0x266D 0x2218F +0x266E 0x22190 +0x2670 0x221FD +0x2671 0x221FE +0x2672 0x221FF +0x2673 0x22200 +0x2674 0x22201 +0x2675 0x2261A +0x2677 0x225E3 +0x2678 0x225E4 +0x2679 0x225E5 +0x267A 0x225E6 +0x267B 0x225E7 +0x267C 0x225EB +0x267D 0x225E8 +0x267E 0x225E9 +0x2721 0x225EA +0x2722 0x2261D +0x2723 0x229A4 +0x2724 0x229A3 +0x2725 0x22AD4 +0x2726 0x22AC6 +0x2727 0x22AC7 +0x2728 0x22AC8 +0x2729 0x22AC9 +0x272A 0x22ACA +0x272B 0x22ACB +0x272C 0x22ACC +0x272D 0x22ACD +0x272F 0x22ACE +0x2731 0x22EB8 +0x2732 0x22EB9 +0x2733 0x22EBA +0x2734 0x2306E +0x2735 0x230DB +0x2736 0x230DC +0x2737 0x23168 +0x2738 0x23169 +0x2739 0x2316A +0x273A 0x2316B +0x273B 0x2316C +0x273C 0x2316D +0x273D 0x2316E +0x273F 0x23324 +0x2740 0x23325 +0x2742 0x23400 +0x2743 0x233E5 +0x2744 0x233F9 +0x2745 0x233E7 +0x2746 0x233E8 +0x2747 0x233E9 +0x2748 0x233FE +0x2749 0x233EA +0x274A 0x233EB +0x274B 0x233EC +0x274D 0x233ED +0x274F 0x233EE +0x2751 0x233EF +0x2753 0x23417 +0x2754 0x233F0 +0x2755 0x233F1 +0x2756 0x23894 +0x2757 0x2395B +0x2758 0x2395C +0x2759 0x2395D +0x275A 0x23B2F +0x275C 0x23B30 +0x275D 0x23B31 +0x275E 0x23B32 +0x275F 0x23B33 +0x2760 0x23CCC +0x2761 0x23CCD +0x2762 0x23CCE +0x2763 0x23CAE +0x2764 0x23CAF +0x2765 0x23CB0 +0x2767 0x23CCF +0x2768 0x23CD0 +0x2769 0x23CD1 +0x276A 0x23CD2 +0x276B 0x23CD3 +0x276D 0x23CD4 +0x276F 0x241A6 +0x2770 0x241A7 +0x2771 0x241A8 +0x2772 0x241B0 +0x2773 0x241A9 +0x2774 0x241AA +0x2775 0x241AB +0x2776 0x241AC +0x2777 0x241AD +0x2778 0x244FB +0x2779 0x244FC +0x277B 0x2462D +0x277C 0x2462E +0x277D 0x24650 +0x277E 0x2462F +0x2821 0x24630 +0x2822 0x24765 +0x2823 0x248E6 +0x2824 0x2490C +0x2825 0x24902 +0x2826 0x24903 +0x2827 0x24904 +0x2828 0x24905 +0x2829 0x24906 +0x282B 0x24BC0 +0x282C 0x24C24 +0x282D 0x24C25 +0x282E 0x24D16 +0x282F 0x24D32 +0x2830 0x25420 +0x2831 0x25421 +0x2832 0x25422 +0x2833 0x25423 +0x2835 0x25425 +0x2836 0x25619 +0x2837 0x25624 +0x2838 0x2561A +0x2839 0x2561B +0x283A 0x2561C +0x283B 0x2561D +0x283C 0x2F952 +0x283D 0x2561E +0x283E 0x2575A +0x283F 0x2575B +0x2840 0x2575C +0x2841 0x2575D +0x2842 0x2575E +0x2843 0x25931 +0x2845 0x25E29 +0x2847 0x25F88 +0x2848 0x25F89 +0x2849 0x26289 +0x284B 0x26356 +0x284C 0x264D1 +0x284D 0x264E6 +0x284E 0x26532 +0x284F 0x26533 +0x2850 0x26652 +0x2851 0x26653 +0x2853 0x26654 +0x2854 0x26655 +0x2857 0x26B29 +0x2858 0x26B2A +0x2859 0x26B2B +0x285A 0x26B2C +0x285B 0x26B2D +0x285C 0x2F992 +0x285D 0x26B2E +0x285E 0x26B2F +0x285F 0x26B30 +0x2860 0x26B31 +0x2861 0x26B32 +0x2862 0x26B33 +0x2864 0x26B34 +0x2865 0x2719B +0x2866 0x27223 +0x2867 0x27224 +0x2869 0x27225 +0x286A 0x27227 +0x286B 0x27616 +0x286C 0x27CA0 +0x286D 0x2846F +0x286F 0x28470 +0x2870 0x28471 +0x2873 0x28472 +0x2874 0x28473 +0x2875 0x28474 +0x2876 0x2869C +0x2877 0x286AA +0x2878 0x2869D +0x2879 0x2869E +0x287B 0x286AB +0x287C 0x2869F +0x287D 0x28E35 +0x287E 0x28E38 +0x2921 0x2A38D +0x2922 0x20035 +0x2923 0x20036 +0x2924 0x25AEE +0x2925 0x200B4 +0x2926 0x2A6C9 +0x2927 0x20132 +0x2928 0x20155 +0x2929 0x20244 +0x292A 0x20245 +0x292B 0x20246 +0x292C 0x20247 +0x292E 0x20248 +0x292F 0x20249 +0x2931 0x2024A +0x2932 0x2024B +0x2933 0x2024C +0x2934 0x2024D +0x2935 0x2024E +0x2936 0x2024F +0x2937 0x20250 +0x2938 0x20251 +0x2939 0x26299 +0x293A 0x205D1 +0x293C 0x205D2 +0x293D 0x205D3 +0x293E 0x205D4 +0x293F 0x205D5 +0x2940 0x20721 +0x2941 0x20722 +0x2942 0x20723 +0x2943 0x20868 +0x2944 0x20869 +0x2945 0x2086A +0x2946 0x208E2 +0x2947 0x20945 +0x2948 0x209EC +0x2949 0x209ED +0x294A 0x209EE +0x294B 0x209EF +0x294D 0x20A62 +0x294E 0x20A63 +0x294F 0x20AF4 +0x2950 0x2006F +0x2951 0x20B44 +0x2952 0x20B45 +0x2953 0x20C79 +0x2955 0x20C7A +0x2956 0x20C7B +0x2957 0x20C7C +0x2958 0x20C7D +0x2959 0x20C7E +0x295A 0x20C7F +0x295B 0x20C80 +0x295E 0x20C81 +0x295F 0x20C82 +0x2960 0x20C83 +0x2961 0x20C84 +0x2962 0x20C85 +0x2963 0x20C86 +0x2964 0x20C87 +0x2965 0x20C8F +0x2966 0x20C88 +0x2967 0x20C89 +0x2968 0x212C5 +0x2969 0x212C6 +0x296B 0x212C7 +0x296C 0x212C8 +0x296D 0x212C9 +0x296E 0x212CA +0x296F 0x212CB +0x2970 0x212CC +0x2972 0x212CD +0x2973 0x212CE +0x2974 0x212E3 +0x2975 0x212CF +0x2976 0x212D0 +0x2977 0x212D1 +0x2978 0x212D2 +0x2979 0x212D3 +0x297A 0x212C4 +0x297B 0x212D4 +0x297C 0x212D5 +0x297D 0x212D6 +0x297E 0x21520 +0x2A21 0x21521 +0x2A22 0x2161A +0x2A23 0x21612 +0x2A24 0x21614 +0x2A25 0x21615 +0x2A26 0x21616 +0x2A27 0x21619 +0x2A28 0x21617 +0x2A29 0x21618 +0x2A2B 0x2F861 +0x2A2D 0x21712 +0x2A2E 0x21713 +0x2A2F 0x21714 +0x2A30 0x21715 +0x2A31 0x21716 +0x2A32 0x21717 +0x2A33 0x21718 +0x2A34 0x21719 +0x2A35 0x21961 +0x2A36 0x21962 +0x2A37 0x21963 +0x2A38 0x219F5 +0x2A3A 0x219F6 +0x2A3B 0x219F7 +0x2A3C 0x219F8 +0x2A3D 0x21B29 +0x2A3F 0x21C5D +0x2A40 0x21C57 +0x2A41 0x21C58 +0x2A42 0x21C59 +0x2A43 0x21C5A +0x2A44 0x21C5B +0x2A45 0x21DBB +0x2A46 0x21DD1 +0x2A47 0x21DBC +0x2A48 0x21DBD +0x2A49 0x268DF +0x2A4A 0x21DD0 +0x2A4B 0x21DBE +0x2A4C 0x21DBF +0x2A4D 0x21DC0 +0x2A4E 0x21DC1 +0x2A4F 0x21DC2 +0x2A50 0x21DC3 +0x2A51 0x21DC4 +0x2A52 0x26B6C +0x2A53 0x220A1 +0x2A54 0x220A2 +0x2A55 0x220A3 +0x2A56 0x22193 +0x2A57 0x2220D +0x2A58 0x2220F +0x2A59 0x2220E +0x2A5A 0x22210 +0x2A5B 0x22211 +0x2A5C 0x22212 +0x2A5D 0x2F895 +0x2A5E 0x224E5 +0x2A5F 0x2262F +0x2A61 0x22657 +0x2A62 0x22630 +0x2A63 0x22668 +0x2A64 0x2262B +0x2A65 0x22631 +0x2A66 0x22658 +0x2A67 0x2F8A2 +0x2A68 0x22632 +0x2A69 0x22659 +0x2A6B 0x2265A +0x2A6C 0x22633 +0x2A6D 0x2265B +0x2A6E 0x2265C +0x2A6F 0x2265D +0x2A70 0x2261E +0x2A71 0x229AE +0x2A72 0x229AF +0x2A73 0x22A3B +0x2A74 0x22A3C +0x2A75 0x22A3D +0x2A76 0x22B07 +0x2A77 0x22B08 +0x2A78 0x22B09 +0x2A79 0x22B0A +0x2A7A 0x22B0B +0x2A7B 0x22B0C +0x2A7C 0x22B0D +0x2A7D 0x22B0E +0x2A7E 0x22B0F +0x2B21 0x22B10 +0x2B22 0x22B22 +0x2B23 0x22B11 +0x2B24 0x22B12 +0x2B25 0x22B13 +0x2B26 0x22B14 +0x2B27 0x22B15 +0x2B28 0x22B16 +0x2B29 0x22B17 +0x2B2A 0x22B18 +0x2B2B 0x2F8B8 +0x2B2D 0x23046 +0x2B2E 0x23047 +0x2B2F 0x23048 +0x2B30 0x230E1 +0x2B31 0x23181 +0x2B32 0x23183 +0x2B33 0x20C75 +0x2B35 0x23185 +0x2B36 0x23186 +0x2B37 0x2332A +0x2B38 0x2F8D1 +0x2B39 0x2332B +0x2B3A 0x2336B +0x2B3B 0x23418 +0x2B3C 0x23419 +0x2B3D 0x2341A +0x2B3F 0x2341B +0x2B40 0x2341C +0x2B41 0x2341D +0x2B42 0x2341E +0x2B43 0x2341F +0x2B44 0x23420 +0x2B45 0x23421 +0x2B46 0x23422 +0x2B47 0x23423 +0x2B49 0x23424 +0x2B4A 0x23425 +0x2B4B 0x23426 +0x2B4C 0x23427 +0x2B4D 0x23428 +0x2B4E 0x23429 +0x2B4F 0x2342A +0x2B50 0x239EF +0x2B51 0x23B49 +0x2B52 0x23B4A +0x2B53 0x23B4B +0x2B54 0x23B4C +0x2B55 0x23B4D +0x2B56 0x23B4E +0x2B57 0x23B4F +0x2B58 0x23B50 +0x2B59 0x23B51 +0x2B5A 0x23B52 +0x2B5B 0x23B53 +0x2B5C 0x23B54 +0x2B5D 0x23B5A +0x2B5E 0x23B55 +0x2B5F 0x23C5F +0x2B60 0x23D02 +0x2B61 0x23D03 +0x2B62 0x23D04 +0x2B63 0x23D05 +0x2B64 0x23CD5 +0x2B65 0x23D06 +0x2B66 0x23D07 +0x2B67 0x23CD6 +0x2B68 0x23D08 +0x2B69 0x23D09 +0x2B6A 0x23D0A +0x2B6B 0x23D0B +0x2B6C 0x23CD7 +0x2B6D 0x23D0C +0x2B6E 0x23D0D +0x2B6F 0x241C8 +0x2B70 0x241C9 +0x2B71 0x241CA +0x2B72 0x241CB +0x2B73 0x241CC +0x2B74 0x241CD +0x2B75 0x241CE +0x2B76 0x241CF +0x2B77 0x241D0 +0x2B78 0x241D1 +0x2B79 0x241D2 +0x2B7B 0x241D3 +0x2B7C 0x241D4 +0x2B7D 0x241D5 +0x2B7E 0x241D6 +0x2C21 0x241D7 +0x2C22 0x241E2 +0x2C23 0x241D8 +0x2C24 0x24504 +0x2C25 0x24505 +0x2C26 0x24506 +0x2C28 0x24643 +0x2C29 0x24644 +0x2C2A 0x24784 +0x2C2B 0x2478F +0x2C2C 0x24785 +0x2C2D 0x24786 +0x2C2E 0x2492F +0x2C2F 0x2491A +0x2C30 0x2491B +0x2C31 0x2491C +0x2C33 0x2491D +0x2C34 0x2491E +0x2C35 0x2491F +0x2C36 0x24920 +0x2C37 0x24921 +0x2C38 0x24922 +0x2C39 0x2F92C +0x2C3A 0x24923 +0x2C3B 0x24924 +0x2C3C 0x2490E +0x2C3D 0x24925 +0x2C3E 0x2492B +0x2C3F 0x2492C +0x2C40 0x2490B +0x2C41 0x24AEE +0x2C43 0x24BC3 +0x2C44 0x24BD8 +0x2C45 0x24BD9 +0x2C46 0x24C38 +0x2C47 0x24C39 +0x2C48 0x24C3A +0x2C49 0x24C3B +0x2C4B 0x24C3C +0x2C4C 0x24C3D +0x2C4D 0x24C3E +0x2C4E 0x24C3F +0x2C4F 0x24C40 +0x2C50 0x24D48 +0x2C51 0x24D4C +0x2C52 0x24F28 +0x2C53 0x24F51 +0x2C54 0x24F52 +0x2C55 0x2504C +0x2C56 0x25123 +0x2C57 0x2F945 +0x2C58 0x25124 +0x2C59 0x25431 +0x2C5A 0x25432 +0x2C5B 0x25433 +0x2C5D 0x25434 +0x2C5E 0x25435 +0x2C5F 0x25436 +0x2C60 0x25440 +0x2C61 0x25437 +0x2C63 0x25438 +0x2C64 0x2543D +0x2C65 0x25638 +0x2C66 0x25639 +0x2C67 0x2563A +0x2C68 0x2563B +0x2C69 0x2563C +0x2C6A 0x2564C +0x2C6B 0x25773 +0x2C6C 0x25774 +0x2C6E 0x25775 +0x2C6F 0x25776 +0x2C70 0x25779 +0x2C71 0x25941 +0x2C72 0x25942 +0x2C73 0x25943 +0x2C74 0x25A5B +0x2C77 0x238A6 +0x2C78 0x25A5C +0x2C79 0x25AE5 +0x2C7A 0x25AE6 +0x2C7B 0x25AE7 +0x2C7C 0x25AE8 +0x2C7D 0x25AED +0x2C7E 0x25E30 +0x2D22 0x25E31 +0x2D23 0x25F94 +0x2D24 0x26351 +0x2D25 0x263FD +0x2D26 0x263FE +0x2D27 0x264E9 +0x2D29 0x266B3 +0x2D2A 0x26684 +0x2D2B 0x26694 +0x2D2D 0x2669C +0x2D2F 0x26685 +0x2D30 0x26900 +0x2D31 0x26937 +0x2D32 0x26957 +0x2D33 0x26B54 +0x2D34 0x26B68 +0x2D35 0x26B55 +0x2D36 0x26B5C +0x2D37 0x26B56 +0x2D38 0x26B57 +0x2D39 0x26B58 +0x2D3A 0x26B59 +0x2D3B 0x26B5A +0x2D3C 0x26B5B +0x2D3D 0x27234 +0x2D3F 0x27235 +0x2D41 0x27239 +0x2D42 0x27236 +0x2D43 0x27237 +0x2D44 0x27238 +0x2D45 0x275E5 +0x2D46 0x27659 +0x2D48 0x2763A +0x2D49 0x2763B +0x2D4A 0x27D28 +0x2D4B 0x27E89 +0x2D4D 0x27E8A +0x2D4E 0x27E8B +0x2D4F 0x27E8C +0x2D50 0x27E8D +0x2D51 0x27FBC +0x2D52 0x282A3 +0x2D54 0x282A4 +0x2D55 0x28493 +0x2D56 0x28494 +0x2D57 0x28495 +0x2D58 0x28496 +0x2D59 0x28497 +0x2D5A 0x286B9 +0x2D5B 0x28E4F +0x2D5C 0x28E50 +0x2D5D 0x28E51 +0x2D5E 0x29076 +0x2D60 0x200FB +0x2D61 0x20083 +0x2D62 0x20138 +0x2D63 0x2015D +0x2D64 0x20271 +0x2D66 0x20277 +0x2D67 0x20278 +0x2D68 0x2F807 +0x2D69 0x202C3 +0x2D6A 0x20279 +0x2D6B 0x2027A +0x2D6C 0x2027B +0x2D6D 0x2027C +0x2D6E 0x20272 +0x2D6F 0x2027D +0x2D70 0x202A0 +0x2D71 0x2027E +0x2D72 0x2027F +0x2D73 0x20280 +0x2D74 0x20281 +0x2D75 0x20282 +0x2D76 0x20283 +0x2D77 0x2029E +0x2D78 0x20284 +0x2D79 0x20285 +0x2D7A 0x20286 +0x2D7B 0x20287 +0x2D7C 0x20288 +0x2D7D 0x20493 +0x2D7E 0x20494 +0x2E21 0x20495 +0x2E22 0x204EF +0x2E23 0x204F0 +0x2E25 0x2058D +0x2E26 0x2058F +0x2E27 0x20590 +0x2E28 0x20591 +0x2E29 0x20592 +0x2E2A 0x205DE +0x2E2B 0x205E1 +0x2E2C 0x20653 +0x2E2E 0x2074A +0x2E2F 0x2074B +0x2E30 0x2074C +0x2E31 0x20751 +0x2E32 0x2074D +0x2E33 0x20748 +0x2E34 0x20874 +0x2E35 0x20875 +0x2E36 0x20920 +0x2E37 0x20921 +0x2E38 0x209A5 +0x2E39 0x209A6 +0x2E3A 0x20A73 +0x2E3B 0x20A74 +0x2E3C 0x20B50 +0x2E3D 0x20B51 +0x2E3E 0x20B52 +0x2E3F 0x20B53 +0x2E40 0x20CDB +0x2E41 0x20CDC +0x2E43 0x20CDD +0x2E44 0x20CDE +0x2E45 0x20CFF +0x2E48 0x20CDF +0x2E49 0x20CE0 +0x2E4B 0x20CE1 +0x2E4C 0x20CE2 +0x2E4D 0x20CE3 +0x2E4E 0x20CE4 +0x2E4F 0x20CE5 +0x2E50 0x20CE6 +0x2E51 0x20CE7 +0x2E52 0x20CE8 +0x2E53 0x20CE9 +0x2E54 0x20CEA +0x2E55 0x21307 +0x2E56 0x21308 +0x2E57 0x21309 +0x2E58 0x2130A +0x2E59 0x2130B +0x2E5A 0x2130C +0x2E5B 0x2130D +0x2E5D 0x2131A +0x2E5E 0x2130E +0x2E5F 0x2130F +0x2E60 0x21310 +0x2E61 0x2131C +0x2E62 0x21527 +0x2E63 0x21566 +0x2E64 0x21598 +0x2E65 0x21599 +0x2E66 0x21633 +0x2E67 0x21624 +0x2E68 0x21625 +0x2E69 0x21626 +0x2E6C 0x2173E +0x2E6D 0x2F864 +0x2E6E 0x2173F +0x2E6F 0x21757 +0x2E70 0x21740 +0x2E71 0x21741 +0x2E72 0x21758 +0x2E73 0x21742 +0x2E74 0x21743 +0x2E75 0x21744 +0x2E76 0x21745 +0x2E77 0x21746 +0x2E79 0x21747 +0x2E7A 0x2196B +0x2E7B 0x2196C +0x2E7C 0x21A10 +0x2E7D 0x21A11 +0x2F21 0x21B75 +0x2F22 0x21BEF +0x2F23 0x21C6A +0x2F24 0x21C6B +0x2F26 0x21C6C +0x2F27 0x21C6D +0x2F28 0x21C6E +0x2F29 0x21DEF +0x2F2A 0x21DF0 +0x2F2B 0x21DF1 +0x2F2C 0x21DF2 +0x2F2D 0x21DF3 +0x2F2E 0x21DF4 +0x2F2F 0x21DF5 +0x2F30 0x21DFF +0x2F31 0x21DF6 +0x2F32 0x21E02 +0x2F33 0x21DF7 +0x2F34 0x22022 +0x2F35 0x220C4 +0x2F36 0x220C3 +0x2F37 0x22228 +0x2F39 0x22320 +0x2F3A 0x22325 +0x2F3B 0x22322 +0x2F3C 0x22323 +0x2F3D 0x223EB +0x2F3F 0x224F9 +0x2F40 0x224FA +0x2F41 0x22699 +0x2F42 0x2269A +0x2F43 0x2269B +0x2F44 0x22663 +0x2F46 0x2265E +0x2F47 0x2265F +0x2F48 0x22660 +0x2F49 0x2269C +0x2F4A 0x22661 +0x2F4B 0x2269D +0x2F4C 0x22B54 +0x2F4D 0x22B55 +0x2F4E 0x22B56 +0x2F4F 0x22B57 +0x2F50 0x22B58 +0x2F51 0x22B59 +0x2F52 0x22B5A +0x2F53 0x22B19 +0x2F54 0x22B6A +0x2F55 0x22B5B +0x2F56 0x22B5C +0x2F57 0x22B5D +0x2F58 0x22B66 +0x2F5A 0x22B5E +0x2F5B 0x22B5F +0x2F5C 0x22B1A +0x2F5D 0x22B60 +0x2F5E 0x22B61 +0x2F60 0x22B62 +0x2F61 0x22B1B +0x2F62 0x22B63 +0x2F63 0x26410 +0x2F64 0x26411 +0x2F65 0x2304C +0x2F66 0x2309B +0x2F67 0x230EB +0x2F68 0x230EC +0x2F69 0x230ED +0x2F6A 0x230EE +0x2F6B 0x231A3 +0x2F6C 0x231A8 +0x2F6D 0x231A6 +0x2F6F 0x2332F +0x2F70 0x23330 +0x2F71 0x23331 +0x2F72 0x23332 +0x2F73 0x23333 +0x2F74 0x2344F +0x2F75 0x23451 +0x2F76 0x23452 +0x2F77 0x2347D +0x2F78 0x23453 +0x2F79 0x23454 +0x2F7A 0x23455 +0x2F7B 0x23456 +0x2F7C 0x23457 +0x2F7D 0x23458 +0x2F7E 0x23459 +0x3021 0x2345A +0x3022 0x2345B +0x3023 0x2345C +0x3025 0x2345D +0x3026 0x2345E +0x3027 0x2345F +0x3028 0x2346F +0x3029 0x23460 +0x302A 0x23461 +0x302B 0x23462 +0x302C 0x23463 +0x302D 0x23472 +0x302E 0x23464 +0x3030 0x2346E +0x3031 0x238B5 +0x3032 0x23B65 +0x3033 0x23B66 +0x3034 0x23B67 +0x3035 0x23B68 +0x3036 0x23B69 +0x3037 0x23B6A +0x3038 0x23B6B +0x3039 0x23B6C +0x303A 0x23D0E +0x303B 0x23D43 +0x303D 0x23D0F +0x303E 0x23D44 +0x303F 0x23D45 +0x3040 0x23D46 +0x3041 0x23D47 +0x3042 0x23D48 +0x3043 0x23D49 +0x3044 0x23D10 +0x3045 0x23D4A +0x3046 0x23D4B +0x3047 0x23D4C +0x3048 0x23D4D +0x304A 0x23D4E +0x304B 0x23D4F +0x304C 0x23D50 +0x304D 0x23D51 +0x304E 0x23D52 +0x304F 0x23D53 +0x3050 0x23D54 +0x3051 0x23D55 +0x3052 0x23D56 +0x3053 0x23D57 +0x3054 0x23D58 +0x3055 0x23D59 +0x3056 0x23D5A +0x3057 0x23D1D +0x3058 0x23D5B +0x3059 0x23D5C +0x305A 0x23D5D +0x305B 0x2F906 +0x305D 0x241FE +0x305E 0x241FF +0x305F 0x24200 +0x3060 0x24201 +0x3061 0x24202 +0x3062 0x24203 +0x3063 0x24204 +0x3064 0x24205 +0x3065 0x24206 +0x3066 0x24207 +0x3067 0x24218 +0x3068 0x24208 +0x3069 0x24209 +0x306A 0x241F3 +0x306B 0x2420A +0x306C 0x2420B +0x306D 0x2421B +0x306E 0x2420C +0x306F 0x2420D +0x3070 0x2420E +0x3071 0x2420F +0x3072 0x24210 +0x3073 0x2450F +0x3074 0x24561 +0x3075 0x24579 +0x3076 0x247C1 +0x3077 0x247AC +0x3078 0x247AD +0x3079 0x24943 +0x307A 0x24944 +0x307B 0x24945 +0x307C 0x24946 +0x307D 0x24947 +0x307E 0x24948 +0x3121 0x24949 +0x3122 0x24964 +0x3123 0x2494A +0x3124 0x2494B +0x3125 0x2494C +0x3126 0x2494D +0x3128 0x2F92D +0x3129 0x24B39 +0x312A 0x24C57 +0x312B 0x24C58 +0x312C 0x24C59 +0x312D 0x24C5F +0x312E 0x24C5A +0x312F 0x24D6A +0x3130 0x24F2B +0x3131 0x24F5D +0x3132 0x24F5E +0x3133 0x24F5F +0x3135 0x24F60 +0x3136 0x24F61 +0x3137 0x25058 +0x3138 0x25059 +0x3139 0x2514A +0x313A 0x2514B +0x313B 0x2514C +0x313C 0x2514D +0x313D 0x2514E +0x313E 0x25457 +0x313F 0x253B3 +0x3140 0x253B4 +0x3141 0x2546E +0x3142 0x2545B +0x3143 0x2545C +0x3145 0x2545D +0x3146 0x2545E +0x3148 0x2546C +0x3149 0x2563D +0x314A 0x25654 +0x314B 0x2563E +0x314C 0x25655 +0x314D 0x25656 +0x314E 0x2563F +0x314F 0x25657 +0x3150 0x25658 +0x3151 0x25659 +0x3152 0x2565A +0x3153 0x2565B +0x3154 0x2565C +0x3155 0x25788 +0x3156 0x25789 +0x3158 0x25958 +0x3159 0x25959 +0x315A 0x2595A +0x315C 0x25A67 +0x315D 0x25A68 +0x315E 0x25A69 +0x315F 0x25A6A +0x3161 0x25A6B +0x3162 0x25A6C +0x3163 0x25AFE +0x3164 0x25AFF +0x3165 0x25B00 +0x3166 0x25B01 +0x3167 0x25B02 +0x3168 0x25B03 +0x3169 0x25B04 +0x316A 0x25B05 +0x316B 0x25E39 +0x316C 0x25E3A +0x316D 0x25E3B +0x316E 0x25E3C +0x3171 0x25FB2 +0x3172 0x25FB3 +0x3173 0x25FB4 +0x3174 0x25FB5 +0x3175 0x25FB6 +0x3176 0x25FB7 +0x3177 0x25FB8 +0x3179 0x262A2 +0x317A 0x26361 +0x317B 0x26362 +0x317C 0x26414 +0x317E 0x264EB +0x3221 0x26542 +0x3222 0x26548 +0x3224 0x26543 +0x3225 0x2654E +0x3226 0x26544 +0x3227 0x26545 +0x3228 0x266B4 +0x3229 0x266B5 +0x322D 0x266B6 +0x322F 0x268E1 +0x3230 0x26905 +0x3233 0x26B9A +0x3235 0x26B9B +0x3236 0x26B9C +0x3237 0x26B9D +0x3238 0x26B9E +0x3239 0x26B9F +0x323A 0x2F99A +0x323B 0x26BA0 +0x323C 0x26BA1 +0x323D 0x26BA2 +0x323E 0x26BB5 +0x323F 0x26BA3 +0x3240 0x26BA4 +0x3242 0x26BA5 +0x3243 0x26BA6 +0x3244 0x26BA7 +0x3245 0x26BA8 +0x3246 0x26BAF +0x3247 0x26BA9 +0x3248 0x26BAA +0x3249 0x26BAB +0x324A 0x26BAC +0x324B 0x26BAD +0x324C 0x26BB3 +0x324E 0x271A0 +0x324F 0x27256 +0x3250 0x27634 +0x3252 0x2763C +0x3253 0x2780C +0x3255 0x27C3E +0x3256 0x27CA3 +0x3257 0x27D30 +0x3258 0x27D31 +0x3259 0x27E97 +0x325A 0x27E98 +0x325B 0x27E99 +0x325C 0x27E9A +0x325D 0x27E9B +0x325E 0x282B2 +0x325F 0x282AB +0x3260 0x282AC +0x3261 0x286FC +0x3262 0x286E8 +0x3263 0x286E9 +0x3264 0x286EA +0x3265 0x287F1 +0x3266 0x2893F +0x3267 0x28CCE +0x3268 0x28E6D +0x3269 0x28E6E +0x326A 0x28E6F +0x326B 0x28E70 +0x326C 0x28E71 +0x326D 0x28E72 +0x326E 0x28E73 +0x3270 0x29078 +0x3271 0x2983A +0x3272 0x20167 +0x3274 0x20164 +0x3275 0x20165 +0x3276 0x20307 +0x3277 0x202C4 +0x3278 0x202C5 +0x3279 0x202C6 +0x327A 0x202C7 +0x327B 0x202C8 +0x327C 0x202C9 +0x327D 0x202E5 +0x327E 0x202CA +0x3321 0x202CB +0x3323 0x202CC +0x3324 0x202CD +0x3325 0x202CE +0x3326 0x202CF +0x3327 0x202D0 +0x3328 0x20497 +0x3329 0x2049A +0x332A 0x2049B +0x332B 0x205EA +0x332C 0x205EC +0x332D 0x205ED +0x332E 0x205F7 +0x332F 0x205EE +0x3330 0x205EF +0x3331 0x2065B +0x3332 0x2065C +0x3333 0x2065D +0x3334 0x2076D +0x3335 0x2076E +0x3337 0x2076F +0x3338 0x20881 +0x3339 0x20882 +0x333A 0x2094F +0x333B 0x209AD +0x333C 0x2870A +0x333D 0x20A7E +0x333E 0x20B69 +0x333F 0x20D54 +0x3340 0x20D55 +0x3341 0x20D56 +0x3342 0x20D57 +0x3344 0x20D58 +0x3345 0x20D59 +0x3346 0x20D5A +0x3347 0x20D5B +0x3348 0x20D5C +0x3349 0x20D5D +0x334C 0x20D5E +0x334D 0x20D5F +0x334E 0x2133B +0x334F 0x21336 +0x3350 0x2133C +0x3351 0x2133D +0x3352 0x2133E +0x3353 0x2133F +0x3354 0x21340 +0x3355 0x21341 +0x3356 0x21342 +0x3358 0x21343 +0x3359 0x21344 +0x335A 0x21345 +0x335B 0x21337 +0x335E 0x21346 +0x335F 0x21347 +0x3360 0x21348 +0x3361 0x21349 +0x3362 0x2152D +0x3363 0x215A5 +0x3364 0x2163D +0x3365 0x2163F +0x3366 0x2196E +0x3367 0x217E7 +0x3368 0x21775 +0x3369 0x21776 +0x336A 0x21777 +0x336B 0x21778 +0x336C 0x21779 +0x336D 0x2177A +0x336E 0x2177B +0x336F 0x2177C +0x3370 0x2178E +0x3371 0x2177D +0x3372 0x2177E +0x3374 0x2177F +0x3375 0x21780 +0x3376 0x21781 +0x3377 0x21782 +0x3378 0x21783 +0x3379 0x21784 +0x337A 0x21785 +0x337B 0x21786 +0x337C 0x21787 +0x337D 0x21788 +0x337E 0x21789 +0x3421 0x2178A +0x3422 0x2178B +0x3423 0x2178C +0x3424 0x2196F +0x3425 0x21970 +0x3426 0x21971 +0x3427 0x21972 +0x3428 0x21A2A +0x3429 0x21A2B +0x342A 0x21A2C +0x342B 0x21A2D +0x342C 0x21A2E +0x342D 0x21A2F +0x342E 0x21A30 +0x342F 0x21A31 +0x3430 0x21B83 +0x3431 0x21C84 +0x3432 0x21C85 +0x3433 0x21C93 +0x3435 0x21C86 +0x3436 0x21C87 +0x3437 0x21C88 +0x3438 0x21C89 +0x3439 0x21C8A +0x343A 0x21C8B +0x343B 0x21E36 +0x343C 0x21E38 +0x343D 0x21E39 +0x343E 0x21E3A +0x3440 0x21E3B +0x3441 0x21E3C +0x3442 0x21E3D +0x3443 0x21E3E +0x3444 0x21E3F +0x3446 0x21E40 +0x3447 0x21E41 +0x3448 0x21E42 +0x3449 0x220DE +0x344A 0x220DF +0x344B 0x220E0 +0x344C 0x220E1 +0x344D 0x2224A +0x344E 0x2224B +0x344F 0x2224C +0x3450 0x2224D +0x3451 0x2224E +0x3452 0x2224F +0x3453 0x22250 +0x3454 0x22327 +0x3455 0x223F9 +0x3456 0x223FA +0x3457 0x223FB +0x3458 0x22498 +0x3459 0x22499 +0x345A 0x2249A +0x345C 0x2251E +0x345D 0x2269E +0x345E 0x226F7 +0x345F 0x2269F +0x3460 0x226A0 +0x3461 0x226F0 +0x3462 0x226F8 +0x3463 0x226F9 +0x3464 0x226A1 +0x3465 0x226A2 +0x3466 0x226A3 +0x3467 0x226A4 +0x3468 0x226A5 +0x3469 0x226FA +0x346A 0x226FB +0x346B 0x226FC +0x346C 0x226FD +0x346D 0x226FE +0x346E 0x2271F +0x346F 0x226FF +0x3470 0x22700 +0x3471 0x2278C +0x3472 0x22701 +0x3473 0x229C2 +0x3474 0x229C3 +0x3476 0x229D3 +0x3477 0x22A4E +0x3478 0x22BAF +0x3479 0x22BB0 +0x347A 0x22BB1 +0x347B 0x22BB2 +0x347C 0x22BB3 +0x347D 0x22BC6 +0x347E 0x22BB4 +0x3522 0x22BB5 +0x3523 0x22BB6 +0x3524 0x22BB7 +0x3525 0x22BB8 +0x3526 0x22BB9 +0x3527 0x22BBA +0x3528 0x22BBB +0x3529 0x22BBC +0x352A 0x22BBD +0x352B 0x22BBE +0x352C 0x22BBF +0x352D 0x22BC1 +0x352E 0x22BC0 +0x352F 0x22BC2 +0x3530 0x22BC3 +0x3531 0x22F51 +0x3532 0x22F52 +0x3533 0x22F53 +0x3534 0x22F54 +0x3535 0x22F55 +0x3536 0x2305A +0x3537 0x23050 +0x3538 0x23051 +0x3539 0x23078 +0x353A 0x230F8 +0x353B 0x230F9 +0x353C 0x231C6 +0x353D 0x231CB +0x353E 0x231CC +0x353F 0x231CD +0x3540 0x231CE +0x3541 0x231CF +0x3542 0x231D0 +0x3543 0x231D1 +0x3544 0x231D2 +0x3545 0x231D3 +0x3546 0x231D4 +0x3547 0x231D5 +0x3549 0x23337 +0x354A 0x23338 +0x354B 0x23373 +0x354C 0x23490 +0x354D 0x23491 +0x354E 0x234BF +0x354F 0x23492 +0x3550 0x23493 +0x3551 0x23494 +0x3552 0x23495 +0x3553 0x23496 +0x3554 0x23497 +0x3555 0x23498 +0x3556 0x23499 +0x3558 0x2349A +0x3559 0x2349B +0x355A 0x2349C +0x355B 0x2349D +0x355C 0x2349E +0x355D 0x2349F +0x355E 0x234A0 +0x355F 0x234A1 +0x3560 0x234A2 +0x3561 0x234A3 +0x3562 0x234A4 +0x3563 0x234A5 +0x3565 0x234A6 +0x3566 0x234A7 +0x3567 0x238BF +0x3568 0x238C0 +0x3569 0x238C1 +0x356A 0x238C2 +0x356B 0x238C3 +0x356C 0x238C4 +0x356D 0x238C5 +0x356E 0x238C6 +0x356F 0x23975 +0x3570 0x23A43 +0x3571 0x23A12 +0x3572 0x23A9F +0x3573 0x23A91 +0x3574 0x2F8F6 +0x3575 0x23A92 +0x3576 0x23A93 +0x3577 0x23A94 +0x3578 0x23B7E +0x3579 0x23B7F +0x357A 0x23B80 +0x357B 0x23B81 +0x357C 0x23B82 +0x357D 0x23C4C +0x357E 0x23C63 +0x3621 0x23DC0 +0x3622 0x23DC1 +0x3623 0x23DC2 +0x3624 0x2423A +0x3625 0x23DC3 +0x3626 0x23DC4 +0x3627 0x23DC5 +0x3628 0x23DC6 +0x362A 0x23DC7 +0x362C 0x23DC8 +0x362D 0x23D73 +0x362E 0x23DC9 +0x362F 0x23DCA +0x3630 0x23DCB +0x3631 0x23DCC +0x3632 0x23DCD +0x3636 0x23DCE +0x3637 0x23DCF +0x3638 0x23DD0 +0x3639 0x23DD1 +0x363A 0x23DD2 +0x363B 0x23DD3 +0x363C 0x23DD4 +0x363D 0x23DD5 +0x363E 0x2423B +0x363F 0x2423C +0x3640 0x2423D +0x3641 0x2423E +0x3643 0x2423F +0x3644 0x24240 +0x3645 0x24241 +0x3646 0x24242 +0x3647 0x24243 +0x3649 0x24244 +0x364A 0x24245 +0x364B 0x24259 +0x364C 0x24246 +0x364D 0x24247 +0x364E 0x24248 +0x3650 0x24249 +0x3651 0x24513 +0x3652 0x24582 +0x3653 0x24583 +0x3654 0x24666 +0x3655 0x24667 +0x3656 0x24965 +0x3658 0x24966 +0x365A 0x24975 +0x365B 0x24974 +0x365C 0x24967 +0x365D 0x2496D +0x365E 0x24976 +0x365F 0x24968 +0x3660 0x24969 +0x3661 0x2496A +0x3662 0x2496B +0x3663 0x2494F +0x3664 0x2496C +0x3665 0x24AF8 +0x3666 0x24B45 +0x3668 0x24B46 +0x3669 0x24BE4 +0x366A 0x24C85 +0x366B 0x24C6F +0x366C 0x24C70 +0x366D 0x24D82 +0x366E 0x24D83 +0x366F 0x24D84 +0x3670 0x24D8B +0x3671 0x24F2D +0x3672 0x24F68 +0x3673 0x24F69 +0x3674 0x24F77 +0x3675 0x24F64 +0x3676 0x24F6A +0x3678 0x24FF2 +0x3679 0x24FE2 +0x367A 0x25063 +0x367B 0x25064 +0x367C 0x25065 +0x367D 0x25066 +0x3721 0x25067 +0x3722 0x25068 +0x3725 0x25172 +0x3726 0x2517D +0x3727 0x25369 +0x3728 0x25484 +0x3729 0x25486 +0x372A 0x25487 +0x372B 0x25488 +0x372C 0x2549E +0x372E 0x25489 +0x372F 0x2548A +0x3730 0x25496 +0x3731 0x2548B +0x3732 0x2548C +0x3733 0x2548D +0x3734 0x25679 +0x3735 0x25683 +0x3736 0x2567A +0x3737 0x2565D +0x3738 0x2567B +0x373A 0x2579F +0x373C 0x257A0 +0x373D 0x257A1 +0x373E 0x257A2 +0x3740 0x2596A +0x3741 0x2596B +0x3742 0x2596C +0x3743 0x2596D +0x3744 0x2596E +0x3745 0x25A78 +0x3747 0x25A79 +0x3748 0x25A7C +0x3749 0x25B21 +0x374A 0x25B22 +0x374B 0x25B23 +0x374C 0x25B24 +0x374E 0x25B25 +0x374F 0x25B26 +0x3750 0x25E51 +0x3751 0x25E52 +0x3752 0x25E56 +0x3755 0x25FE1 +0x3758 0x25FD6 +0x3759 0x25FD7 +0x375A 0x25FD8 +0x375B 0x25FD9 +0x375C 0x262B5 +0x375D 0x2636C +0x375E 0x2636F +0x375F 0x26370 +0x3760 0x264BC +0x3761 0x264BD +0x3762 0x264ED +0x3763 0x2655B +0x3764 0x2655C +0x3765 0x2655D +0x3766 0x2655E +0x3767 0x26686 +0x3768 0x26687 +0x3769 0x266ED +0x376B 0x266EE +0x376D 0x2690E +0x376E 0x2690F +0x3770 0x26A2D +0x3771 0x26A2A +0x3772 0x26A2E +0x3773 0x26ACC +0x3774 0x26BF9 +0x3775 0x26BFA +0x3776 0x26BFB +0x3777 0x26BFC +0x3779 0x26BFD +0x377A 0x26C1B +0x377B 0x26BFE +0x377C 0x26BFF +0x377D 0x26C00 +0x377E 0x26C01 +0x3821 0x26C02 +0x3822 0x26C03 +0x3823 0x26C21 +0x3824 0x26C04 +0x3825 0x26C05 +0x3826 0x26C06 +0x3827 0x26C07 +0x3828 0x26C08 +0x3829 0x26C09 +0x382A 0x26C0A +0x382B 0x26C0B +0x382C 0x26C0C +0x382D 0x26C0D +0x382E 0x26C0E +0x382F 0x26C0F +0x3830 0x26C10 +0x3831 0x26C11 +0x3832 0x26C12 +0x3833 0x26C13 +0x3834 0x26C14 +0x3835 0x26C15 +0x3836 0x2727B +0x3837 0x2727C +0x3838 0x2727D +0x3839 0x2727E +0x383B 0x2727F +0x383C 0x27280 +0x383D 0x27266 +0x383E 0x27281 +0x383F 0x27282 +0x3840 0x27283 +0x3841 0x275B2 +0x3843 0x2767F +0x3844 0x27672 +0x3845 0x2765A +0x3846 0x277EB +0x3847 0x27815 +0x3849 0x27816 +0x384A 0x2F9CA +0x384B 0x27817 +0x384D 0x278C5 +0x384E 0x278C6 +0x384F 0x278C7 +0x3850 0x27988 +0x3851 0x27989 +0x3853 0x2798A +0x3854 0x2798B +0x3855 0x2798C +0x3856 0x2798D +0x3857 0x27BDF +0x3859 0x27D3B +0x385A 0x27D3C +0x385B 0x27D3D +0x385C 0x27D3E +0x385D 0x27D3F +0x385E 0x27D40 +0x385F 0x27D41 +0x3860 0x27D42 +0x3861 0x27E5C +0x3862 0x27EAF +0x3863 0x27EA9 +0x3864 0x27EAA +0x3865 0x27EAB +0x3866 0x27EAC +0x3867 0x27EB5 +0x3868 0x27EAD +0x3869 0x27EAE +0x386A 0x27FE2 +0x386B 0x28224 +0x386D 0x282C4 +0x386F 0x284EA +0x3870 0x284D3 +0x3871 0x284D4 +0x3872 0x284D5 +0x3873 0x28686 +0x3875 0x28687 +0x3876 0x286FD +0x3877 0x28805 +0x3878 0x28949 +0x3879 0x28C5F +0x387A 0x28CD3 +0x387B 0x28CD5 +0x387C 0x28E8A +0x387D 0x28E8B +0x387E 0x28E8C +0x3921 0x28E8D +0x3922 0x28E8E +0x3923 0x28E8F +0x3924 0x28E90 +0x3925 0x28E91 +0x3926 0x28E92 +0x3927 0x28E93 +0x3928 0x2907D +0x3929 0x2907E +0x392D 0x291EC +0x392E 0x2925B +0x392F 0x29C87 +0x3930 0x29C86 +0x3932 0x20046 +0x3933 0x20047 +0x3934 0x20102 +0x3935 0x2016D +0x3936 0x2016E +0x3937 0x2016F +0x3938 0x2030D +0x3939 0x2030E +0x393A 0x2030F +0x393B 0x20310 +0x393C 0x20311 +0x393D 0x20312 +0x393E 0x20313 +0x393F 0x20314 +0x3940 0x2049F +0x3941 0x204A0 +0x3942 0x204A1 +0x3943 0x204A3 +0x3944 0x20521 +0x3945 0x20522 +0x3946 0x2337C +0x3947 0x20595 +0x3948 0x20596 +0x3949 0x20661 +0x394A 0x20667 +0x394B 0x20791 +0x394C 0x20792 +0x394D 0x20793 +0x394E 0x20794 +0x394F 0x2088A +0x3950 0x2088B +0x3951 0x208F7 +0x3952 0x20924 +0x3953 0x209B0 +0x3954 0x209B1 +0x3955 0x20A8E +0x3956 0x20B04 +0x3957 0x20B6A +0x3958 0x20B6B +0x3959 0x20B6C +0x395A 0x20B6D +0x395B 0x20DE8 +0x395C 0x20E0C +0x395D 0x20DE9 +0x395E 0x20DEA +0x395F 0x20E0D +0x3961 0x20DEB +0x3962 0x20DEC +0x3963 0x20DED +0x3964 0x20DEE +0x3965 0x20DEF +0x3966 0x20DF0 +0x3967 0x20DF1 +0x3968 0x20DF2 +0x3969 0x20E16 +0x396A 0x20DF3 +0x396B 0x20E04 +0x396C 0x20E1D +0x396D 0x20DF4 +0x396E 0x20DF5 +0x396F 0x20DF6 +0x3970 0x20DF7 +0x3972 0x21202 +0x3973 0x21203 +0x3974 0x21204 +0x3975 0x2139A +0x3976 0x2137C +0x3977 0x213C5 +0x3978 0x2137D +0x3979 0x2137E +0x397A 0x2137F +0x397B 0x21380 +0x397C 0x21381 +0x3A21 0x21382 +0x3A22 0x21383 +0x3A23 0x21384 +0x3A24 0x21385 +0x3A25 0x21386 +0x3A26 0x21387 +0x3A27 0x215AE +0x3A28 0x2164D +0x3A29 0x217B0 +0x3A2A 0x217DC +0x3A2B 0x217B6 +0x3A2C 0x217B7 +0x3A2D 0x217B8 +0x3A2E 0x217B9 +0x3A2F 0x217BA +0x3A30 0x217BB +0x3A31 0x217DB +0x3A32 0x217BC +0x3A33 0x217BD +0x3A34 0x217BE +0x3A36 0x217BF +0x3A37 0x217C0 +0x3A38 0x217C1 +0x3A39 0x217C2 +0x3A3A 0x217C3 +0x3A3B 0x217CE +0x3A3D 0x217D9 +0x3A3E 0x217C4 +0x3A3F 0x217C5 +0x3A40 0x217DA +0x3A41 0x217C6 +0x3A42 0x217C7 +0x3A43 0x217C8 +0x3A44 0x217C9 +0x3A45 0x217CA +0x3A46 0x2197E +0x3A47 0x2197B +0x3A48 0x21A4E +0x3A49 0x21A4F +0x3A4A 0x21A50 +0x3A4B 0x21A51 +0x3A4C 0x21A52 +0x3A4D 0x21A53 +0x3A4E 0x21A54 +0x3A4F 0x21A55 +0x3A50 0x21B8F +0x3A51 0x21BFC +0x3A52 0x21CA6 +0x3A53 0x21CA7 +0x3A54 0x21CA8 +0x3A55 0x21D23 +0x3A56 0x21E8B +0x3A58 0x21E8C +0x3A59 0x21E8D +0x3A5A 0x21E8E +0x3A5B 0x21E8F +0x3A5C 0x21EA4 +0x3A5D 0x20599 +0x3A5E 0x22024 +0x3A5F 0x22046 +0x3A60 0x22047 +0x3A61 0x22048 +0x3A62 0x220FD +0x3A63 0x220FE +0x3A65 0x2226E +0x3A66 0x2227C +0x3A67 0x2226F +0x3A68 0x22270 +0x3A69 0x22271 +0x3A6A 0x22272 +0x3A6B 0x22329 +0x3A6C 0x2232A +0x3A6D 0x2235F +0x3A6E 0x224A2 +0x3A6F 0x22530 +0x3A70 0x2252B +0x3A71 0x22761 +0x3A72 0x22702 +0x3A73 0x22703 +0x3A74 0x22704 +0x3A75 0x22705 +0x3A76 0x22706 +0x3A77 0x22707 +0x3A79 0x22708 +0x3A7A 0x22709 +0x3A7B 0x22762 +0x3A7C 0x2270A +0x3A7D 0x2270B +0x3A7E 0x2270C +0x3B21 0x2270D +0x3B22 0x2270E +0x3B23 0x22763 +0x3B24 0x22727 +0x3B25 0x2270F +0x3B27 0x2271B +0x3B28 0x22764 +0x3B29 0x22710 +0x3B2A 0x22711 +0x3B2B 0x22781 +0x3B2C 0x22712 +0x3B2D 0x22765 +0x3B2E 0x22713 +0x3B2F 0x229CE +0x3B30 0x22C29 +0x3B31 0x22BC4 +0x3B32 0x22C2A +0x3B34 0x22C2B +0x3B35 0x22C2C +0x3B36 0x22C2D +0x3B37 0x22C2E +0x3B38 0x22C2F +0x3B39 0x22C30 +0x3B3A 0x22C31 +0x3B3B 0x22C32 +0x3B3C 0x22C33 +0x3B3D 0x22C34 +0x3B3F 0x22C35 +0x3B40 0x22C36 +0x3B41 0x22BE3 +0x3B42 0x22C37 +0x3B43 0x22C38 +0x3B44 0x22C39 +0x3B45 0x22C3A +0x3B46 0x22C3B +0x3B47 0x22C4D +0x3B48 0x22C3C +0x3B49 0x22C3D +0x3B4A 0x22C3E +0x3B4C 0x22ED0 +0x3B4D 0x22ED1 +0x3B4E 0x23055 +0x3B4F 0x23102 +0x3B50 0x23104 +0x3B51 0x231FC +0x3B52 0x23207 +0x3B53 0x231FD +0x3B54 0x231FE +0x3B56 0x231FF +0x3B57 0x23200 +0x3B58 0x23208 +0x3B59 0x23201 +0x3B5A 0x23202 +0x3B5B 0x23235 +0x3B5C 0x23203 +0x3B5D 0x23204 +0x3B5F 0x2333B +0x3B60 0x23389 +0x3B61 0x23381 +0x3B62 0x23382 +0x3B63 0x26733 +0x3B64 0x234EB +0x3B65 0x234EC +0x3B67 0x234ED +0x3B68 0x234EE +0x3B69 0x234EF +0x3B6B 0x234F0 +0x3B6C 0x234F1 +0x3B6D 0x234F2 +0x3B6F 0x234F3 +0x3B71 0x234F4 +0x3B72 0x234F5 +0x3B73 0x2004B +0x3B74 0x234F6 +0x3B75 0x234F7 +0x3B76 0x234F8 +0x3B77 0x234F9 +0x3B78 0x234FA +0x3B79 0x234FB +0x3B7A 0x234FC +0x3B7B 0x234FD +0x3B7C 0x234FE +0x3B7D 0x234FF +0x3B7E 0x23500 +0x3C22 0x23501 +0x3C23 0x23502 +0x3C24 0x23503 +0x3C25 0x23504 +0x3C26 0x23505 +0x3C27 0x23506 +0x3C28 0x23507 +0x3C2A 0x23508 +0x3C2B 0x23509 +0x3C2C 0x2350A +0x3C2D 0x2350B +0x3C2E 0x2350C +0x3C2F 0x2350D +0x3C30 0x238D7 +0x3C31 0x238D8 +0x3C32 0x23A29 +0x3C33 0x23A9C +0x3C34 0x23AF8 +0x3C35 0x23B98 +0x3C36 0x23BA4 +0x3C37 0x23B99 +0x3C38 0x23B9A +0x3C39 0x23B9B +0x3C3A 0x23B97 +0x3C3B 0x23B9C +0x3C3D 0x23B9D +0x3C3F 0x23B9E +0x3C40 0x23B9F +0x3C41 0x23C65 +0x3C42 0x23DD6 +0x3C44 0x23E32 +0x3C45 0x23E33 +0x3C46 0x23E34 +0x3C48 0x23E35 +0x3C49 0x23E36 +0x3C4A 0x23E37 +0x3C4B 0x23DD7 +0x3C4D 0x23DD8 +0x3C4E 0x23E38 +0x3C4F 0x23E39 +0x3C50 0x23E3A +0x3C51 0x23E3B +0x3C52 0x23E3C +0x3C53 0x23E3D +0x3C54 0x23E3E +0x3C55 0x23E3F +0x3C56 0x23E40 +0x3C57 0x23DD9 +0x3C58 0x23E41 +0x3C59 0x23E42 +0x3C5B 0x23E43 +0x3C5C 0x23E44 +0x3C5E 0x2427C +0x3C5F 0x2427D +0x3C60 0x2427E +0x3C61 0x2427F +0x3C62 0x24280 +0x3C63 0x24281 +0x3C64 0x24282 +0x3C66 0x24283 +0x3C67 0x24284 +0x3C68 0x24285 +0x3C69 0x24286 +0x3C6A 0x242A5 +0x3C6B 0x24287 +0x3C6C 0x24288 +0x3C6D 0x24289 +0x3C6E 0x2428A +0x3C6F 0x2428B +0x3C70 0x2428C +0x3C71 0x2428D +0x3C72 0x2428E +0x3C75 0x2428F +0x3C77 0x24290 +0x3C78 0x24291 +0x3C79 0x24292 +0x3C7A 0x24293 +0x3C7B 0x24294 +0x3C7C 0x24295 +0x3D21 0x24296 +0x3D22 0x24556 +0x3D23 0x24557 +0x3D24 0x245E1 +0x3D25 0x2460E +0x3D26 0x2460F +0x3D27 0x2467A +0x3D28 0x2467B +0x3D29 0x2468B +0x3D2A 0x247F2 +0x3D2B 0x247F3 +0x3D2C 0x24993 +0x3D2D 0x24994 +0x3D2E 0x24995 +0x3D2F 0x24996 +0x3D30 0x24997 +0x3D31 0x249AD +0x3D32 0x24998 +0x3D33 0x249AB +0x3D34 0x2497B +0x3D35 0x24999 +0x3D36 0x2499A +0x3D37 0x2499B +0x3D38 0x24985 +0x3D39 0x2499C +0x3D3A 0x2499D +0x3D3D 0x249AC +0x3D3E 0x24979 +0x3D3F 0x2499E +0x3D40 0x249A4 +0x3D41 0x24AFD +0x3D42 0x24BEB +0x3D43 0x24BEA +0x3D44 0x24C8F +0x3D45 0x24C90 +0x3D46 0x24C86 +0x3D47 0x24C87 +0x3D48 0x24C88 +0x3D49 0x24DAC +0x3D4A 0x24DAD +0x3D4B 0x24FEC +0x3D4C 0x25073 +0x3D4D 0x25074 +0x3D4F 0x251AA +0x3D50 0x251AB +0x3D51 0x251AC +0x3D52 0x253D1 +0x3D53 0x253D7 +0x3D54 0x254B9 +0x3D55 0x254BA +0x3D56 0x254BB +0x3D57 0x254BC +0x3D58 0x2568E +0x3D59 0x2568F +0x3D5A 0x25690 +0x3D5B 0x2567C +0x3D5C 0x25691 +0x3D5D 0x25692 +0x3D5E 0x25693 +0x3D5F 0x25694 +0x3D60 0x2F954 +0x3D61 0x2569A +0x3D62 0x25695 +0x3D63 0x25696 +0x3D64 0x25697 +0x3D65 0x257BD +0x3D66 0x257C7 +0x3D67 0x257BE +0x3D69 0x257BF +0x3D6B 0x25993 +0x3D6C 0x21A5E +0x3D6D 0x25A86 +0x3D6E 0x25A87 +0x3D6F 0x25A88 +0x3D70 0x25A89 +0x3D71 0x25B41 +0x3D72 0x25B42 +0x3D73 0x25B43 +0x3D74 0x25B44 +0x3D75 0x25B45 +0x3D76 0x25B46 +0x3D77 0x25B4A +0x3D78 0x25B47 +0x3D79 0x25B48 +0x3D7A 0x25B49 +0x3D7B 0x25E6B +0x3D7C 0x25E66 +0x3D7E 0x25E67 +0x3E22 0x25E68 +0x3E25 0x25FFD +0x3E26 0x25FFE +0x3E27 0x25FFF +0x3E28 0x26000 +0x3E29 0x26001 +0x3E2A 0x26002 +0x3E2B 0x26003 +0x3E2C 0x26004 +0x3E2D 0x26005 +0x3E2E 0x26006 +0x3E2F 0x26233 +0x3E30 0x262C2 +0x3E31 0x262D0 +0x3E32 0x2F974 +0x3E33 0x26395 +0x3E34 0x26396 +0x3E35 0x26435 +0x3E36 0x26436 +0x3E37 0x26567 +0x3E38 0x26568 +0x3E39 0x26569 +0x3E3A 0x2656A +0x3E3B 0x26572 +0x3E3C 0x2656B +0x3E3D 0x2656C +0x3E3E 0x2656D +0x3E3F 0x2656E +0x3E40 0x2656F +0x3E41 0x26722 +0x3E44 0x26723 +0x3E45 0x26741 +0x3E46 0x26724 +0x3E47 0x26725 +0x3E48 0x26726 +0x3E49 0x26727 +0x3E4A 0x26728 +0x3E4B 0x26729 +0x3E4C 0x266B7 +0x3E50 0x269DA +0x3E51 0x26ACF +0x3E52 0x26ADA +0x3E53 0x26C89 +0x3E54 0x26CB7 +0x3E55 0x26C8A +0x3E56 0x26C8B +0x3E57 0x26D5E +0x3E58 0x26C8C +0x3E5A 0x26C8D +0x3E5B 0x26C8E +0x3E5C 0x26C8F +0x3E5D 0x26C90 +0x3E5E 0x26C91 +0x3E5F 0x26C92 +0x3E60 0x26C93 +0x3E61 0x26C94 +0x3E62 0x26CB6 +0x3E63 0x26C95 +0x3E64 0x26C96 +0x3E65 0x26C97 +0x3E68 0x26C98 +0x3E69 0x26C99 +0x3E6A 0x26C9A +0x3E6D 0x26C9B +0x3E6E 0x26CBD +0x3E6F 0x26C9C +0x3E70 0x26C9D +0x3E71 0x26C9E +0x3E72 0x26C9F +0x3E73 0x26CC0 +0x3E74 0x26CA0 +0x3E75 0x26CA1 +0x3E76 0x26CA2 +0x3E77 0x26CA3 +0x3E78 0x26CA4 +0x3E79 0x26CA5 +0x3E7A 0x26CA6 +0x3E7B 0x26CA7 +0x3E7C 0x26CA8 +0x3E7D 0x26CA9 +0x3E7E 0x26CAA +0x3F22 0x271B4 +0x3F23 0x271B5 +0x3F24 0x271B6 +0x3F25 0x272B9 +0x3F26 0x272BA +0x3F27 0x272BB +0x3F28 0x27291 +0x3F29 0x272BC +0x3F2A 0x275EE +0x3F2B 0x275EF +0x3F2C 0x27696 +0x3F2D 0x27697 +0x3F2E 0x27673 +0x3F2F 0x27698 +0x3F30 0x27699 +0x3F31 0x277ED +0x3F32 0x277EE +0x3F33 0x278DE +0x3F34 0x279B0 +0x3F35 0x279B1 +0x3F36 0x279B2 +0x3F37 0x279B3 +0x3F38 0x279B4 +0x3F39 0x279B5 +0x3F3A 0x279B6 +0x3F3B 0x2F9CE +0x3F3C 0x279B7 +0x3F3D 0x27BE3 +0x3F3E 0x27CB9 +0x3F3F 0x27D55 +0x3F40 0x27D7E +0x3F41 0x27D56 +0x3F42 0x27D57 +0x3F43 0x27D58 +0x3F44 0x27D59 +0x3F45 0x27D5A +0x3F47 0x27EC4 +0x3F48 0x27EC5 +0x3F49 0x27EC6 +0x3F4A 0x27EC7 +0x3F4B 0x27EC8 +0x3F4C 0x27EC9 +0x3F4D 0x27EEE +0x3F4E 0x27ECF +0x3F4F 0x27ECA +0x3F50 0x27ECB +0x3F51 0x27ECC +0x3F52 0x28009 +0x3F53 0x2F9DA +0x3F54 0x28003 +0x3F55 0x2822F +0x3F56 0x28230 +0x3F57 0x28231 +0x3F58 0x28232 +0x3F59 0x2850E +0x3F5A 0x2850F +0x3F5B 0x28510 +0x3F5C 0x28511 +0x3F5D 0x28512 +0x3F5F 0x28513 +0x3F60 0x28514 +0x3F61 0x28515 +0x3F62 0x284FF +0x3F63 0x2871F +0x3F64 0x28720 +0x3F65 0x28721 +0x3F66 0x2872D +0x3F68 0x2881B +0x3F69 0x2881C +0x3F6A 0x2881D +0x3F6B 0x2881E +0x3F6C 0x28953 +0x3F6D 0x28954 +0x3F6E 0x28955 +0x3F6F 0x28956 +0x3F70 0x28964 +0x3F71 0x28959 +0x3F72 0x28957 +0x3F74 0x28958 +0x3F75 0x28C6B +0x3F78 0x28CE7 +0x3F79 0x28CE8 +0x3F7A 0x28CE9 +0x3F7B 0x28CEA +0x3F7C 0x28CEB +0x3F7D 0x28CEC +0x4021 0x28CED +0x4022 0x28EB1 +0x4023 0x28EB4 +0x4025 0x2908A +0x4026 0x2908D +0x4027 0x2908C +0x4028 0x291F2 +0x4029 0x291F3 +0x402B 0x22108 +0x402C 0x29417 +0x402E 0x2959F +0x402F 0x296A0 +0x4031 0x2986D +0x4032 0x2307D +0x4033 0x29F90 +0x4034 0x2A5C4 +0x4035 0x2004C +0x4036 0x20174 +0x4037 0x20175 +0x4038 0x20176 +0x4039 0x20349 +0x403A 0x2034A +0x403B 0x2034B +0x403C 0x2034C +0x403D 0x2034D +0x403E 0x2034E +0x403F 0x2034F +0x4040 0x20350 +0x4041 0x20351 +0x4042 0x20352 +0x4043 0x20353 +0x4044 0x20354 +0x4045 0x20355 +0x4046 0x20356 +0x4047 0x204A4 +0x4048 0x204A9 +0x4049 0x2052A +0x404A 0x2052B +0x404B 0x207B3 +0x404C 0x207C1 +0x404D 0x20898 +0x404E 0x208FB +0x404F 0x208FC +0x4050 0x209BC +0x4051 0x20A96 +0x4052 0x20B0A +0x4054 0x20EA2 +0x4056 0x20E81 +0x4057 0x20E82 +0x4058 0x20E83 +0x4059 0x20E84 +0x405A 0x20E85 +0x405B 0x20E86 +0x405C 0x20E87 +0x405D 0x20E88 +0x405E 0x20E89 +0x405F 0x20E8A +0x4060 0x20E8B +0x4061 0x20E8C +0x4063 0x20E8D +0x4064 0x20ED1 +0x4065 0x21214 +0x4066 0x213C9 +0x4067 0x213CA +0x4068 0x213CB +0x4069 0x29AFD +0x406A 0x213CC +0x406B 0x213CD +0x406C 0x213CE +0x406D 0x213CF +0x406E 0x213D0 +0x406F 0x213D1 +0x4070 0x213D2 +0x4071 0x213D3 +0x4072 0x213D4 +0x4073 0x213D5 +0x4074 0x21571 +0x4075 0x2004D +0x4076 0x21662 +0x4077 0x2180E +0x4078 0x217FE +0x4079 0x217FF +0x407A 0x21800 +0x407C 0x21801 +0x407D 0x21802 +0x407E 0x21803 +0x4121 0x21815 +0x4122 0x21804 +0x4123 0x21805 +0x4125 0x21987 +0x4126 0x21989 +0x4127 0x21A6E +0x4128 0x21A6F +0x4129 0x21A70 +0x412A 0x21A71 +0x412B 0x2F86E +0x412C 0x21A72 +0x412D 0x21A73 +0x412E 0x21A74 +0x412F 0x21B9D +0x4130 0x21CB8 +0x4131 0x21CB9 +0x4132 0x21CBA +0x4133 0x21EC2 +0x4134 0x21EC3 +0x4135 0x21ED5 +0x4136 0x21EC4 +0x4137 0x21EC0 +0x4138 0x21EC5 +0x4139 0x21EC6 +0x413A 0x2228A +0x413B 0x2228B +0x413C 0x2228C +0x413D 0x22364 +0x413E 0x25B8C +0x4140 0x2240D +0x4141 0x224A8 +0x4142 0x2253B +0x4143 0x2253C +0x4144 0x2253D +0x4145 0x2253E +0x4146 0x2253F +0x4147 0x22540 +0x4148 0x22766 +0x4149 0x227CB +0x414A 0x227B7 +0x414B 0x227B8 +0x414C 0x227B9 +0x414D 0x227BA +0x414E 0x22767 +0x414F 0x227BB +0x4150 0x22768 +0x4151 0x22769 +0x4152 0x2276A +0x4153 0x227BC +0x4155 0x229DB +0x4156 0x22C81 +0x4157 0x22C82 +0x4158 0x22C83 +0x4159 0x22C84 +0x415A 0x22C85 +0x415B 0x22C86 +0x415C 0x22C87 +0x415D 0x22C88 +0x415E 0x22C89 +0x415F 0x2F8BF +0x4160 0x22C8A +0x4161 0x22C8B +0x4163 0x22C8C +0x4164 0x22C8D +0x4165 0x22C8E +0x4166 0x22C8F +0x4167 0x22C90 +0x4168 0x22CA1 +0x4169 0x22C91 +0x416A 0x22ED6 +0x416B 0x22F9F +0x416C 0x23058 +0x416D 0x23085 +0x416E 0x2310B +0x416F 0x2310C +0x4170 0x23237 +0x4171 0x23238 +0x4172 0x2F8CE +0x4173 0x23239 +0x4174 0x2323A +0x4175 0x2323B +0x4176 0x2323C +0x4177 0x2323D +0x4178 0x2323E +0x4179 0x23240 +0x417A 0x23241 +0x417B 0x23242 +0x417D 0x23243 +0x417E 0x2338A +0x4221 0x2338B +0x4222 0x23590 +0x4223 0x23559 +0x4224 0x2355B +0x4225 0x2355C +0x4226 0x2355D +0x4227 0x2355E +0x4229 0x2355F +0x422A 0x23560 +0x422B 0x23561 +0x422C 0x23562 +0x422D 0x23563 +0x422E 0x23564 +0x422F 0x23593 +0x4230 0x23565 +0x4231 0x23566 +0x4232 0x23567 +0x4233 0x23568 +0x4234 0x23569 +0x4235 0x2356A +0x4236 0x2356B +0x4237 0x23595 +0x4238 0x2356C +0x4239 0x2356D +0x423A 0x2356E +0x423B 0x2356F +0x423D 0x23570 +0x423E 0x23571 +0x423F 0x23572 +0x4240 0x23573 +0x4241 0x23574 +0x4242 0x23575 +0x4243 0x23576 +0x4244 0x23577 +0x4245 0x23578 +0x4246 0x23579 +0x4248 0x2357A +0x424A 0x2357B +0x424B 0x235A9 +0x424C 0x2357C +0x424D 0x238F1 +0x424E 0x238EB +0x424F 0x2398A +0x4250 0x23A3D +0x4251 0x23AA6 +0x4252 0x23AA7 +0x4253 0x23BBA +0x4255 0x23BBB +0x4256 0x23BBC +0x4257 0x23BBD +0x4258 0x23E91 +0x4259 0x23E92 +0x425A 0x23E93 +0x425B 0x23E94 +0x425C 0x23E95 +0x425D 0x23E96 +0x425E 0x23E97 +0x425F 0x23DDA +0x4260 0x23E98 +0x4261 0x23E99 +0x4262 0x23E9A +0x4265 0x23E9B +0x4266 0x23E9C +0x4267 0x23E9D +0x4268 0x23E9E +0x4269 0x23E9F +0x426A 0x23EA0 +0x426B 0x23EBF +0x426C 0x23EA1 +0x426D 0x23EA2 +0x426E 0x23EA3 +0x426F 0x23EA4 +0x4270 0x23EA5 +0x4271 0x23EA6 +0x4272 0x23EA7 +0x4273 0x23E5B +0x4274 0x2F90D +0x4275 0x23EA8 +0x4276 0x242CB +0x4279 0x242CC +0x427A 0x2434F +0x427B 0x242CD +0x427C 0x242CE +0x427D 0x242CF +0x427E 0x2434E +0x4321 0x242D0 +0x4322 0x242D1 +0x4323 0x242D2 +0x4325 0x242D3 +0x4326 0x242D4 +0x4327 0x242D5 +0x4328 0x242D6 +0x4329 0x242D7 +0x432A 0x242D8 +0x432B 0x242D9 +0x432C 0x242FA +0x432D 0x242DA +0x432E 0x242DB +0x432F 0x2F91C +0x4330 0x242DC +0x4333 0x242DD +0x4334 0x242DE +0x4335 0x242DF +0x4336 0x242E0 +0x4337 0x242E1 +0x4338 0x242E2 +0x4339 0x242E3 +0x433A 0x242E4 +0x433B 0x242E5 +0x433D 0x242E6 +0x433E 0x242E7 +0x433F 0x2458E +0x4340 0x24698 +0x4341 0x24699 +0x4343 0x2480A +0x4345 0x24826 +0x4346 0x24827 +0x4347 0x249BD +0x4348 0x249DF +0x434A 0x249BE +0x434B 0x249DE +0x434C 0x249BF +0x434D 0x249C0 +0x434E 0x249C1 +0x434F 0x249C2 +0x4350 0x2499F +0x4351 0x249C3 +0x4352 0x249C4 +0x4353 0x249C5 +0x4354 0x249C6 +0x4355 0x249C7 +0x4357 0x249C8 +0x4358 0x249C9 +0x4359 0x249E3 +0x435A 0x249CA +0x435B 0x249CB +0x435C 0x249CC +0x435D 0x249CD +0x435E 0x249CE +0x435F 0x249CF +0x4360 0x249D0 +0x4361 0x249D1 +0x4362 0x249D2 +0x4363 0x249D3 +0x4364 0x2F92F +0x4365 0x249D4 +0x4366 0x24B04 +0x4367 0x24B65 +0x4368 0x24BEE +0x4369 0x24CA0 +0x436A 0x24CA1 +0x436B 0x24DDD +0x436C 0x24DDE +0x436D 0x24F83 +0x436E 0x24FFA +0x436F 0x2507F +0x4370 0x25080 +0x4371 0x251E8 +0x4372 0x251E9 +0x4373 0x251EA +0x4374 0x235A6 +0x4375 0x253E1 +0x4377 0x254DB +0x4378 0x254DC +0x4379 0x254DD +0x437A 0x254DE +0x437B 0x254DF +0x437C 0x254E0 +0x437D 0x254E1 +0x437E 0x254E2 +0x4421 0x254E3 +0x4422 0x254E4 +0x4423 0x254E5 +0x4424 0x254E6 +0x4426 0x254E7 +0x4427 0x256B0 +0x4428 0x25698 +0x4429 0x256B1 +0x442A 0x25699 +0x442B 0x256B2 +0x442C 0x256B3 +0x442D 0x256B4 +0x442E 0x256B5 +0x442F 0x256B6 +0x4430 0x256B7 +0x4431 0x256B8 +0x4432 0x256B9 +0x4433 0x257E2 +0x4434 0x257E3 +0x4435 0x257E4 +0x4436 0x257E5 +0x4437 0x257E6 +0x4438 0x257E7 +0x4439 0x257E8 +0x443A 0x257E9 +0x443B 0x259AD +0x443C 0x259CF +0x443D 0x259AE +0x443E 0x259AF +0x443F 0x259B0 +0x4440 0x259B1 +0x4441 0x25A92 +0x4442 0x25A93 +0x4443 0x25A94 +0x4444 0x25B79 +0x4446 0x25B7A +0x4447 0x25B7B +0x4448 0x25B7C +0x4449 0x25B7D +0x444A 0x25B7E +0x444B 0x25B7F +0x444C 0x25B80 +0x444D 0x25B81 +0x444E 0x25B82 +0x444F 0x25B83 +0x4450 0x25B84 +0x4451 0x25E97 +0x4452 0x25E84 +0x4453 0x25E85 +0x4454 0x25E89 +0x4455 0x25E86 +0x4456 0x25E87 +0x4457 0x2602C +0x4458 0x2602D +0x4459 0x2602E +0x445A 0x2602F +0x445B 0x26030 +0x445C 0x26031 +0x445D 0x26032 +0x445E 0x26033 +0x445F 0x26034 +0x4460 0x26035 +0x4461 0x26036 +0x4462 0x26037 +0x4463 0x262D2 +0x4464 0x26444 +0x4465 0x26500 +0x4466 0x26583 +0x4467 0x26584 +0x4468 0x2F986 +0x4469 0x2677A +0x446A 0x2677B +0x446B 0x2677C +0x446C 0x2677D +0x446D 0x2677E +0x446F 0x2677F +0x4470 0x26787 +0x4471 0x26780 +0x4472 0x26A43 +0x4473 0x26D34 +0x4475 0x26D35 +0x4476 0x26D36 +0x4477 0x26D37 +0x4478 0x26D38 +0x4479 0x26D39 +0x447A 0x26D3A +0x447B 0x26D3B +0x447C 0x26D3C +0x447D 0x26D3D +0x447E 0x26D3E +0x4521 0x26D3F +0x4522 0x26D40 +0x4523 0x26D41 +0x4524 0x26D42 +0x4525 0x26D43 +0x4526 0x26D44 +0x4527 0x26D45 +0x4528 0x26D46 +0x4529 0x26D47 +0x452A 0x26D48 +0x452B 0x26D49 +0x452C 0x26D4A +0x452E 0x26D4B +0x452F 0x26D4C +0x4530 0x26D4D +0x4531 0x26D4E +0x4532 0x272E7 +0x4533 0x272E8 +0x4534 0x272E9 +0x4535 0x272EA +0x4536 0x272EB +0x4537 0x272EC +0x4538 0x272ED +0x4539 0x272EE +0x453A 0x275F7 +0x453B 0x2769A +0x453C 0x276CD +0x453D 0x2F9C8 +0x453E 0x276A3 +0x453F 0x276CE +0x4540 0x27831 +0x4541 0x27832 +0x4542 0x27833 +0x4543 0x279E4 +0x4545 0x279E5 +0x4546 0x279E6 +0x4547 0x27CC8 +0x4548 0x27D74 +0x4549 0x27D75 +0x454A 0x27D76 +0x454B 0x27D77 +0x454C 0x27D78 +0x454D 0x27D79 +0x454E 0x27D7A +0x454F 0x27E61 +0x4550 0x27EDF +0x4551 0x27EE0 +0x4552 0x27EE1 +0x4553 0x27EE2 +0x4554 0x27EE3 +0x4555 0x27EE4 +0x4556 0x27EE5 +0x4557 0x27EE6 +0x4559 0x28031 +0x455A 0x2823D +0x455B 0x2823E +0x455C 0x2823F +0x455D 0x282F4 +0x455E 0x282F5 +0x455F 0x282F6 +0x4561 0x28417 +0x4562 0x28541 +0x4563 0x28542 +0x4564 0x28543 +0x4565 0x28544 +0x4566 0x28545 +0x4567 0x28546 +0x4568 0x28547 +0x4569 0x28548 +0x456A 0x28549 +0x456B 0x2854A +0x456C 0x2854B +0x456E 0x286BA +0x456F 0x28744 +0x4570 0x2892A +0x4571 0x2896D +0x4573 0x2F9E7 +0x4574 0x2897E +0x4575 0x2896E +0x4576 0x2896F +0x4577 0x28970 +0x4578 0x28971 +0x4579 0x28976 +0x457A 0x28C79 +0x457D 0x28D04 +0x457E 0x28CF8 +0x4621 0x28D05 +0x4622 0x28EDA +0x4623 0x28EDB +0x4624 0x28EDC +0x4625 0x28EDD +0x4626 0x28EDE +0x4627 0x28EDF +0x4628 0x28EE0 +0x4629 0x28EE1 +0x462A 0x290C5 +0x462B 0x2909A +0x462C 0x2909B +0x462D 0x2909C +0x462E 0x291D8 +0x462F 0x291D9 +0x4630 0x291DA +0x4631 0x2926E +0x4633 0x2946B +0x4634 0x27D83 +0x4636 0x296D6 +0x4637 0x296BD +0x4639 0x2322E +0x463A 0x29AFC +0x463B 0x29D53 +0x463C 0x29DB7 +0x463D 0x2A28C +0x463E 0x2A38E +0x463F 0x2A2FF +0x4640 0x20076 +0x4641 0x20106 +0x4642 0x2017E +0x4643 0x20384 +0x4644 0x20385 +0x4645 0x20386 +0x4646 0x20387 +0x4647 0x20388 +0x4648 0x203A7 +0x4649 0x20389 +0x464A 0x2038A +0x464B 0x2038B +0x464C 0x2038C +0x464D 0x2038D +0x464E 0x2038E +0x464F 0x2038F +0x4650 0x203A3 +0x4651 0x20390 +0x4652 0x20391 +0x4653 0x20392 +0x4654 0x20393 +0x4655 0x203AC +0x4656 0x20394 +0x4657 0x20395 +0x4658 0x20396 +0x4659 0x204AA +0x465A 0x204AB +0x465B 0x2059E +0x465D 0x20608 +0x465E 0x20609 +0x465F 0x20668 +0x4660 0x20669 +0x4661 0x2066A +0x4662 0x2069A +0x4663 0x207D9 +0x4664 0x207DA +0x4665 0x207DB +0x4666 0x208A8 +0x4667 0x20901 +0x4668 0x20928 +0x4669 0x20977 +0x466A 0x209BD +0x466B 0x209BE +0x466C 0x20F60 +0x466D 0x20AA0 +0x466E 0x20AA2 +0x466F 0x20B0F +0x4670 0x20B85 +0x4671 0x20EFE +0x4672 0x20EFF +0x4673 0x20F00 +0x4674 0x20F01 +0x4675 0x20F16 +0x4676 0x20F02 +0x4677 0x20F03 +0x4678 0x20F04 +0x4679 0x20F05 +0x467A 0x20F06 +0x467B 0x20F07 +0x467C 0x20F08 +0x467D 0x20F22 +0x467E 0x20F09 +0x4721 0x20F0A +0x4722 0x20F0B +0x4723 0x20F0C +0x4724 0x20F14 +0x4725 0x20F29 +0x4726 0x20E6E +0x4727 0x20F0D +0x4728 0x20F0E +0x4729 0x20F0F +0x472A 0x20F10 +0x472B 0x20F11 +0x472C 0x20F12 +0x472D 0x20F13 +0x472E 0x2121B +0x472F 0x2121C +0x4730 0x2121D +0x4731 0x21413 +0x4732 0x213FF +0x4733 0x21400 +0x4734 0x21401 +0x4735 0x21402 +0x4736 0x21403 +0x4737 0x21404 +0x4738 0x2140A +0x4739 0x21405 +0x473A 0x21406 +0x473B 0x21407 +0x473C 0x21408 +0x473D 0x2153A +0x473E 0x21573 +0x473F 0x2166F +0x4740 0x21670 +0x4741 0x21671 +0x4742 0x20052 +0x4744 0x21A9A +0x4745 0x21860 +0x4746 0x2F869 +0x4747 0x2182B +0x4748 0x21824 +0x4749 0x2182C +0x474A 0x2182D +0x474B 0x2182E +0x474C 0x2182F +0x474D 0x21830 +0x474E 0x21831 +0x474F 0x21832 +0x4750 0x21833 +0x4751 0x21834 +0x4752 0x21835 +0x4753 0x21845 +0x4754 0x21836 +0x4755 0x21992 +0x4756 0x21993 +0x4757 0x21A88 +0x4758 0x21A89 +0x4759 0x21A8A +0x475A 0x21A8B +0x475B 0x21B3F +0x475D 0x21CCA +0x475E 0x21EF6 +0x475F 0x21EF7 +0x4760 0x21EF8 +0x4761 0x21EF9 +0x4762 0x2212B +0x4764 0x221A4 +0x4765 0x221CE +0x4767 0x2229E +0x4768 0x2229F +0x4769 0x222A0 +0x476A 0x222A1 +0x476B 0x222A2 +0x476C 0x222A3 +0x476D 0x222A4 +0x476E 0x222A5 +0x476F 0x222A6 +0x4770 0x22418 +0x4771 0x22560 +0x4772 0x22561 +0x4773 0x22562 +0x4774 0x22563 +0x4775 0x22564 +0x4776 0x227BD +0x4777 0x227BE +0x4778 0x2280B +0x4779 0x227BF +0x477A 0x227C0 +0x477C 0x2280C +0x477D 0x2278D +0x477E 0x2280D +0x4821 0x2280E +0x4822 0x2285E +0x4823 0x2280F +0x4824 0x22810 +0x4825 0x227C1 +0x4826 0x22811 +0x4828 0x227C2 +0x4829 0x229EA +0x482A 0x229EB +0x482B 0x22CE3 +0x482C 0x22CE4 +0x482D 0x22CE5 +0x482E 0x22CE6 +0x482F 0x22CE7 +0x4830 0x22C92 +0x4831 0x22D4A +0x4833 0x22CE8 +0x4834 0x22CE9 +0x4835 0x22CEA +0x4836 0x22D01 +0x4837 0x22CEB +0x4838 0x22CEC +0x4839 0x22CEF +0x483A 0x22CED +0x483B 0x22CEE +0x483C 0x22CF0 +0x483D 0x22CF1 +0x483E 0x22CF2 +0x483F 0x22CF3 +0x4840 0x22CF4 +0x4841 0x22CF5 +0x4842 0x22CF6 +0x4843 0x22CF7 +0x4844 0x22CF8 +0x4845 0x22CF9 +0x4846 0x22CFE +0x4847 0x22CFA +0x4848 0x22CFB +0x4849 0x22CFC +0x484A 0x23263 +0x484B 0x23264 +0x484C 0x23265 +0x484D 0x23266 +0x484E 0x23267 +0x484F 0x23268 +0x4850 0x2360B +0x4851 0x2360D +0x4853 0x2360E +0x4854 0x2360F +0x4856 0x23614 +0x4857 0x235D4 +0x4858 0x235D5 +0x4859 0x235D6 +0x485A 0x235D7 +0x485B 0x235D8 +0x485C 0x235D9 +0x485D 0x235DA +0x485E 0x235DB +0x485F 0x235DC +0x4860 0x235DD +0x4861 0x235DE +0x4862 0x235DF +0x4863 0x235E0 +0x4864 0x235E1 +0x4865 0x235E2 +0x4866 0x235E3 +0x4867 0x235E4 +0x4868 0x235E5 +0x4869 0x235E6 +0x486A 0x235E7 +0x486B 0x235E8 +0x486C 0x235E9 +0x486D 0x235EA +0x486E 0x235EB +0x486F 0x235EC +0x4870 0x236EC +0x4871 0x235ED +0x4872 0x235EE +0x4873 0x235EF +0x4874 0x23600 +0x4875 0x235F0 +0x4876 0x23904 +0x4878 0x23905 +0x4879 0x2F8F3 +0x487A 0x23AB5 +0x487B 0x2F8F9 +0x487C 0x23BD6 +0x487D 0x23BD7 +0x487E 0x23BD8 +0x4921 0x23BD9 +0x4922 0x23EA9 +0x4923 0x23F00 +0x4924 0x23F01 +0x4925 0x23F02 +0x4926 0x23F03 +0x4927 0x23F04 +0x4928 0x23F05 +0x4929 0x23F06 +0x492A 0x23F3F +0x492B 0x23F07 +0x492C 0x23F08 +0x492D 0x23F09 +0x492E 0x23F0A +0x492F 0x23EB6 +0x4930 0x23F0B +0x4931 0x23F0C +0x4934 0x23F0D +0x4936 0x23F0E +0x4937 0x23F0F +0x4938 0x23F10 +0x4939 0x23F11 +0x493A 0x23F12 +0x493B 0x23F35 +0x493C 0x23F13 +0x493D 0x23F14 +0x493E 0x23EAA +0x4940 0x23FC1 +0x4941 0x23F15 +0x4942 0x23F16 +0x4943 0x23F17 +0x4944 0x2431E +0x4945 0x2431F +0x4946 0x24320 +0x4947 0x24321 +0x4949 0x24322 +0x494A 0x24323 +0x494C 0x24324 +0x494D 0x24325 +0x494E 0x24326 +0x494F 0x24327 +0x4950 0x24328 +0x4951 0x24329 +0x4952 0x2432A +0x4953 0x2432B +0x4954 0x24307 +0x4955 0x2432C +0x4956 0x2432D +0x4957 0x2432E +0x495A 0x2432F +0x495B 0x24330 +0x495C 0x24348 +0x495D 0x24331 +0x495E 0x24332 +0x4960 0x24333 +0x4962 0x24334 +0x4963 0x24335 +0x4964 0x24336 +0x4965 0x24559 +0x4966 0x24591 +0x4967 0x245E7 +0x4968 0x246B8 +0x4969 0x246B9 +0x496A 0x246BA +0x496B 0x246BB +0x496C 0x246C8 +0x496D 0x2484D +0x496E 0x24889 +0x496F 0x24850 +0x4970 0x24828 +0x4971 0x249FB +0x4972 0x249FC +0x4973 0x249FD +0x4974 0x249FE +0x4975 0x249FF +0x4977 0x24A00 +0x4978 0x24A01 +0x4979 0x24A02 +0x497A 0x249E4 +0x497B 0x249E5 +0x497C 0x24A03 +0x497D 0x24A04 +0x497E 0x24A05 +0x4A21 0x24A06 +0x4A22 0x24A07 +0x4A23 0x24A13 +0x4A24 0x24A08 +0x4A25 0x24A09 +0x4A26 0x249E6 +0x4A27 0x24A0A +0x4A28 0x24A0B +0x4A29 0x24A0C +0x4A2A 0x24B0B +0x4A2B 0x24BF4 +0x4A2C 0x24C0A +0x4A2D 0x24CB1 +0x4A2E 0x24E1D +0x4A2F 0x2F93B +0x4A30 0x24F8B +0x4A31 0x24F8C +0x4A32 0x24F8F +0x4A33 0x24F8D +0x4A34 0x24F8E +0x4A35 0x25006 +0x4A36 0x25086 +0x4A37 0x25222 +0x4A38 0x25223 +0x4A39 0x25224 +0x4A3A 0x25225 +0x4A3B 0x25226 +0x4A3C 0x25227 +0x4A3D 0x25228 +0x4A3E 0x253F1 +0x4A40 0x25523 +0x4A41 0x25512 +0x4A43 0x25513 +0x4A44 0x25514 +0x4A45 0x25515 +0x4A46 0x25516 +0x4A47 0x25517 +0x4A48 0x25518 +0x4A49 0x25519 +0x4A4A 0x2554B +0x4A4B 0x2551A +0x4A4C 0x2551B +0x4A4D 0x2551C +0x4A4F 0x2551D +0x4A50 0x2551E +0x4A51 0x2551F +0x4A52 0x25520 +0x4A53 0x256CA +0x4A54 0x222AC +0x4A55 0x256CB +0x4A56 0x256CC +0x4A57 0x256CD +0x4A58 0x256CE +0x4A5A 0x256CF +0x4A5B 0x25810 +0x4A5C 0x25811 +0x4A5D 0x25812 +0x4A5E 0x25813 +0x4A5F 0x25814 +0x4A60 0x2580F +0x4A61 0x25815 +0x4A62 0x25816 +0x4A63 0x25817 +0x4A65 0x25818 +0x4A66 0x259C6 +0x4A67 0x25A9F +0x4A68 0x25AA0 +0x4A69 0x25AA4 +0x4A6A 0x25AA1 +0x4A6B 0x25BB5 +0x4A6C 0x25BB6 +0x4A6D 0x25BB7 +0x4A6E 0x25BB8 +0x4A6F 0x25BB9 +0x4A70 0x25BBA +0x4A71 0x25BD0 +0x4A72 0x25BC6 +0x4A73 0x25BBB +0x4A74 0x25BBC +0x4A75 0x25BBD +0x4A76 0x25BBE +0x4A77 0x25BBF +0x4A78 0x25BC0 +0x4A79 0x25BC1 +0x4A7A 0x25BC2 +0x4A7B 0x2F960 +0x4A7C 0x25EA7 +0x4A7D 0x25EA8 +0x4A7E 0x25EA9 +0x4B21 0x25EAA +0x4B22 0x25EAB +0x4B23 0x25EAC +0x4B24 0x25EBC +0x4B25 0x25EAD +0x4B26 0x25EAE +0x4B28 0x25EAF +0x4B29 0x25EB0 +0x4B2A 0x25EB1 +0x4B2C 0x25EB4 +0x4B2D 0x25EB2 +0x4B2E 0x26066 +0x4B2F 0x26067 +0x4B30 0x26068 +0x4B31 0x26069 +0x4B32 0x2606A +0x4B33 0x2606B +0x4B34 0x2606C +0x4B35 0x2606D +0x4B36 0x2606E +0x4B37 0x2606F +0x4B39 0x2623E +0x4B3A 0x2623F +0x4B3B 0x26240 +0x4B3C 0x262E8 +0x4B3D 0x26452 +0x4B3E 0x26453 +0x4B3F 0x26454 +0x4B40 0x26455 +0x4B41 0x26591 +0x4B42 0x26592 +0x4B43 0x26593 +0x4B44 0x26594 +0x4B45 0x26595 +0x4B46 0x26596 +0x4B47 0x26597 +0x4B48 0x26598 +0x4B4A 0x26599 +0x4B4B 0x2659A +0x4B4C 0x2659B +0x4B4D 0x267B7 +0x4B4E 0x267B8 +0x4B4F 0x267B9 +0x4B51 0x267BA +0x4B52 0x267BB +0x4B53 0x267BD +0x4B55 0x267BC +0x4B56 0x2F988 +0x4B57 0x2F987 +0x4B58 0x268EB +0x4B59 0x268EC +0x4B5A 0x26916 +0x4B5B 0x26944 +0x4B5C 0x269E3 +0x4B5D 0x26A58 +0x4B5E 0x26A53 +0x4B5F 0x26A54 +0x4B60 0x26AE0 +0x4B61 0x26DB1 +0x4B62 0x26DB2 +0x4B63 0x26DB3 +0x4B64 0x26DEA +0x4B66 0x26DB4 +0x4B67 0x26DF0 +0x4B68 0x26DB5 +0x4B69 0x26DB6 +0x4B6A 0x26DB7 +0x4B6B 0x26DB8 +0x4B6C 0x26DB9 +0x4B6D 0x26DBA +0x4B6E 0x26DBB +0x4B6F 0x26DBC +0x4B70 0x26DBD +0x4B71 0x26DBE +0x4B72 0x26DBF +0x4B73 0x26DC0 +0x4B74 0x26DC1 +0x4B75 0x26DC2 +0x4B76 0x26DC3 +0x4B78 0x26DC4 +0x4B79 0x26DC5 +0x4B7A 0x26DC6 +0x4B7B 0x26DFC +0x4B7C 0x26DC7 +0x4B7D 0x26DC8 +0x4B7E 0x26DC9 +0x4C21 0x26DCA +0x4C22 0x26DCB +0x4C23 0x26DCC +0x4C24 0x26E84 +0x4C25 0x26DCD +0x4C26 0x26DCE +0x4C27 0x26DCF +0x4C28 0x26DD0 +0x4C29 0x26DD1 +0x4C2A 0x26DD2 +0x4C2B 0x271CA +0x4C2C 0x271CB +0x4C2D 0x27336 +0x4C2E 0x27337 +0x4C2F 0x2739F +0x4C30 0x27338 +0x4C31 0x27339 +0x4C32 0x2733A +0x4C34 0x276BE +0x4C35 0x276F0 +0x4C36 0x276BF +0x4C37 0x276C0 +0x4C38 0x277F7 +0x4C39 0x277F8 +0x4C3A 0x277FA +0x4C3B 0x27843 +0x4C3C 0x27844 +0x4C3D 0x27A0F +0x4C3E 0x27A10 +0x4C3F 0x27A11 +0x4C40 0x27A12 +0x4C42 0x27A13 +0x4C43 0x27A14 +0x4C44 0x27A15 +0x4C45 0x27A16 +0x4C48 0x27CD3 +0x4C49 0x27CD7 +0x4C4B 0x27DB0 +0x4C4C 0x27D98 +0x4C4D 0x27D90 +0x4C4E 0x27D91 +0x4C4F 0x27D92 +0x4C50 0x27D97 +0x4C51 0x27D93 +0x4C52 0x27E64 +0x4C53 0x27F01 +0x4C54 0x27F02 +0x4C55 0x27F03 +0x4C56 0x27F04 +0x4C57 0x27F05 +0x4C58 0x27F06 +0x4C59 0x27F07 +0x4C5A 0x2805A +0x4C5B 0x2805B +0x4C5C 0x2824E +0x4C5D 0x2824F +0x4C5E 0x28250 +0x4C5F 0x28319 +0x4C60 0x2831A +0x4C61 0x2831B +0x4C63 0x2831C +0x4C65 0x28419 +0x4C66 0x2841A +0x4C68 0x2898A +0x4C69 0x2856E +0x4C6A 0x2856F +0x4C6C 0x28570 +0x4C6D 0x28571 +0x4C6E 0x28572 +0x4C6F 0x28573 +0x4C70 0x28574 +0x4C71 0x28575 +0x4C72 0x28576 +0x4C73 0x2883A +0x4C74 0x2883B +0x4C75 0x2883C +0x4C76 0x2885A +0x4C77 0x2883D +0x4C78 0x28842 +0x4C79 0x2898B +0x4C7A 0x289A0 +0x4C7B 0x2898C +0x4C7C 0x2898D +0x4C7D 0x2898E +0x4C7E 0x289AB +0x4D21 0x2898F +0x4D23 0x28990 +0x4D24 0x28991 +0x4D25 0x28992 +0x4D26 0x289AA +0x4D28 0x28993 +0x4D29 0x28994 +0x4D2A 0x2899E +0x4D2B 0x289A8 +0x4D2E 0x28F00 +0x4D2F 0x28F01 +0x4D30 0x28F02 +0x4D31 0x28F03 +0x4D32 0x28F04 +0x4D33 0x28F05 +0x4D34 0x28FC4 +0x4D35 0x28FC5 +0x4D37 0x290AE +0x4D38 0x290B2 +0x4D3B 0x291F7 +0x4D3C 0x29213 +0x4D3D 0x2939E +0x4D3E 0x29485 +0x4D3F 0x25380 +0x4D40 0x294C8 +0x4D41 0x29841 +0x4D42 0x29881 +0x4D43 0x29882 +0x4D44 0x29883 +0x4D45 0x29884 +0x4D46 0x29AC4 +0x4D47 0x29AC5 +0x4D48 0x29AC6 +0x4D49 0x29C95 +0x4D4A 0x29C96 +0x4D4B 0x29C97 +0x4D4C 0x29D58 +0x4D4D 0x29D59 +0x4D4F 0x29FA9 +0x4D50 0x29FAA +0x4D51 0x29FAB +0x4D52 0x2A28E +0x4D53 0x2A303 +0x4D54 0x2A3B3 +0x4D55 0x20B82 +0x4D56 0x20053 +0x4D57 0x20183 +0x4D58 0x20184 +0x4D59 0x20185 +0x4D5A 0x203CC +0x4D5B 0x203CD +0x4D5C 0x203CE +0x4D5D 0x203CF +0x4D5E 0x203D0 +0x4D60 0x203D1 +0x4D61 0x203D2 +0x4D62 0x203DA +0x4D63 0x204B3 +0x4D64 0x204B4 +0x4D66 0x20613 +0x4D67 0x2060E +0x4D68 0x2066B +0x4D69 0x20903 +0x4D6A 0x20961 +0x4D6B 0x209C1 +0x4D6C 0x209C2 +0x4D6D 0x20AB5 +0x4D6E 0x20140 +0x4D6F 0x20F98 +0x4D70 0x20F99 +0x4D71 0x20F9A +0x4D72 0x20F9B +0x4D73 0x20F9C +0x4D74 0x20F9D +0x4D75 0x20F9E +0x4D76 0x20F9F +0x4D77 0x20FEE +0x4D78 0x20FA0 +0x4D79 0x20FA1 +0x4D7A 0x20F86 +0x4D7B 0x21225 +0x4D7C 0x21434 +0x4D7D 0x21435 +0x4D7E 0x21451 +0x4E21 0x2142D +0x4E22 0x24362 +0x4E23 0x21454 +0x4E24 0x21452 +0x4E26 0x21436 +0x4E27 0x21437 +0x4E28 0x21438 +0x4E29 0x21439 +0x4E2A 0x2143A +0x4E2B 0x2143B +0x4E2C 0x21468 +0x4E2D 0x2143C +0x4E2F 0x21577 +0x4E30 0x23296 +0x4E31 0x2167E +0x4E32 0x2167F +0x4E33 0x21869 +0x4E34 0x2186A +0x4E35 0x2186B +0x4E36 0x2186C +0x4E37 0x2186D +0x4E38 0x2186E +0x4E39 0x2186F +0x4E3A 0x2185D +0x4E3B 0x21870 +0x4E3C 0x21885 +0x4E3D 0x21871 +0x4E3E 0x21872 +0x4E3F 0x21873 +0x4E40 0x21874 +0x4E41 0x21875 +0x4E42 0x21876 +0x4E43 0x21884 +0x4E44 0x21877 +0x4E45 0x21883 +0x4E46 0x2199A +0x4E47 0x21AA7 +0x4E48 0x21AA8 +0x4E49 0x21AA9 +0x4E4A 0x21AAA +0x4E4B 0x21AAB +0x4E4C 0x21AAC +0x4E4D 0x21AB7 +0x4E4E 0x21AAD +0x4E4F 0x21AAE +0x4E51 0x21B45 +0x4E52 0x21CD3 +0x4E53 0x21CD4 +0x4E54 0x21CD5 +0x4E55 0x21CD6 +0x4E56 0x21CD7 +0x4E57 0x21F26 +0x4E58 0x21F27 +0x4E59 0x21F28 +0x4E5B 0x21F29 +0x4E5C 0x21F2A +0x4E5D 0x22005 +0x4E5F 0x221D0 +0x4E60 0x222B7 +0x4E62 0x222B8 +0x4E63 0x222B9 +0x4E64 0x22422 +0x4E65 0x22423 +0x4E66 0x22573 +0x4E67 0x22574 +0x4E68 0x2288F +0x4E69 0x22812 +0x4E6A 0x22813 +0x4E6B 0x22814 +0x4E6C 0x22815 +0x4E6D 0x22816 +0x4E6E 0x22817 +0x4E6F 0x22818 +0x4E70 0x22861 +0x4E71 0x22866 +0x4E72 0x22867 +0x4E73 0x22819 +0x4E74 0x22868 +0x4E75 0x2281A +0x4E76 0x22869 +0x4E77 0x22A04 +0x4E78 0x22A05 +0x4E7A 0x22A06 +0x4E7B 0x229FD +0x4E7C 0x22D50 +0x4E7D 0x22D51 +0x4E7E 0x22D52 +0x4F21 0x22D53 +0x4F22 0x22D54 +0x4F23 0x22D55 +0x4F24 0x22D63 +0x4F25 0x2F8C4 +0x4F26 0x22D56 +0x4F27 0x22D57 +0x4F28 0x22D58 +0x4F29 0x22D59 +0x4F2A 0x22D5A +0x4F2B 0x22D5B +0x4F2D 0x22D5C +0x4F2E 0x22D5D +0x4F2F 0x22D5E +0x4F30 0x22D5F +0x4F31 0x22FD7 +0x4F33 0x23060 +0x4F34 0x23061 +0x4F35 0x23117 +0x4F36 0x23139 +0x4F37 0x2328F +0x4F38 0x232C8 +0x4F39 0x23290 +0x4F3A 0x23291 +0x4F3B 0x23398 +0x4F3C 0x23399 +0x4F3D 0x23644 +0x4F3E 0x23645 +0x4F3F 0x23646 +0x4F40 0x23659 +0x4F41 0x236EE +0x4F43 0x23647 +0x4F44 0x23648 +0x4F46 0x23649 +0x4F47 0x2364A +0x4F48 0x2364B +0x4F49 0x2364C +0x4F4A 0x2364D +0x4F4B 0x2364E +0x4F4C 0x2364F +0x4F4D 0x23650 +0x4F4E 0x23651 +0x4F4F 0x23652 +0x4F50 0x23653 +0x4F51 0x23654 +0x4F52 0x23655 +0x4F53 0x23656 +0x4F54 0x23915 +0x4F55 0x2399A +0x4F56 0x23A58 +0x4F57 0x23AFC +0x4F58 0x23AFD +0x4F59 0x23F86 +0x4F5A 0x23F87 +0x4F5B 0x23F88 +0x4F5C 0x23F89 +0x4F5D 0x23F8A +0x4F5E 0x23F8B +0x4F5F 0x23F8C +0x4F61 0x2401F +0x4F62 0x23F8D +0x4F63 0x23F8E +0x4F64 0x23F8F +0x4F65 0x23F90 +0x4F66 0x23F91 +0x4F67 0x23F92 +0x4F68 0x23F93 +0x4F69 0x2F911 +0x4F6A 0x23F94 +0x4F6B 0x23F95 +0x4F6C 0x23ECA +0x4F6D 0x23F18 +0x4F6F 0x23F96 +0x4F70 0x23F97 +0x4F71 0x23F98 +0x4F72 0x23F99 +0x4F73 0x23F9A +0x4F74 0x23F9B +0x4F75 0x23F9C +0x4F76 0x23F9D +0x4F77 0x23F9E +0x4F78 0x23F9F +0x4F7B 0x23FA0 +0x4F7C 0x23FA1 +0x4F7E 0x23FB7 +0x5022 0x24396 +0x5023 0x24368 +0x5024 0x24369 +0x5025 0x2438C +0x5026 0x2436A +0x5027 0x2436B +0x5028 0x2436C +0x5029 0x2436D +0x502A 0x2436E +0x502B 0x2436F +0x502C 0x2437F +0x502D 0x24384 +0x502E 0x24370 +0x502F 0x24371 +0x5030 0x24385 +0x5031 0x24372 +0x5032 0x24373 +0x5033 0x24374 +0x5034 0x24375 +0x5035 0x24376 +0x5037 0x24377 +0x5038 0x24378 +0x5039 0x24379 +0x503A 0x2437A +0x503B 0x2437B +0x503C 0x2437C +0x503D 0x2F91E +0x503E 0x24594 +0x503F 0x246D5 +0x5040 0x24829 +0x5041 0x24A2B +0x5042 0x24A2C +0x5043 0x24A2D +0x5044 0x24A2E +0x5045 0x24A2F +0x5046 0x24A30 +0x5047 0x24A3E +0x5048 0x24A31 +0x5049 0x24A32 +0x504A 0x24A33 +0x504B 0x24A34 +0x504C 0x24A35 +0x504D 0x24B11 +0x504F 0x24CC0 +0x5050 0x24E42 +0x5051 0x24E43 +0x5052 0x24E44 +0x5053 0x24E45 +0x5054 0x24E46 +0x5055 0x2508C +0x5056 0x2508D +0x5057 0x2508E +0x5058 0x2508F +0x5059 0x25090 +0x505A 0x25091 +0x505B 0x25263 +0x505C 0x25264 +0x505D 0x25265 +0x505F 0x2F94A +0x5061 0x253F6 +0x5062 0x25536 +0x5063 0x25537 +0x5064 0x2552C +0x5065 0x25538 +0x5066 0x25539 +0x5068 0x2553A +0x5069 0x256E3 +0x506A 0x256E2 +0x506B 0x256F5 +0x506C 0x25847 +0x506E 0x25848 +0x506F 0x25849 +0x5070 0x2584A +0x5071 0x2584B +0x5072 0x2584C +0x5073 0x25AA8 +0x5074 0x25AA9 +0x5075 0x25AAA +0x5077 0x25C0B +0x5078 0x25C06 +0x5079 0x25C73 +0x507A 0x25C0C +0x507B 0x25C0D +0x507C 0x25C0E +0x507D 0x25C0F +0x507E 0x25C10 +0x5122 0x25C11 +0x5123 0x2F962 +0x5124 0x25C12 +0x5125 0x25C14 +0x5126 0x25C15 +0x5127 0x25C16 +0x5129 0x25C13 +0x512A 0x25C17 +0x512B 0x25ED9 +0x512C 0x25EDA +0x512D 0x25EDB +0x512F 0x25EDC +0x5130 0x260A6 +0x5131 0x260A7 +0x5132 0x260A8 +0x5133 0x260A9 +0x5134 0x260AA +0x5135 0x260AB +0x5137 0x2F96D +0x5138 0x260AC +0x5139 0x260AD +0x513A 0x260AE +0x513D 0x260AF +0x513E 0x260B0 +0x513F 0x260B1 +0x5140 0x26244 +0x5141 0x26245 +0x5142 0x262F7 +0x5143 0x262F8 +0x5144 0x2646B +0x5145 0x2646C +0x5146 0x26461 +0x5147 0x26512 +0x5148 0x265AF +0x5149 0x265B0 +0x514A 0x265B1 +0x514B 0x265B2 +0x514C 0x265B3 +0x514D 0x265B4 +0x514E 0x265B5 +0x514F 0x265B6 +0x5150 0x26622 +0x5151 0x267EA +0x5152 0x267EB +0x5153 0x267EC +0x5154 0x267ED +0x5156 0x268ED +0x5157 0x2691B +0x5158 0x26947 +0x5159 0x269E8 +0x515A 0x26AD0 +0x515B 0x26AE7 +0x515C 0x26AE8 +0x515D 0x26AE9 +0x515E 0x26E4E +0x515F 0x26E4F +0x5160 0x26E50 +0x5161 0x26E72 +0x5162 0x26E51 +0x5163 0x26E52 +0x5164 0x2F9A7 +0x5166 0x26E53 +0x5167 0x26E54 +0x5168 0x26E55 +0x5169 0x26E56 +0x516A 0x26E57 +0x516B 0x26E77 +0x516C 0x26E58 +0x516D 0x26E59 +0x516E 0x26E5A +0x516F 0x26E5B +0x5170 0x26E5C +0x5171 0x26E6E +0x5172 0x26E5D +0x5175 0x26E5E +0x5177 0x26E5F +0x5179 0x271D7 +0x517A 0x27389 +0x517B 0x2738A +0x517D 0x2F9BE +0x517E 0x2738B +0x5221 0x2738C +0x5222 0x2738D +0x5223 0x2738E +0x5224 0x2F9BC +0x5225 0x2738F +0x5227 0x2739A +0x5228 0x27390 +0x5229 0x27391 +0x522A 0x27392 +0x522B 0x27393 +0x522C 0x27712 +0x522D 0x276F1 +0x522F 0x277FE +0x5230 0x277FB +0x5231 0x27857 +0x5232 0x27A49 +0x5233 0x27A4A +0x5234 0x27A4B +0x5235 0x27A4C +0x5237 0x27A4D +0x5238 0x27A59 +0x5239 0x27A4E +0x523A 0x27A4F +0x523B 0x27BF4 +0x523C 0x27C65 +0x523D 0x27DA6 +0x523E 0x27DA7 +0x523F 0x27DA8 +0x5240 0x27F22 +0x5241 0x27F23 +0x5242 0x2808B +0x5243 0x2808C +0x5244 0x2808D +0x5245 0x2808E +0x5246 0x28258 +0x5248 0x28259 +0x5249 0x2833B +0x524A 0x2833C +0x524B 0x2833D +0x524C 0x2833E +0x524D 0x28448 +0x524E 0x28594 +0x524F 0x28595 +0x5250 0x28596 +0x5251 0x28597 +0x5252 0x28598 +0x5253 0x2877D +0x5254 0x286FE +0x5255 0x2877E +0x5256 0x2877F +0x5258 0x2885B +0x5259 0x2885C +0x525A 0x289E4 +0x525B 0x289C1 +0x525C 0x289FD +0x525D 0x289C2 +0x525E 0x289D6 +0x525F 0x289C3 +0x5260 0x289C4 +0x5262 0x289DC +0x5263 0x289C5 +0x5264 0x289C6 +0x5265 0x289C7 +0x5266 0x289E1 +0x5267 0x289C8 +0x5268 0x289C9 +0x5269 0x289CA +0x526A 0x289CB +0x526C 0x289CC +0x526D 0x289CD +0x526E 0x28D35 +0x526F 0x28D36 +0x5270 0x28D47 +0x5271 0x28D37 +0x5272 0x28F1B +0x5273 0x28F1C +0x5274 0x28F1D +0x5275 0x28F1E +0x5276 0x28F1F +0x5277 0x28F20 +0x5278 0x28F7B +0x5279 0x28F7A +0x527A 0x28FFE +0x527B 0x290C6 +0x527C 0x290C7 +0x527D 0x290C8 +0x527E 0x290C9 +0x5321 0x290CA +0x5323 0x294A0 +0x5324 0x294A1 +0x5325 0x295CC +0x5326 0x295CD +0x5327 0x296F1 +0x5328 0x296D7 +0x5329 0x29842 +0x532A 0x29846 +0x532B 0x298A3 +0x532C 0x298A5 +0x532D 0x298A6 +0x532E 0x29ACB +0x532F 0x29ACC +0x5330 0x29B26 +0x5331 0x29B27 +0x5332 0x29B28 +0x5333 0x29B29 +0x5334 0x29CAE +0x5335 0x29CAF +0x5336 0x29CB0 +0x5337 0x29D73 +0x5339 0x29D7C +0x533A 0x29D74 +0x533C 0x29F80 +0x533D 0x29D75 +0x5340 0x29FCF +0x5342 0x2A38F +0x5343 0x20670 +0x5344 0x20085 +0x5345 0x20397 +0x5346 0x203F6 +0x5347 0x203F7 +0x5348 0x203F8 +0x5349 0x203FA +0x534A 0x203FB +0x534B 0x204BA +0x534C 0x204BB +0x534D 0x204BC +0x534E 0x204BD +0x534F 0x20534 +0x5350 0x20535 +0x5351 0x205A2 +0x5352 0x20614 +0x5353 0x20611 +0x5354 0x2066E +0x5355 0x2066F +0x5356 0x20808 +0x5357 0x208B8 +0x5358 0x20A09 +0x5359 0x20ABD +0x535A 0x20ABE +0x535B 0x20B88 +0x535C 0x20FFE +0x535E 0x20FFF +0x535F 0x21000 +0x5360 0x21001 +0x5361 0x21002 +0x5362 0x21003 +0x5363 0x21004 +0x5364 0x21005 +0x5365 0x21006 +0x5367 0x21007 +0x5368 0x21008 +0x5369 0x21009 +0x536A 0x2100A +0x536B 0x2100B +0x536C 0x2100C +0x536D 0x2100D +0x536E 0x2100E +0x536F 0x2100F +0x5373 0x2122C +0x5374 0x2146B +0x5376 0x2146C +0x5377 0x21487 +0x5378 0x2146D +0x5379 0x21578 +0x537A 0x2168B +0x537B 0x218A4 +0x537C 0x218A5 +0x537D 0x218A6 +0x537E 0x218A7 +0x5421 0x218BE +0x5422 0x218A8 +0x5423 0x218A9 +0x5424 0x218AA +0x5425 0x2188D +0x5426 0x218AB +0x5427 0x218AC +0x5428 0x218BF +0x542B 0x218AD +0x542C 0x218AE +0x542D 0x219A4 +0x542E 0x219A5 +0x542F 0x21AC7 +0x5430 0x21AC8 +0x5431 0x21AC9 +0x5432 0x27DBC +0x5433 0x21ACA +0x5434 0x21ACB +0x5435 0x21ACC +0x5436 0x21ACD +0x5437 0x21ACE +0x5438 0x21C19 +0x5439 0x21CE6 +0x543A 0x21F4C +0x543B 0x21F4D +0x543C 0x21F4E +0x543D 0x22006 +0x543F 0x222CD +0x5440 0x222CE +0x5441 0x222CF +0x5442 0x222D0 +0x5444 0x22581 +0x5445 0x22582 +0x5446 0x20533 +0x5447 0x2286A +0x5448 0x2286B +0x5449 0x228B2 +0x544A 0x2286C +0x544B 0x2286D +0x544C 0x228CC +0x544D 0x228AE +0x544E 0x228B3 +0x544F 0x22891 +0x5451 0x2286E +0x5452 0x228B4 +0x5453 0x2286F +0x5454 0x22DC9 +0x5455 0x22DA7 +0x5456 0x22DA8 +0x5457 0x22DA9 +0x5458 0x22DAA +0x5459 0x22DAB +0x545A 0x22DAC +0x545B 0x22DAD +0x545C 0x22DAE +0x545D 0x22DAF +0x545E 0x22DB0 +0x545F 0x22D60 +0x5460 0x22DB1 +0x5461 0x22EE1 +0x5462 0x22FE3 +0x5463 0x22FF6 +0x5465 0x232AF +0x5466 0x232B0 +0x5467 0x232B1 +0x5468 0x232BA +0x5469 0x232B2 +0x546A 0x232B3 +0x546B 0x2334C +0x546D 0x233A0 +0x546E 0x233A1 +0x546F 0x236B0 +0x5470 0x236B1 +0x5471 0x236B2 +0x5472 0x236B3 +0x5473 0x236B4 +0x5474 0x2F8EB +0x5475 0x236B5 +0x5476 0x236B6 +0x5477 0x236B7 +0x5478 0x236B8 +0x5479 0x236B9 +0x547A 0x236BA +0x547C 0x236BB +0x547D 0x236BC +0x547E 0x236BD +0x5521 0x236BE +0x5522 0x236BF +0x5523 0x236DF +0x5524 0x236C0 +0x5525 0x236C1 +0x5526 0x236C2 +0x5527 0x236C3 +0x5528 0x236C4 +0x552B 0x236C5 +0x552C 0x236C6 +0x552D 0x236C7 +0x552E 0x236C8 +0x552F 0x236C9 +0x5530 0x236CA +0x5531 0x2373C +0x5532 0x236CB +0x5533 0x236CC +0x5534 0x236CD +0x5535 0x236CE +0x5536 0x236CF +0x5537 0x236D0 +0x5538 0x236D1 +0x553A 0x2391D +0x553B 0x2391E +0x553C 0x23A64 +0x553D 0x23A65 +0x553E 0x23AC5 +0x553F 0x23AC6 +0x5540 0x23AC7 +0x5541 0x23AFF +0x5542 0x23BFF +0x5543 0x23C00 +0x5544 0x23C01 +0x5545 0x23C02 +0x5546 0x23FF5 +0x5547 0x2405C +0x5548 0x23FF6 +0x5549 0x23FF7 +0x554A 0x23FB0 +0x554B 0x23FF8 +0x554C 0x23FF9 +0x554D 0x2405D +0x554E 0x24050 +0x554F 0x23FFA +0x5550 0x23FFB +0x5551 0x23FA2 +0x5552 0x23FFC +0x5553 0x23FFD +0x5554 0x23FFE +0x5555 0x23FFF +0x5556 0x2F913 +0x5557 0x24000 +0x5558 0x2F91F +0x5559 0x243C1 +0x555A 0x243C2 +0x555B 0x243C3 +0x555C 0x243C4 +0x555D 0x243C5 +0x555E 0x243C6 +0x555F 0x243C7 +0x5560 0x243C8 +0x5561 0x243C9 +0x5562 0x243CA +0x5563 0x243CB +0x5564 0x290EF +0x5565 0x243D7 +0x5566 0x243CC +0x5567 0x243CD +0x5568 0x243CE +0x5569 0x24422 +0x556A 0x243CF +0x556B 0x243D0 +0x556D 0x243D1 +0x556E 0x243D2 +0x556F 0x243E9 +0x5570 0x243D3 +0x5571 0x243D4 +0x5572 0x243D5 +0x5573 0x24538 +0x5574 0x2103B +0x5575 0x2487D +0x5576 0x2056F +0x5577 0x248A1 +0x5578 0x24A53 +0x5579 0x24A54 +0x557B 0x24A55 +0x557C 0x24A3C +0x557D 0x24A56 +0x5621 0x24A66 +0x5623 0x24A57 +0x5624 0x24A58 +0x5625 0x24A59 +0x5626 0x24A5A +0x5627 0x24A5B +0x5628 0x24A67 +0x5629 0x24A5C +0x562C 0x24A6A +0x562D 0x24A5D +0x562E 0x24A3D +0x562F 0x24A5E +0x5630 0x24A65 +0x5631 0x24CE1 +0x5632 0x24CCD +0x5633 0x2A011 +0x5634 0x24E6F +0x5635 0x24E70 +0x5636 0x2501A +0x5637 0x2509A +0x5638 0x2509B +0x5639 0x2509C +0x563A 0x2509E +0x563B 0x2509F +0x563C 0x2F93F +0x563D 0x2528E +0x563F 0x253FD +0x5641 0x2555E +0x5642 0x2555F +0x5643 0x25560 +0x5644 0x25565 +0x5645 0x25567 +0x5646 0x25568 +0x5647 0x25569 +0x5649 0x2556A +0x564A 0x2558F +0x564B 0x2556B +0x564C 0x2556C +0x564D 0x2556D +0x564E 0x256F7 +0x564F 0x256F8 +0x5650 0x256F9 +0x5651 0x256E4 +0x5652 0x256FA +0x5653 0x258B1 +0x5654 0x25875 +0x5655 0x25876 +0x5656 0x259FF +0x5657 0x25A00 +0x5658 0x25A01 +0x5659 0x25A02 +0x565A 0x25A03 +0x565B 0x25AAE +0x565C 0x25AAD +0x565D 0x25C51 +0x565E 0x25C52 +0x5660 0x25C53 +0x5661 0x25C54 +0x5662 0x25C55 +0x5663 0x25C56 +0x5664 0x25C57 +0x5665 0x25C58 +0x5666 0x25C59 +0x5667 0x25C5A +0x5668 0x25C5B +0x5669 0x25C5C +0x566A 0x25C5D +0x566B 0x25C5E +0x566C 0x25C5F +0x566D 0x25C60 +0x566E 0x25C61 +0x566F 0x25C62 +0x5670 0x25C63 +0x5671 0x25C64 +0x5672 0x25C4C +0x5673 0x25C66 +0x5674 0x25EF1 +0x5675 0x25EF2 +0x5676 0x260F2 +0x5677 0x260F3 +0x5678 0x260F4 +0x5679 0x260F5 +0x567A 0x260F6 +0x567B 0x260F7 +0x567C 0x260F8 +0x567D 0x260F9 +0x567E 0x260FA +0x5721 0x2624C +0x5722 0x2624B +0x5723 0x2631B +0x5724 0x263CE +0x5725 0x263B3 +0x5726 0x2647F +0x5727 0x2F979 +0x5728 0x2F97C +0x5729 0x2651A +0x572A 0x265C4 +0x572B 0x265C5 +0x572C 0x265C6 +0x572D 0x265C7 +0x572E 0x265C8 +0x572F 0x265C9 +0x5731 0x26819 +0x5732 0x2681C +0x5733 0x2681A +0x5734 0x2694C +0x5735 0x2698E +0x5736 0x26A7E +0x5737 0x26EEB +0x5738 0x26EEC +0x5739 0x26EED +0x573A 0x26EEE +0x573B 0x26EEF +0x573C 0x26EF0 +0x573D 0x26EF1 +0x573E 0x26ED8 +0x573F 0x26ED9 +0x5740 0x26EDA +0x5741 0x26EDB +0x5742 0x26EF2 +0x5743 0x26EF3 +0x5744 0x26EF4 +0x5745 0x26F07 +0x5747 0x2F9AC +0x5749 0x26EF5 +0x574A 0x26F15 +0x574C 0x26EF6 +0x574D 0x26EF7 +0x574E 0x26EF8 +0x574F 0x26EF9 +0x5750 0x26EFA +0x5751 0x26EFB +0x5752 0x26EFC +0x5753 0x26EFD +0x5754 0x26EFE +0x5755 0x26FA7 +0x5756 0x26EFF +0x5757 0x26F00 +0x5758 0x26F01 +0x5759 0x26F02 +0x575A 0x26F03 +0x575B 0x26F04 +0x575C 0x26F05 +0x575D 0x271E9 +0x575E 0x271EA +0x575F 0x271EB +0x5760 0x273DE +0x5761 0x273DF +0x5763 0x273E0 +0x5764 0x273E1 +0x5765 0x273E2 +0x5766 0x273E3 +0x5767 0x2773E +0x5768 0x2773F +0x5769 0x27740 +0x576A 0x27741 +0x576B 0x27871 +0x576C 0x27872 +0x576D 0x27873 +0x576E 0x27A88 +0x576F 0x27A89 +0x5770 0x27A8A +0x5771 0x27A8B +0x5772 0x27A8C +0x5773 0x27A8D +0x5774 0x27A8E +0x5775 0x27A8F +0x5776 0x27A90 +0x5777 0x27A91 +0x5778 0x27A92 +0x577A 0x27CF1 +0x577B 0x27DBE +0x577C 0x27DBF +0x577D 0x27DC0 +0x577E 0x27DC1 +0x5821 0x27DC2 +0x5822 0x27DC3 +0x5823 0x27E6E +0x5824 0x27F37 +0x5825 0x27F57 +0x5826 0x27F38 +0x5827 0x27F39 +0x5828 0x27F3A +0x5829 0x27F3B +0x582A 0x27F3C +0x582B 0x27F3D +0x582C 0x27F3E +0x582D 0x27F27 +0x582E 0x27F3F +0x5831 0x280C0 +0x5832 0x280C1 +0x5834 0x28267 +0x5836 0x28268 +0x5837 0x28358 +0x5838 0x28365 +0x5839 0x28359 +0x583A 0x2835A +0x583B 0x28424 +0x583C 0x285CD +0x583D 0x285CE +0x583E 0x285CF +0x583F 0x285D2 +0x5840 0x2879F +0x5841 0x28722 +0x5842 0x2887D +0x5843 0x2887E +0x5844 0x289FF +0x5845 0x28A25 +0x5846 0x28A00 +0x5847 0x28A01 +0x5849 0x28A02 +0x584A 0x28A03 +0x584B 0x28A04 +0x584D 0x28A05 +0x584E 0x28A06 +0x584F 0x28A07 +0x5850 0x28A16 +0x5851 0x28A08 +0x5852 0x28A17 +0x5853 0x28A09 +0x5854 0x28A0A +0x5856 0x28A0B +0x5857 0x28A0C +0x5858 0x28A29 +0x585A 0x28A0D +0x585C 0x28A0E +0x585D 0x28A10 +0x585E 0x28A11 +0x585F 0x28A1D +0x5860 0x28A12 +0x5861 0x28A13 +0x5863 0x28A14 +0x5864 0x28A15 +0x5865 0x28C8D +0x5866 0x28D54 +0x5867 0x28D55 +0x5868 0x28D56 +0x5869 0x28F33 +0x586A 0x28F34 +0x586B 0x28F35 +0x586C 0x28F36 +0x586D 0x28FFA +0x586E 0x290E3 +0x586F 0x290E6 +0x5870 0x290ED +0x5871 0x290E7 +0x5872 0x290E8 +0x5873 0x290E9 +0x5874 0x290EA +0x5875 0x290EB +0x5876 0x29227 +0x5877 0x29220 +0x5878 0x2F9F8 +0x5879 0x2942A +0x587A 0x294C9 +0x587C 0x294CA +0x587D 0x294CB +0x587E 0x294D9 +0x5921 0x294CC +0x5922 0x294CD +0x5923 0x294CE +0x5925 0x295E1 +0x5926 0x2971B +0x5927 0x2971C +0x5928 0x2971D +0x5929 0x2971E +0x592A 0x29847 +0x592B 0x298D1 +0x592C 0x298C9 +0x592D 0x29AD0 +0x592E 0x29AD1 +0x592F 0x29B3F +0x5930 0x29B40 +0x5931 0x29B41 +0x5932 0x2FA09 +0x5933 0x29B42 +0x5934 0x29CC4 +0x5935 0x29D9B +0x5936 0x29D92 +0x5937 0x29D93 +0x5939 0x29D94 +0x593A 0x29D95 +0x593D 0x29FF3 +0x593E 0x29FF4 +0x593F 0x29FF5 +0x5940 0x29FF6 +0x5941 0x2A260 +0x5942 0x2A29E +0x5943 0x2A2A0 +0x5944 0x2A2A1 +0x5945 0x2A31C +0x5946 0x2A39F +0x5947 0x20056 +0x5948 0x20412 +0x5949 0x2041F +0x594A 0x20415 +0x594B 0x20416 +0x594C 0x20417 +0x594D 0x2F80C +0x594E 0x20418 +0x594F 0x204C2 +0x5950 0x204C3 +0x5951 0x204C4 +0x5952 0x205A1 +0x5953 0x2061B +0x5954 0x2061C +0x5955 0x20671 +0x5956 0x20813 +0x5957 0x20B17 +0x5958 0x20B8F +0x5959 0x2105F +0x595A 0x21060 +0x595B 0x210AC +0x595E 0x21061 +0x595F 0x21062 +0x5960 0x21063 +0x5961 0x21064 +0x5962 0x21065 +0x5964 0x21499 +0x5965 0x2149A +0x5966 0x2149B +0x5967 0x2149C +0x5968 0x2149D +0x5969 0x2149E +0x596A 0x2149F +0x596B 0x214A0 +0x596C 0x218DA +0x596D 0x218DB +0x596E 0x218DC +0x596F 0x218DD +0x5970 0x218DE +0x5971 0x218DF +0x5972 0x21AD5 +0x5973 0x21AD6 +0x5974 0x21AD7 +0x5975 0x21AD8 +0x5976 0x21AE0 +0x5977 0x21BB4 +0x5979 0x21F6E +0x597A 0x21F6F +0x597B 0x21F70 +0x597C 0x22163 +0x597E 0x222D5 +0x5A21 0x222D6 +0x5A22 0x222D7 +0x5A23 0x222D8 +0x5A24 0x22430 +0x5A25 0x228B5 +0x5A26 0x228B6 +0x5A27 0x228C1 +0x5A28 0x228F7 +0x5A2A 0x228CB +0x5A2B 0x228E8 +0x5A2D 0x228E9 +0x5A2E 0x228B7 +0x5A2F 0x22A15 +0x5A30 0x22DE6 +0x5A31 0x22DE7 +0x5A32 0x22DE8 +0x5A33 0x22DE9 +0x5A34 0x22DEA +0x5A35 0x22DEB +0x5A36 0x2F8CA +0x5A37 0x2300B +0x5A38 0x2300C +0x5A39 0x23064 +0x5A3A 0x232D4 +0x5A3B 0x232D5 +0x5A3C 0x232D6 +0x5A3D 0x232D8 +0x5A3E 0x233A5 +0x5A3F 0x2005B +0x5A40 0x2370F +0x5A41 0x23710 +0x5A43 0x23711 +0x5A44 0x23712 +0x5A45 0x23713 +0x5A46 0x23714 +0x5A47 0x23715 +0x5A48 0x23716 +0x5A49 0x23717 +0x5A4A 0x23718 +0x5A4B 0x23719 +0x5A4C 0x2371A +0x5A4D 0x2372F +0x5A4E 0x2371B +0x5A4F 0x2371C +0x5A50 0x2373F +0x5A51 0x2371D +0x5A52 0x2371E +0x5A53 0x2372C +0x5A54 0x2371F +0x5A55 0x23924 +0x5A56 0x239A4 +0x5A57 0x239A5 +0x5A58 0x26251 +0x5A59 0x23AFE +0x5A5A 0x23C11 +0x5A5B 0x23C12 +0x5A5C 0x23C13 +0x5A5D 0x23C54 +0x5A5E 0x2405E +0x5A5F 0x24021 +0x5A60 0x2403F +0x5A61 0x24040 +0x5A62 0x24041 +0x5A63 0x24042 +0x5A64 0x24043 +0x5A65 0x24044 +0x5A66 0x24020 +0x5A67 0x24045 +0x5A69 0x24046 +0x5A6A 0x240B0 +0x5A6B 0x24047 +0x5A6C 0x24057 +0x5A6D 0x24001 +0x5A6E 0x240B1 +0x5A6F 0x2405A +0x5A70 0x24048 +0x5A71 0x24404 +0x5A72 0x24405 +0x5A74 0x2444F +0x5A75 0x24450 +0x5A76 0x24406 +0x5A77 0x24407 +0x5A78 0x24408 +0x5A79 0x24409 +0x5A7A 0x2440A +0x5A7B 0x2440B +0x5A7C 0x2440C +0x5A7D 0x2440D +0x5A7E 0x2440E +0x5B21 0x2440F +0x5B22 0x24410 +0x5B23 0x24411 +0x5B24 0x24533 +0x5B25 0x24534 +0x5B26 0x24535 +0x5B27 0x245FC +0x5B28 0x245FD +0x5B29 0x248B0 +0x5B2A 0x248B1 +0x5B2B 0x248B2 +0x5B2C 0x248B3 +0x5B2E 0x24A7B +0x5B2F 0x24A7C +0x5B30 0x24A7D +0x5B31 0x24A7E +0x5B32 0x24A7F +0x5B33 0x24A80 +0x5B34 0x24A81 +0x5B35 0x24A82 +0x5B36 0x24BF9 +0x5B37 0x24CDA +0x5B38 0x24EA1 +0x5B3B 0x250AD +0x5B3C 0x250AE +0x5B3E 0x252C8 +0x5B3F 0x252C9 +0x5B40 0x252CA +0x5B41 0x25582 +0x5B42 0x25583 +0x5B43 0x25584 +0x5B44 0x25585 +0x5B45 0x25586 +0x5B46 0x25587 +0x5B47 0x25588 +0x5B48 0x25589 +0x5B49 0x2558A +0x5B4B 0x25707 +0x5B4C 0x25708 +0x5B4D 0x25701 +0x5B4E 0x25709 +0x5B4F 0x25702 +0x5B50 0x2570A +0x5B51 0x2570B +0x5B52 0x2570C +0x5B53 0x258A7 +0x5B54 0x25898 +0x5B55 0x25899 +0x5B56 0x2589A +0x5B57 0x2589B +0x5B58 0x2589C +0x5B5A 0x2589D +0x5B5B 0x25A1A +0x5B5C 0x25AB2 +0x5B5D 0x25CB0 +0x5B5E 0x25CB1 +0x5B60 0x25CB2 +0x5B61 0x25CB3 +0x5B62 0x25CB4 +0x5B63 0x25CB5 +0x5B64 0x25CB6 +0x5B65 0x25CC0 +0x5B66 0x25CB7 +0x5B67 0x25CB8 +0x5B68 0x25CB9 +0x5B69 0x25CBA +0x5B6A 0x25D1D +0x5B6B 0x25F0C +0x5B6C 0x25F0D +0x5B6D 0x25F0E +0x5B6E 0x25F35 +0x5B6F 0x25F0F +0x5B70 0x25F10 +0x5B71 0x25F11 +0x5B72 0x25F12 +0x5B73 0x26122 +0x5B74 0x26123 +0x5B75 0x26124 +0x5B77 0x26125 +0x5B78 0x26126 +0x5B79 0x26127 +0x5B7A 0x26128 +0x5B7B 0x26129 +0x5B7C 0x2612A +0x5B7D 0x2612B +0x5B7E 0x2612C +0x5C21 0x2612D +0x5C22 0x2612E +0x5C23 0x26252 +0x5C24 0x26253 +0x5C25 0x26319 +0x5C26 0x263BF +0x5C27 0x2648B +0x5C28 0x2648C +0x5C29 0x26523 +0x5C2A 0x26524 +0x5C2B 0x265F1 +0x5C2C 0x265D8 +0x5C2D 0x2F97F +0x5C2E 0x2684E +0x5C2F 0x2684F +0x5C30 0x26855 +0x5C31 0x26850 +0x5C32 0x26851 +0x5C33 0x26852 +0x5C34 0x26853 +0x5C35 0x26802 +0x5C36 0x26854 +0x5C37 0x268F1 +0x5C38 0x26924 +0x5C39 0x26AD1 +0x5C3A 0x26F7C +0x5C3B 0x26F7D +0x5C3C 0x26F7E +0x5C3D 0x26F7F +0x5C3E 0x26F80 +0x5C3F 0x26F9F +0x5C40 0x26F81 +0x5C41 0x26F82 +0x5C42 0x26F83 +0x5C43 0x26F84 +0x5C44 0x26F85 +0x5C45 0x26F86 +0x5C46 0x26F87 +0x5C47 0x26F88 +0x5C48 0x26F9B +0x5C49 0x26F89 +0x5C4A 0x26F8A +0x5C4B 0x26F8B +0x5C4C 0x26F8C +0x5C4E 0x26FA1 +0x5C4F 0x26F8D +0x5C50 0x26F8E +0x5C51 0x271F3 +0x5C52 0x271F4 +0x5C53 0x271F5 +0x5C54 0x27424 +0x5C55 0x27425 +0x5C56 0x27426 +0x5C57 0x27427 +0x5C58 0x27428 +0x5C59 0x27429 +0x5C5A 0x2742A +0x5C5C 0x2742B +0x5C5D 0x275CD +0x5C5E 0x27601 +0x5C5F 0x2258D +0x5C60 0x27770 +0x5C61 0x27880 +0x5C62 0x27881 +0x5C63 0x27AC0 +0x5C64 0x27AC1 +0x5C65 0x27AC2 +0x5C66 0x27AC3 +0x5C67 0x27AC4 +0x5C68 0x27AC5 +0x5C69 0x27AC6 +0x5C6A 0x27AC7 +0x5C6B 0x27AC8 +0x5C6C 0x27CFE +0x5C6E 0x27DD9 +0x5C6F 0x27DDC +0x5C70 0x27DDA +0x5C71 0x27E75 +0x5C72 0x27F58 +0x5C73 0x27F59 +0x5C74 0x27F5A +0x5C75 0x27F5B +0x5C76 0x27F5C +0x5C77 0x280EC +0x5C79 0x280F3 +0x5C7A 0x28272 +0x5C7B 0x28273 +0x5C7C 0x28382 +0x5C7D 0x28383 +0x5C7E 0x2842A +0x5D21 0x2842B +0x5D22 0x2842C +0x5D23 0x2842D +0x5D24 0x285F6 +0x5D25 0x28600 +0x5D26 0x285F7 +0x5D27 0x285F8 +0x5D28 0x285F9 +0x5D2A 0x28894 +0x5D2B 0x28895 +0x5D2C 0x28896 +0x5D2D 0x2891B +0x5D2E 0x28A86 +0x5D2F 0x28A4C +0x5D30 0x28A4D +0x5D31 0x28A83 +0x5D33 0x28A82 +0x5D34 0x28A4E +0x5D35 0x28A4F +0x5D36 0x28A50 +0x5D37 0x28A51 +0x5D38 0x28A81 +0x5D3A 0x28A52 +0x5D3B 0x28A53 +0x5D3C 0x28A54 +0x5D3D 0x28A55 +0x5D3F 0x28A56 +0x5D40 0x28A57 +0x5D42 0x28A58 +0x5D43 0x28A5B +0x5D44 0x28A5C +0x5D45 0x28A5D +0x5D46 0x28A5E +0x5D47 0x28A5F +0x5D48 0x28A60 +0x5D49 0x28A61 +0x5D4A 0x28A7C +0x5D4B 0x28A62 +0x5D4E 0x28A63 +0x5D4F 0x28A64 +0x5D50 0x28D73 +0x5D51 0x28F45 +0x5D52 0x28F46 +0x5D53 0x28F47 +0x5D54 0x28F4C +0x5D55 0x29012 +0x5D57 0x29013 +0x5D58 0x29139 +0x5D59 0x29103 +0x5D5A 0x2910D +0x5D5B 0x29230 +0x5D5C 0x292D5 +0x5D5D 0x293C0 +0x5D5E 0x294F2 +0x5D5F 0x294F3 +0x5D60 0x294F4 +0x5D61 0x294F5 +0x5D62 0x294F6 +0x5D63 0x294F7 +0x5D64 0x295FA +0x5D65 0x295FB +0x5D66 0x29745 +0x5D67 0x29746 +0x5D68 0x29849 +0x5D69 0x298E7 +0x5D6A 0x298E8 +0x5D6B 0x29AD8 +0x5D6C 0x29AD9 +0x5D6D 0x29B55 +0x5D6E 0x29B56 +0x5D6F 0x29B57 +0x5D70 0x29CDA +0x5D71 0x29CDB +0x5D72 0x29CDC +0x5D73 0x29DB8 +0x5D74 0x29DB9 +0x5D75 0x29DBA +0x5D77 0x29DBB +0x5D78 0x29F89 +0x5D79 0x29DBC +0x5D7A 0x2A030 +0x5D7B 0x2A031 +0x5D7C 0x2A032 +0x5D7D 0x2A033 +0x5E21 0x2A034 +0x5E22 0x2A035 +0x5E23 0x2A036 +0x5E25 0x2A037 +0x5E26 0x2A2B2 +0x5E27 0x2A390 +0x5E28 0x2A326 +0x5E29 0x2A3A2 +0x5E2A 0x2A438 +0x5E2C 0x2042E +0x5E2E 0x2042F +0x5E2F 0x20430 +0x5E30 0x2042A +0x5E31 0x2042B +0x5E32 0x204C9 +0x5E33 0x20537 +0x5E34 0x20620 +0x5E35 0x20672 +0x5E36 0x2081F +0x5E37 0x20965 +0x5E38 0x209CA +0x5E39 0x20AC0 +0x5E3A 0x20AC1 +0x5E3B 0x20AC2 +0x5E3C 0x210B7 +0x5E3D 0x210B8 +0x5E3E 0x210B9 +0x5E3F 0x210BA +0x5E40 0x210BB +0x5E43 0x210BC +0x5E44 0x210BD +0x5E45 0x210BE +0x5E46 0x210F2 +0x5E47 0x214B5 +0x5E48 0x214B7 +0x5E49 0x214B8 +0x5E4A 0x210DF +0x5E4B 0x214B9 +0x5E4C 0x214D5 +0x5E4D 0x214BA +0x5E4E 0x214BB +0x5E4F 0x2154A +0x5E50 0x218F2 +0x5E51 0x218F3 +0x5E52 0x218F4 +0x5E53 0x218FA +0x5E54 0x218F5 +0x5E55 0x21902 +0x5E56 0x21AE2 +0x5E57 0x21AE3 +0x5E58 0x21F8E +0x5E59 0x21F8B +0x5E5A 0x222E4 +0x5E5B 0x222EB +0x5E5C 0x222E5 +0x5E5D 0x22435 +0x5E5E 0x22593 +0x5E5F 0x228EA +0x5E60 0x228EB +0x5E62 0x228EC +0x5E63 0x228ED +0x5E64 0x22917 +0x5E65 0x228EE +0x5E66 0x228EF +0x5E67 0x228F0 +0x5E68 0x22E0E +0x5E69 0x22E0F +0x5E6A 0x22E10 +0x5E6B 0x22E19 +0x5E6C 0x22E18 +0x5E6D 0x22E11 +0x5E6E 0x22E12 +0x5E6F 0x22E13 +0x5E70 0x2F8C7 +0x5E71 0x22E14 +0x5E72 0x22E15 +0x5E74 0x22E16 +0x5E75 0x23065 +0x5E76 0x232EA +0x5E77 0x232EB +0x5E78 0x232EC +0x5E79 0x232ED +0x5E7B 0x232EE +0x5E7C 0x233AC +0x5E7D 0x237C2 +0x5E7E 0x23769 +0x5F21 0x23781 +0x5F22 0x2376A +0x5F23 0x2376B +0x5F24 0x2376C +0x5F25 0x2376D +0x5F26 0x2376E +0x5F27 0x2376F +0x5F28 0x23770 +0x5F2A 0x23771 +0x5F2B 0x23772 +0x5F2C 0x23773 +0x5F2D 0x2378C +0x5F2E 0x23774 +0x5F2F 0x23775 +0x5F30 0x23776 +0x5F31 0x23C24 +0x5F32 0x23C2A +0x5F33 0x2408E +0x5F34 0x240AF +0x5F35 0x2408F +0x5F36 0x24090 +0x5F37 0x24091 +0x5F39 0x24092 +0x5F3A 0x24093 +0x5F3B 0x24094 +0x5F3C 0x24095 +0x5F3D 0x24096 +0x5F3E 0x24097 +0x5F3F 0x24098 +0x5F40 0x24099 +0x5F41 0x2409A +0x5F42 0x2409B +0x5F43 0x2409C +0x5F44 0x24439 +0x5F45 0x2443B +0x5F46 0x2443A +0x5F47 0x2443C +0x5F48 0x2443D +0x5F49 0x2443E +0x5F4A 0x2443F +0x5F4B 0x24470 +0x5F4C 0x24440 +0x5F4D 0x24441 +0x5F4E 0x248C0 +0x5F4F 0x248C1 +0x5F50 0x24AA4 +0x5F51 0x24A97 +0x5F52 0x24AA5 +0x5F53 0x24A98 +0x5F54 0x24A99 +0x5F55 0x24A9A +0x5F57 0x24A9B +0x5F58 0x24AA6 +0x5F59 0x24A9C +0x5F5A 0x24A9D +0x5F5B 0x24A9E +0x5F5C 0x24A9F +0x5F5D 0x28ACE +0x5F5E 0x24AC8 +0x5F5F 0x24AA0 +0x5F60 0x24B19 +0x5F61 0x24C0D +0x5F62 0x250BF +0x5F63 0x252E9 +0x5F64 0x252EA +0x5F65 0x255A2 +0x5F66 0x255A3 +0x5F67 0x255A4 +0x5F68 0x255A5 +0x5F69 0x255A6 +0x5F6A 0x25715 +0x5F6B 0x25717 +0x5F6C 0x258BF +0x5F6D 0x258C0 +0x5F6E 0x258C1 +0x5F6F 0x258C2 +0x5F70 0x258C3 +0x5F71 0x258C4 +0x5F72 0x258C5 +0x5F73 0x2190D +0x5F74 0x25A23 +0x5F75 0x25ABE +0x5F76 0x25D03 +0x5F77 0x25D04 +0x5F78 0x25D05 +0x5F79 0x25D06 +0x5F7A 0x25D07 +0x5F7B 0x25D08 +0x5F7C 0x25D09 +0x5F7D 0x25D0A +0x5F7E 0x25D0B +0x6021 0x25D0C +0x6022 0x25D20 +0x6023 0x25D0D +0x6024 0x25D0E +0x6025 0x25D0F +0x6027 0x25F26 +0x6028 0x25F27 +0x6029 0x25F28 +0x602A 0x2615D +0x602B 0x2615E +0x602C 0x2615F +0x602D 0x26160 +0x602E 0x26161 +0x602F 0x26162 +0x6030 0x26163 +0x6031 0x26164 +0x6032 0x26165 +0x6033 0x26257 +0x6034 0x263CF +0x6035 0x263D0 +0x6036 0x26499 +0x6037 0x2649A +0x6038 0x265EA +0x6039 0x265EB +0x603A 0x265EC +0x603B 0x2687E +0x603C 0x2687F +0x603D 0x26880 +0x6040 0x26881 +0x6041 0x26882 +0x6042 0x268F3 +0x6043 0x26925 +0x6044 0x2699F +0x6045 0x269A0 +0x6046 0x269F3 +0x6047 0x26A00 +0x6048 0x26FEB +0x6049 0x26FEC +0x604A 0x26FED +0x604B 0x26FEE +0x604C 0x26FEF +0x604F 0x26FF0 +0x6050 0x26FF1 +0x6051 0x26FF2 +0x6052 0x26FF3 +0x6053 0x26FF4 +0x6054 0x26FF5 +0x6055 0x26FF9 +0x6056 0x26FFA +0x6057 0x26FFB +0x6058 0x26FFC +0x6059 0x26FFD +0x605A 0x26FFE +0x605B 0x26FFF +0x605C 0x27000 +0x605D 0x2F9AE +0x605E 0x27001 +0x605F 0x27002 +0x6060 0x27203 +0x6061 0x27486 +0x6062 0x27479 +0x6064 0x2747A +0x6065 0x2747B +0x6066 0x2747C +0x6067 0x27484 +0x6068 0x2747D +0x6069 0x2747E +0x606A 0x2747F +0x606B 0x27786 +0x606C 0x27787 +0x606D 0x27800 +0x606E 0x27801 +0x606F 0x27888 +0x6070 0x27889 +0x6071 0x2788A +0x6072 0x27AF5 +0x6074 0x27B25 +0x6075 0x27AF6 +0x6076 0x27DEB +0x6077 0x27DEC +0x6078 0x27DED +0x6079 0x27DEE +0x607B 0x27DEF +0x607C 0x27DF0 +0x607D 0x27F6C +0x607E 0x28121 +0x6121 0x28122 +0x6122 0x28123 +0x6123 0x28124 +0x6124 0x28125 +0x6125 0x28126 +0x6126 0x2827B +0x6127 0x2827C +0x6128 0x28391 +0x6129 0x28392 +0x612A 0x28393 +0x612B 0x2860E +0x612C 0x2860F +0x612D 0x28610 +0x612E 0x288B3 +0x612F 0x28936 +0x6130 0x28AC6 +0x6131 0x28AA1 +0x6132 0x28AA2 +0x6134 0x28AA3 +0x6135 0x28ACC +0x6136 0x28AA4 +0x6137 0x28AA5 +0x6138 0x28AA6 +0x6139 0x28ACB +0x613A 0x28AA7 +0x613C 0x28AA8 +0x613D 0x28AA9 +0x613E 0x28AAA +0x6140 0x28AAB +0x6141 0x28AAC +0x6142 0x28AAD +0x6144 0x28AAE +0x6145 0x28AAF +0x6146 0x28AB0 +0x6147 0x28D8C +0x6148 0x28D8D +0x6149 0x28D8E +0x614A 0x2F9F1 +0x614B 0x28D92 +0x614C 0x28D8F +0x614D 0x28F52 +0x614E 0x28F53 +0x614F 0x28F54 +0x6150 0x28F55 +0x6151 0x29129 +0x6153 0x292F3 +0x6154 0x292F4 +0x6155 0x2950D +0x6156 0x2950E +0x6157 0x2950F +0x6158 0x29510 +0x6159 0x29614 +0x615A 0x29771 +0x615B 0x29772 +0x615C 0x2990F +0x615D 0x29904 +0x615E 0x29906 +0x6160 0x29907 +0x6161 0x29ADC +0x6162 0x29ADD +0x6163 0x29B6D +0x6164 0x29B79 +0x6165 0x29B6E +0x6167 0x29CEC +0x6168 0x29DDD +0x6169 0x29DDE +0x616A 0x29DDF +0x616B 0x29DE0 +0x616C 0x29DE1 +0x616D 0x29DE2 +0x616E 0x29DE3 +0x616F 0x29DE4 +0x6170 0x29E3A +0x6171 0x29DE5 +0x6173 0x29DE6 +0x6174 0x2A06B +0x6175 0x2A06C +0x6176 0x2444E +0x6178 0x2A2BD +0x6179 0x2A2BE +0x617A 0x2A2BF +0x617B 0x2A334 +0x617D 0x2A512 +0x617E 0x20440 +0x6221 0x20441 +0x6222 0x21102 +0x6223 0x21103 +0x6224 0x21104 +0x6225 0x21105 +0x6226 0x21106 +0x6227 0x214D7 +0x6228 0x214CC +0x6229 0x21698 +0x622A 0x21906 +0x622B 0x21907 +0x622C 0x219AF +0x622D 0x219B0 +0x622E 0x21AEA +0x622F 0x21AF2 +0x6230 0x21FA2 +0x6231 0x21FA3 +0x6232 0x21FA4 +0x6233 0x22176 +0x6234 0x222F5 +0x6235 0x222F6 +0x6236 0x222F7 +0x6238 0x2293B +0x6239 0x22925 +0x623A 0x2293A +0x623B 0x2293C +0x623C 0x2293D +0x623D 0x2293E +0x623E 0x22E37 +0x623F 0x22E38 +0x6240 0x22E39 +0x6241 0x22E3A +0x6242 0x22E3B +0x6243 0x22E3C +0x6244 0x22E3D +0x6245 0x22E3E +0x6246 0x22E3F +0x6247 0x22E4B +0x6249 0x22E40 +0x624A 0x23022 +0x624B 0x23067 +0x624C 0x230D3 +0x624D 0x232FA +0x624F 0x237BC +0x6252 0x237A5 +0x6254 0x237B6 +0x6256 0x237A6 +0x6257 0x237BB +0x6258 0x237A7 +0x6259 0x237A8 +0x625A 0x237A9 +0x625B 0x237AA +0x625C 0x237AB +0x625D 0x237AC +0x625E 0x237BF +0x625F 0x237AD +0x6260 0x237AE +0x6261 0x237AF +0x6262 0x2392E +0x6263 0x23B00 +0x6264 0x2409D