changeset 796:2c3db720c065

6675856: Open charset tests Summary: Moved non-confidiential test cased from closed repo to open repo Reviewed-by: martin
author sherman
date Mon, 30 Jun 2008 14:06:34 -0700
parents 218b7e32fe38
children e655898cbaec
files jdk/test/sun/nio/cs/BufferUnderflowEUCTWTest.java jdk/test/sun/nio/cs/CheckCaseInsensitiveEncAliases.java jdk/test/sun/nio/cs/CheckHistoricalNames.java jdk/test/sun/nio/cs/ConvertSingle.java jdk/test/sun/nio/cs/Decode.java jdk/test/sun/nio/cs/DecoderOverflow.java jdk/test/sun/nio/cs/EUCJPUnderflowDecodeTest.java jdk/test/sun/nio/cs/EucJpLinux0212.java jdk/test/sun/nio/cs/EucJpLinuxDecoderRecoveryTest.java jdk/test/sun/nio/cs/EuroConverter.java jdk/test/sun/nio/cs/FindASCIICodingBugs.java jdk/test/sun/nio/cs/FindASCIIRangeCodingBugs.java jdk/test/sun/nio/cs/FindCanEncodeBugs.java jdk/test/sun/nio/cs/FindDecoderBugs.java jdk/test/sun/nio/cs/FindEncoderBugs.java jdk/test/sun/nio/cs/FindOneCharEncoderBugs.java jdk/test/sun/nio/cs/HWKatakanaMS932EncodeTest.java jdk/test/sun/nio/cs/ISCIITest.java jdk/test/sun/nio/cs/ISO2022JP.trailEsc jdk/test/sun/nio/cs/ISO8859x.java jdk/test/sun/nio/cs/JISAutoDetectTest.java jdk/test/sun/nio/cs/LatinCharReplacementTWTest.java jdk/test/sun/nio/cs/LeftOverSurrogate.java jdk/test/sun/nio/cs/MalformedSurrogates.java jdk/test/sun/nio/cs/NIOJISAutoDetectTest.java jdk/test/sun/nio/cs/ReadZero.java jdk/test/sun/nio/cs/SJISCanEncode.java jdk/test/sun/nio/cs/StreamEncoderClose.java jdk/test/sun/nio/cs/SurrogateGB18030Test.java jdk/test/sun/nio/cs/SurrogateTestEUCTW.java jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane15.surrogates jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane3.surrogates jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane4.surrogates jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane5.surrogates jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane6.surrogates jdk/test/sun/nio/cs/SurrogateTestEUCTW.plane7.surrogates jdk/test/sun/nio/cs/SurrogateTestHKSCS.java jdk/test/sun/nio/cs/Test4200310.sh jdk/test/sun/nio/cs/Test4206507.java jdk/test/sun/nio/cs/Test6254467.java jdk/test/sun/nio/cs/Test6275027.java jdk/test/sun/nio/cs/Test6392804.java jdk/test/sun/nio/cs/TestCompoundTest.java jdk/test/sun/nio/cs/TestConverterDroppedCharacters.java jdk/test/sun/nio/cs/TestCp834_SBCS.java jdk/test/sun/nio/cs/TestCp93xSISO.java jdk/test/sun/nio/cs/TestIBMBugs.java jdk/test/sun/nio/cs/TestISCII91.java jdk/test/sun/nio/cs/TestISO2022CNDecoder.java jdk/test/sun/nio/cs/TestISO2022JP.java jdk/test/sun/nio/cs/TestISO2022JPEncoder.java jdk/test/sun/nio/cs/TestISO2022JPSubBytes.java jdk/test/sun/nio/cs/TestIllegalISO2022Esc.java jdk/test/sun/nio/cs/TestIllegalSJIS.java jdk/test/sun/nio/cs/TestJIS0208Decoder.java jdk/test/sun/nio/cs/TestJIS0212Decoder.java jdk/test/sun/nio/cs/TestMS5022X.java jdk/test/sun/nio/cs/TestMiscEUC_JP.java jdk/test/sun/nio/cs/TestSJIS0213.java jdk/test/sun/nio/cs/TestTrailingEscapesISO2022JP.java jdk/test/sun/nio/cs/TestUTF8BOM.java jdk/test/sun/nio/cs/TestUTF_16.java jdk/test/sun/nio/cs/TestUTF_32.java jdk/test/sun/nio/cs/TestUni2HKSCS.java jdk/test/sun/nio/cs/TestX11JIS0201.java jdk/test/sun/nio/cs/UkrainianIsNotRussian.java jdk/test/sun/nio/cs/ZeroedByteArrayEUCTWTest.java
diffstat 67 files changed, 40607 insertions(+), 0 deletions(-) [+]
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!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";(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