changeset 5324:198fc6af040b

Merge
author yhuang
date Tue, 20 Apr 2010 01:30:04 -0700
parents 3130040cbe59 1d1927f9ec09
children f8b92bc1590b
files jdk/make/tools/src/build/tools/charsetmapping/CharsetMapping.java jdk/make/tools/src/build/tools/charsetmapping/GenerateDBCS.java jdk/make/tools/src/build/tools/charsetmapping/GenerateEUC_TW.java jdk/make/tools/src/build/tools/charsetmapping/GenerateMapping.java jdk/make/tools/src/build/tools/charsetmapping/GenerateSBCS.java jdk/src/share/classes/sun/io/ByteToCharHKSCS.java jdk/src/share/classes/sun/io/ByteToCharHKSCS_2001.java jdk/src/share/classes/sun/io/CharToByteHKSCS.java jdk/src/share/classes/sun/io/CharToByteHKSCS_2001.java jdk/src/share/classes/sun/nio/cs/ext/Big5.java jdk/src/share/classes/sun/nio/cs/ext/HKSCS_2001.java jdk/test/java/net/Socket/FDClose.java jdk/test/lib/security/cacerts/VerifyCACerts.java langtools/test/tools/javap/T6305779.java
diffstat 287 files changed, 48374 insertions(+), 22830 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 b6f633a93ae0ec4555ff4bf756f5e2150c9bdede jdk7-b85
 c94d9cc81f495d97817eba9d71b84fc45f7661a5 jdk7-b86
 b7456c473862048fa70ed8092313a4ef0a55d403 jdk7-b87
+7077b95d42f6b3942a8751bba033801ff50e5889 jdk7-b88
+44158f6d3b94c0fa020e33632532473d92d1ea96 jdk7-b89
--- a/.hgtags-top-repo	Sun Apr 11 23:24:24 2010 -0700
+++ b/.hgtags-top-repo	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85
 433a60a9c0bf1b26ee7e65cebaa89c541f497aed jdk7-b86
 6b1069f53fbc30663ccef49d78c31bb7d6967bde jdk7-b87
+82135c848d5fcddb065e98ae77b81077c858f593 jdk7-b88
+7f1ba4459972bf84b8201dc1cc4f62b1fe1c74f4 jdk7-b89
--- a/corba/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/corba/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 c67a9df7bc0ca291f08f9a9cc05cb78ea15d25e6 jdk7-b85
 6253e28826d16cf1aecc39ce04c8de1f6bf2df5f jdk7-b86
 09a41111a401d327f65e453384d976a10154d9ea jdk7-b87
+39e14d2da687c7e592142137517aaf689544820f jdk7-b88
+bb4424c5e778b842c064a8b1aa902b35f4397654 jdk7-b89
--- a/hotspot/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -86,3 +86,6 @@
 bf823ef06b4f211e66988d76a2e2669be5c0820e jdk7-b86
 07226e9eab8f74b37346b32715f829a2ef2c3188 hs18-b01
 e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87
+4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b jdk7-b88
+15836273ac2494f36ef62088bc1cb6f3f011f565 jdk7-b89
+4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b hs18-b02
--- a/hotspot/make/hotspot_version	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/make/hotspot_version	Tue Apr 20 01:30:04 2010 -0700
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=18
 HS_MINOR_VER=0
-HS_BUILD_NUMBER=02
+HS_BUILD_NUMBER=03
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=7
--- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1728,9 +1728,13 @@
       ShouldNotReachHere();
     }
   } else if (code == lir_cmp_l2i) {
+#ifdef _LP64
+    __ lcmp(left->as_register_lo(), right->as_register_lo(), dst->as_register());
+#else
     __ lcmp(left->as_register_hi(),  left->as_register_lo(),
             right->as_register_hi(), right->as_register_lo(),
             dst->as_register());
+#endif
   } else {
     ShouldNotReachHere();
   }
@@ -2849,7 +2853,7 @@
 
 
 void LIR_Assembler::align_backward_branch_target() {
-  __ align(16);
+  __ align(OptoLoopAlignment);
 }
 
 
--- a/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/c2_globals_sparc.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -60,9 +60,6 @@
 define_pd_global(intx, INTPRESSURE,                  48);  // large register set
 define_pd_global(intx, InteriorEntryAlignment,       16);  // = CodeEntryAlignment
 define_pd_global(intx, NewSizeThreadIncrease, ScaleForWordSize(4*K));
-// The default setting 16/16 seems to work best.
-// (For _228_jack 16/16 is 2% better than 4/4, 16/4, 32/32, 32/16, or 16/32.)
-define_pd_global(intx, OptoLoopAlignment,            16);  // = 4*wordSize
 define_pd_global(intx, RegisterCostAreaRatio,        12000);
 define_pd_global(bool, UseTLAB,                      true);
 define_pd_global(bool, ResizeTLAB,                   true);
--- a/hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/globals_sparc.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -40,6 +40,9 @@
 define_pd_global(bool, UncommonNullCast,            true);  // Uncommon-trap NULLs past to check cast
 
 define_pd_global(intx, CodeEntryAlignment,    32);
+// The default setting 16/16 seems to work best.
+// (For _228_jack 16/16 is 2% better than 4/4, 16/4, 32/32, 32/16, or 16/32.)
+define_pd_global(intx, OptoLoopAlignment,     16);  // = 4*wordSize
 define_pd_global(intx, InlineFrequencyCount,  50);  // we can use more inlining on the SPARC
 define_pd_global(intx, InlineSmallCode,       1500);
 #ifdef _LP64
--- a/hotspot/src/cpu/sparc/vm/sparc.ad	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/sparc.ad	Tue Apr 20 01:30:04 2010 -0700
@@ -471,6 +471,9 @@
 source %{
 #define __ _masm.
 
+// Block initializing store
+#define ASI_BLK_INIT_QUAD_LDD_P    0xE2
+
 // tertiary op of a LoadP or StoreP encoding
 #define REGP_OP true
 
@@ -6147,6 +6150,7 @@
 %}
 
 instruct prefetchw( memory mem ) %{
+  predicate(AllocatePrefetchStyle != 3 );
   match( PrefetchWrite mem );
   ins_cost(MEMORY_REF_COST);
 
@@ -6156,6 +6160,23 @@
   ins_pipe(iload_mem);
 %}
 
+// Use BIS instruction to prefetch.
+instruct prefetchw_bis( memory mem ) %{
+  predicate(AllocatePrefetchStyle == 3);
+  match( PrefetchWrite mem );
+  ins_cost(MEMORY_REF_COST);
+
+  format %{ "STXA   G0,$mem\t! // Block initializing store" %}
+  ins_encode %{
+     Register base = as_Register($mem$$base);
+     int disp = $mem$$disp;
+     if (disp != 0) {
+       __ add(base, AllocatePrefetchStepSize, base);
+     }
+     __ stxa(G0, base, G0, ASI_BLK_INIT_QUAD_LDD_P);
+  %}
+  ins_pipe(istore_mem_reg);
+%}
 
 //----------Store Instructions-------------------------------------------------
 // Store Byte
--- a/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/stubGenerator_sparc.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1148,7 +1148,7 @@
       __ andn(from, 7, from);     // Align address
       __ ldx(from, 0, O3);
       __ inc(from, 8);
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_loop);
       __ ldx(from, 0, O4);
       __ deccc(count, count_dec); // Can we do next iteration after this one?
@@ -1220,7 +1220,7 @@
     //
       __ andn(end_from, 7, end_from);     // Align address
       __ ldx(end_from, 0, O3);
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_loop);
       __ ldx(end_from, -8, O4);
       __ deccc(count, count_dec); // Can we do next iteration after this one?
@@ -1349,7 +1349,7 @@
     __ BIND(L_copy_byte);
       __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit);
       __ delayed()->nop();
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_byte_loop);
       __ ldub(from, offset, O3);
       __ deccc(count);
@@ -1445,7 +1445,7 @@
                                         L_aligned_copy, L_copy_byte);
     }
     // copy 4 elements (16 bytes) at a time
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_aligned_copy);
       __ dec(end_from, 16);
       __ ldx(end_from, 8, O3);
@@ -1461,7 +1461,7 @@
     __ BIND(L_copy_byte);
       __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit);
       __ delayed()->nop();
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_byte_loop);
       __ dec(end_from);
       __ dec(end_to);
@@ -1577,7 +1577,7 @@
     __ BIND(L_copy_2_bytes);
       __ br_zero(Assembler::zero, false, Assembler::pt, count, L_exit);
       __ delayed()->nop();
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_2_bytes_loop);
       __ lduh(from, offset, O3);
       __ deccc(count);
@@ -1684,7 +1684,7 @@
                                         L_aligned_copy, L_copy_2_bytes);
     }
     // copy 4 elements (16 bytes) at a time
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_aligned_copy);
       __ dec(end_from, 16);
       __ ldx(end_from, 8, O3);
@@ -1781,7 +1781,7 @@
     // copy with shift 4 elements (16 bytes) at a time
       __ dec(count, 4);   // The cmp at the beginning guaranty count >= 4
 
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_16_bytes);
       __ ldx(from, 4, O4);
       __ deccc(count, 4); // Can we do next iteration after this one?
@@ -1907,7 +1907,7 @@
     // to form 2 aligned 8-bytes chunks to store.
     //
       __ ldx(end_from, -4, O3);
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_16_bytes);
       __ ldx(end_from, -12, O4);
       __ deccc(count, 4);
@@ -1929,7 +1929,7 @@
       __ delayed()->inc(count, 4);
 
     // copy 4 elements (16 bytes) at a time
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_aligned_copy);
       __ dec(end_from, 16);
       __ ldx(end_from, 8, O3);
@@ -2000,6 +2000,27 @@
   //      to:    O1
   //      count: O2 treated as signed
   //
+  // count -= 2;
+  // if ( count >= 0 ) { // >= 2 elements
+  //   if ( count > 6) { // >= 8 elements
+  //     count -= 6; // original count - 8
+  //     do {
+  //       copy_8_elements;
+  //       count -= 8;
+  //     } while ( count >= 0 );
+  //     count += 6;
+  //   }
+  //   if ( count >= 0 ) { // >= 2 elements
+  //     do {
+  //       copy_2_elements;
+  //     } while ( (count=count-2) >= 0 );
+  //   }
+  // }
+  // count += 2;
+  // if ( count != 0 ) { // 1 element left
+  //   copy_1_element;
+  // }
+  //
   void generate_disjoint_long_copy_core(bool aligned) {
     Label L_copy_8_bytes, L_copy_16_bytes, L_exit;
     const Register from    = O0;  // source array address
@@ -2012,7 +2033,39 @@
       __ mov(G0, offset0);   // offset from start of arrays (0)
       __ brx(Assembler::negative, false, Assembler::pn, L_copy_8_bytes );
       __ delayed()->add(offset0, 8, offset8);
-      __ align(16);
+
+    // Copy by 64 bytes chunks
+    Label L_copy_64_bytes;
+    const Register from64 = O3;  // source address
+    const Register to64   = G3;  // destination address
+      __ subcc(count, 6, O3);
+      __ brx(Assembler::negative, false, Assembler::pt, L_copy_16_bytes );
+      __ delayed()->mov(to,   to64);
+      // Now we can use O4(offset0), O5(offset8) as temps
+      __ mov(O3, count);
+      __ mov(from, from64);
+
+      __ align(OptoLoopAlignment);
+    __ BIND(L_copy_64_bytes);
+      for( int off = 0; off < 64; off += 16 ) {
+        __ ldx(from64,  off+0, O4);
+        __ ldx(from64,  off+8, O5);
+        __ stx(O4, to64,  off+0);
+        __ stx(O5, to64,  off+8);
+      }
+      __ deccc(count, 8);
+      __ inc(from64, 64);
+      __ brx(Assembler::greaterEqual, false, Assembler::pt, L_copy_64_bytes);
+      __ delayed()->inc(to64, 64);
+
+      // Restore O4(offset0), O5(offset8)
+      __ sub(from64, from, offset0);
+      __ inccc(count, 6);
+      __ brx(Assembler::negative, false, Assembler::pn, L_copy_8_bytes );
+      __ delayed()->add(offset0, 8, offset8);
+
+      // Copy by 16 bytes chunks
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_16_bytes);
       __ ldx(from, offset0, O3);
       __ ldx(from, offset8, G3);
@@ -2023,6 +2076,7 @@
       __ brx(Assembler::greaterEqual, false, Assembler::pt, L_copy_16_bytes);
       __ delayed()->inc(offset8, 16);
 
+      // Copy last 8 bytes
     __ BIND(L_copy_8_bytes);
       __ inccc(count, 2);
       __ brx(Assembler::zero, true, Assembler::pn, L_exit );
@@ -2085,7 +2139,7 @@
       __ brx(Assembler::lessEqual, false, Assembler::pn, L_copy_8_bytes );
       __ delayed()->sllx(count, LogBytesPerLong, offset8);
       __ sub(offset8, 8, offset0);
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_16_bytes);
       __ ldx(from, offset8, O2);
       __ ldx(from, offset0, O3);
@@ -2351,7 +2405,7 @@
     //   (O5 = 0; ; O5 += wordSize) --- offset from src, dest arrays
     //   (O2 = len; O2 != 0; O2--) --- number of oops *remaining*
     //   G3, G4, G5 --- current oop, oop.klass, oop.klass.super
-    __ align(16);
+    __ align(OptoLoopAlignment);
 
     __ BIND(store_element);
     __ deccc(G1_remain);                // decrement the count
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -86,14 +86,24 @@
     if (FLAG_IS_DEFAULT(InteriorEntryAlignment)) {
       FLAG_SET_DEFAULT(InteriorEntryAlignment, 4);
     }
+    if (is_niagara1_plus()) {
+      if (AllocatePrefetchStyle > 0 && FLAG_IS_DEFAULT(AllocatePrefetchStyle)) {
+        // Use BIS instruction for allocation prefetch.
+        FLAG_SET_DEFAULT(AllocatePrefetchStyle, 3);
+        if (FLAG_IS_DEFAULT(AllocatePrefetchDistance)) {
+          // Use smaller prefetch distance on N2 with BIS
+          FLAG_SET_DEFAULT(AllocatePrefetchDistance, 64);
+        }
+      }
+      if (AllocatePrefetchStyle != 3 && FLAG_IS_DEFAULT(AllocatePrefetchDistance)) {
+        // Use different prefetch distance without BIS
+        FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256);
+      }
+    }
+#endif
     if (FLAG_IS_DEFAULT(OptoLoopAlignment)) {
       FLAG_SET_DEFAULT(OptoLoopAlignment, 4);
     }
-    if (is_niagara1_plus() && FLAG_IS_DEFAULT(AllocatePrefetchDistance)) {
-      // Use smaller prefetch distance on N2
-      FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256);
-    }
-#endif
   }
 
   // Use hardware population count instruction if available.
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -3365,6 +3365,13 @@
 
 #else // LP64
 
+void Assembler::set_byte_if_not_zero(Register dst) {
+  int enc = prefix_and_encode(dst->encoding(), true);
+  emit_byte(0x0F);
+  emit_byte(0x95);
+  emit_byte(0xE0 | enc);
+}
+
 // 64bit only pieces of the assembler
 // This should only be used by 64bit instructions that can use rip-relative
 // it cannot be used by instructions that want an immediate value.
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2690,19 +2690,14 @@
   } else {
     assert(code == lir_cmp_l2i, "check");
 #ifdef _LP64
-      Register dest = dst->as_register();
-      __ xorptr(dest, dest);
-      Label high, done;
-      __ cmpptr(left->as_register_lo(), right->as_register_lo());
-      __ jcc(Assembler::equal, done);
-      __ jcc(Assembler::greater, high);
-      __ decrement(dest);
-      __ jmp(done);
-      __ bind(high);
-      __ increment(dest);
-
-      __ bind(done);
-
+    Label done;
+    Register dest = dst->as_register();
+    __ cmpptr(left->as_register_lo(), right->as_register_lo());
+    __ movl(dest, -1);
+    __ jccb(Assembler::less, done);
+    __ set_byte_if_not_zero(dest);
+    __ movzbl(dest, dest);
+    __ bind(done);
 #else
     __ lcmp2int(left->as_register_hi(),
                 left->as_register_lo(),
--- a/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -781,7 +781,7 @@
 
   // Restore SP from BP if the exception PC is a MethodHandle call site.
   NOT_LP64(__ get_thread(thread);)
-  __ cmpl(Address(thread, JavaThread::is_method_handle_exception_offset()), 0);
+  __ cmpl(Address(thread, JavaThread::is_method_handle_return_offset()), 0);
   __ cmovptr(Assembler::notEqual, rsp, rbp);
 
   // continue at exception handler (return address removed)
--- a/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/c2_globals_x86.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -80,7 +80,6 @@
 // Ergonomics related flags
 define_pd_global(uint64_t,MaxRAM,                    4ULL*G);
 #endif // AMD64
-define_pd_global(intx, OptoLoopAlignment,            16);
 define_pd_global(intx, RegisterCostAreaRatio,        16000);
 
 // Peephole and CISC spilling both break the graph, and so makes the
--- a/hotspot/src/cpu/x86/vm/globals_x86.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/globals_x86.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -45,6 +45,7 @@
 #else
 define_pd_global(intx, CodeEntryAlignment,       16);
 #endif // COMPILER2
+define_pd_global(intx, OptoLoopAlignment,        16);
 define_pd_global(intx, InlineFrequencyCount,     100);
 define_pd_global(intx, InlineSmallCode,          1000);
 
--- a/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/runtime_x86_32.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -115,8 +115,8 @@
 
   // rax: exception handler for given <exception oop/exception pc>
 
-  // Restore SP from BP if the exception PC is a MethodHandle call.
-  __ cmpl(Address(rcx, JavaThread::is_method_handle_exception_offset()), 0);
+  // Restore SP from BP if the exception PC is a MethodHandle call site.
+  __ cmpl(Address(rcx, JavaThread::is_method_handle_return_offset()), 0);
   __ cmovptr(Assembler::notEqual, rsp, rbp);
 
   // We have a handler in rax, (could be deopt blob)
--- a/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/sharedRuntime_x86_64.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -3328,8 +3328,8 @@
 
   // rax: exception handler
 
-  // Restore SP from BP if the exception PC is a MethodHandle call.
-  __ cmpl(Address(r15_thread, JavaThread::is_method_handle_exception_offset()), 0);
+  // Restore SP from BP if the exception PC is a MethodHandle call site.
+  __ cmpl(Address(r15_thread, JavaThread::is_method_handle_return_offset()), 0);
   __ cmovptr(Assembler::notEqual, rsp, rbp);
 
   // We have a handler in rax (could be deopt blob).
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -430,7 +430,7 @@
     __ verify_oop(exception_oop);
 
     // Restore SP from BP if the exception PC is a MethodHandle call site.
-    __ cmpl(Address(thread, JavaThread::is_method_handle_exception_offset()), 0);
+    __ cmpl(Address(thread, JavaThread::is_method_handle_return_offset()), 0);
     __ cmovptr(Assembler::notEqual, rsp, rbp);
 
     // continue at exception handler (return address removed)
@@ -812,7 +812,7 @@
     Label L_copy_64_bytes_loop, L_copy_64_bytes, L_copy_8_bytes, L_exit;
     // Copy 64-byte chunks
     __ jmpb(L_copy_64_bytes);
-    __ align(16);
+    __ align(OptoLoopAlignment);
   __ BIND(L_copy_64_bytes_loop);
 
     if(UseUnalignedLoadStores) {
@@ -874,7 +874,7 @@
     Label L_copy_64_bytes_loop, L_copy_64_bytes, L_copy_8_bytes, L_exit;
     // Copy 64-byte chunks
     __ jmpb(L_copy_64_bytes);
-    __ align(16);
+    __ align(OptoLoopAlignment);
   __ BIND(L_copy_64_bytes_loop);
     __ movq(mmx0, Address(from, 0));
     __ movq(mmx1, Address(from, 8));
@@ -1144,7 +1144,7 @@
       __ movl(Address(to, count, sf, 0), rdx);
       __ jmpb(L_copy_8_bytes);
 
-      __ align(16);
+      __ align(OptoLoopAlignment);
       // Move 8 bytes
     __ BIND(L_copy_8_bytes_loop);
       if (UseXMMForArrayCopy) {
@@ -1235,7 +1235,7 @@
       }
     } else {
       __ jmpb(L_copy_8_bytes);
-      __ align(16);
+      __ align(OptoLoopAlignment);
     __ BIND(L_copy_8_bytes_loop);
       __ fild_d(Address(from, 0));
       __ fistp_d(Address(from, to_from, Address::times_1));
@@ -1282,7 +1282,7 @@
 
     __ jmpb(L_copy_8_bytes);
 
-    __ align(16);
+    __ align(OptoLoopAlignment);
   __ BIND(L_copy_8_bytes_loop);
     if (VM_Version::supports_mmx()) {
       if (UseXMMForArrayCopy) {
@@ -1454,7 +1454,7 @@
     // Loop control:
     //   for (count = -count; count != 0; count++)
     // Base pointers src, dst are biased by 8*count,to last element.
-    __ align(16);
+    __ align(OptoLoopAlignment);
 
     __ BIND(L_store_element);
     __ movptr(to_element_addr, elem);     // store the oop
--- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -871,9 +871,8 @@
   }
 
   address generate_fp_mask(const char *stub_name, int64_t mask) {
+    __ align(CodeEntryAlignment);
     StubCodeMark mark(this, "StubRoutines", stub_name);
-
-    __ align(16);
     address start = __ pc();
 
     __ emit_data64( mask, relocInfo::none );
@@ -1268,7 +1267,7 @@
                              Label& L_copy_32_bytes, Label& L_copy_8_bytes) {
     DEBUG_ONLY(__ stop("enter at entry label, not here"));
     Label L_loop;
-    __ align(16);
+    __ align(OptoLoopAlignment);
   __ BIND(L_loop);
     if(UseUnalignedLoadStores) {
       __ movdqu(xmm0, Address(end_from, qword_count, Address::times_8, -24));
@@ -1309,7 +1308,7 @@
                               Label& L_copy_32_bytes, Label& L_copy_8_bytes) {
     DEBUG_ONLY(__ stop("enter at entry label, not here"));
     Label L_loop;
-    __ align(16);
+    __ align(OptoLoopAlignment);
   __ BIND(L_loop);
     if(UseUnalignedLoadStores) {
       __ movdqu(xmm0, Address(from, qword_count, Address::times_8, 16));
@@ -2229,7 +2228,7 @@
     // Loop control:
     //   for (count = -count; count != 0; count++)
     // Base pointers src, dst are biased by 8*(count-1),to last element.
-    __ align(16);
+    __ align(OptoLoopAlignment);
 
     __ BIND(L_store_element);
     __ store_heap_oop(to_element_addr, rax_oop);  // store the oop
--- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -206,7 +206,6 @@
 
   // Update the invocation counter
   if ((UseCompiler || CountCompiledCalls) && !method->is_synchronized()) {
-    thread->set_do_not_unlock();
     InvocationCounter *counter = method->invocation_counter();
     counter->increment();
     if (counter->reached_InvocationLimit()) {
@@ -215,7 +214,6 @@
       if (HAS_PENDING_EXCEPTION)
         goto unwind_and_return;
     }
-    thread->clr_do_not_unlock();
   }
 
   // Lock if necessary
--- a/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/zero/vm/methodHandles_zero.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1,6 +1,6 @@
 /*
  * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
- * Copyright 2009 Red Hat, Inc.
+ * Copyright 2009, 2010 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,4 +23,10 @@
  *
  */
 
-// This file is intentionally empty
+#include "incls/_precompiled.incl"
+#include "incls/_methodHandles_zero.cpp.incl"
+
+void MethodHandles::generate_method_handle_stub(MacroAssembler*          masm,
+                                                MethodHandles::EntryKind ek) {
+  ShouldNotCallThis();
+}
--- a/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/cpu/zero/vm/stubRoutines_zero.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1,6 +1,6 @@
 /*
  * Copyright 2003-2005 Sun Microsystems, Inc.  All Rights Reserved.
- * Copyright 2007, 2008, 2009 Red Hat, Inc.
+ * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,6 +41,10 @@
     code_size2 = 0       // if these are too small.  Simply increase
   };                     // them if that happens.
 
+  enum method_handles_platform_dependent_constants {
+    method_handles_adapters_code_size = 0
+  };
+
 #ifdef IA32
   class x86 {
     friend class VMStructs;
--- a/hotspot/src/os/linux/vm/attachListener_linux.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/linux/vm/attachListener_linux.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -192,7 +192,8 @@
     res = ::bind(listener, (struct sockaddr*)&addr, sizeof(addr));
   }
   if (res == -1) {
-    sprintf(path, "%s/.java_pid%d", os::get_temp_directory(), os::current_process_id());
+    snprintf(path, PATH_MAX+1, "%s/.java_pid%d",
+             os::get_temp_directory(), os::current_process_id());
     strcpy(addr.sun_path, path);
     ::unlink(path);
     res = ::bind(listener, (struct sockaddr*)&addr, sizeof(addr));
@@ -460,13 +461,14 @@
   if (init_at_startup() || is_initialized()) {
     return false;               // initialized at startup or already initialized
   }
-  char fn[32];
+  char fn[128];
   sprintf(fn, ".attach_pid%d", os::current_process_id());
   int ret;
   struct stat64 st;
   RESTARTABLE(::stat64(fn, &st), ret);
   if (ret == -1) {
-    sprintf(fn, "/tmp/.attach_pid%d", os::current_process_id());
+    snprintf(fn, sizeof(fn), "%s/.attach_pid%d",
+             os::get_temp_directory(), os::current_process_id());
     RESTARTABLE(::stat64(fn, &st), ret);
   }
   if (ret == 0) {
--- a/hotspot/src/os/linux/vm/os_linux.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/linux/vm/os_linux.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1522,7 +1522,10 @@
 
 const char* os::dll_file_extension() { return ".so"; }
 
-const char* os::get_temp_directory() { return "/tmp/"; }
+const char* os::get_temp_directory() {
+  const char *prop = Arguments::get_property("java.io.tmpdir");
+  return prop == NULL ? "/tmp" : prop;
+}
 
 static bool file_exists(const char* filename) {
   struct stat statbuf;
@@ -2305,7 +2308,8 @@
   char buf[40];
   int num = Atomic::add(1, &cnt);
 
-  sprintf(buf, "/tmp/hs-vm-%d-%d", os::current_process_id(), num);
+  snprintf(buf, sizeof(buf), "%s/hs-vm-%d-%d",
+           os::get_temp_directory(), os::current_process_id(), num);
   unlink(buf);
 
   int fd = open(buf, O_CREAT | O_RDWR, S_IRWXU);
--- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -145,11 +145,11 @@
 
   const char* tmpdir = os::get_temp_directory();
   const char* perfdir = PERFDATA_NAME;
-  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2;
+  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3;
   char* dirname = NEW_C_HEAP_ARRAY(char, nbytes);
 
   // construct the path name to user specific tmp directory
-  snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user);
+  snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user);
 
   return dirname;
 }
@@ -331,8 +331,9 @@
     }
 
     char* usrdir_name = NEW_C_HEAP_ARRAY(char,
-                              strlen(tmpdirname) + strlen(dentry->d_name) + 1);
+                              strlen(tmpdirname) + strlen(dentry->d_name) + 2);
     strcpy(usrdir_name, tmpdirname);
+    strcat(usrdir_name, "/");
     strcat(usrdir_name, dentry->d_name);
 
     DIR* subdirp = os::opendir(usrdir_name);
--- a/hotspot/src/os/solaris/vm/attachListener_solaris.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/solaris/vm/attachListener_solaris.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -375,7 +375,8 @@
     return -1;
   }
 
-  sprintf(door_path, "%s/.java_pid%d", os::get_temp_directory(), os::current_process_id());
+  snprintf(door_path, sizeof(door_path), "%s/.java_pid%d",
+           os::get_temp_directory(), os::current_process_id());
   RESTARTABLE(::creat(door_path, S_IRUSR | S_IWUSR), fd);
 
   if (fd == -1) {
@@ -591,13 +592,14 @@
   if (init_at_startup() || is_initialized()) {
     return false;               // initialized at startup or already initialized
   }
-  char fn[32];
+  char fn[128];
   sprintf(fn, ".attach_pid%d", os::current_process_id());
   int ret;
   struct stat64 st;
   RESTARTABLE(::stat64(fn, &st), ret);
   if (ret == -1) {
-    sprintf(fn, "/tmp/.attach_pid%d", os::current_process_id());
+    snprintf(fn, sizeof(fn), "%s/.attach_pid%d",
+             os::get_temp_directory(), os::current_process_id());
     RESTARTABLE(::stat64(fn, &st), ret);
   }
   if (ret == 0) {
--- a/hotspot/src/os/solaris/vm/os_solaris.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/solaris/vm/os_solaris.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -676,15 +676,6 @@
 }
 
 
-static char* get_property(char* name, char* buffer, int buffer_size) {
-  if (os::getenv(name, buffer, buffer_size)) {
-    return buffer;
-  }
-  static char empty[] = "";
-  return empty;
-}
-
-
 void os::init_system_properties_values() {
   char arch[12];
   sysinfo(SI_ARCHITECTURE, arch, sizeof(arch));
@@ -1826,7 +1817,10 @@
 
 const char* os::dll_file_extension() { return ".so"; }
 
-const char* os::get_temp_directory() { return "/tmp/"; }
+const char* os::get_temp_directory() {
+  const char *prop = Arguments::get_property("java.io.tmpdir");
+  return prop == NULL ? "/tmp" : prop;
+}
 
 static bool file_exists(const char* filename) {
   struct stat statbuf;
--- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -147,11 +147,11 @@
 
   const char* tmpdir = os::get_temp_directory();
   const char* perfdir = PERFDATA_NAME;
-  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2;
+  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3;
   char* dirname = NEW_C_HEAP_ARRAY(char, nbytes);
 
   // construct the path name to user specific tmp directory
-  snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user);
+  snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user);
 
   return dirname;
 }
@@ -322,8 +322,9 @@
     }
 
     char* usrdir_name = NEW_C_HEAP_ARRAY(char,
-                              strlen(tmpdirname) + strlen(dentry->d_name) + 1);
+                              strlen(tmpdirname) + strlen(dentry->d_name) + 2);
     strcpy(usrdir_name, tmpdirname);
+    strcat(usrdir_name, "/");
     strcat(usrdir_name, dentry->d_name);
 
     DIR* subdirp = os::opendir(usrdir_name);
--- a/hotspot/src/os/windows/vm/os_windows.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/windows/vm/os_windows.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -998,15 +998,16 @@
 
 const char* os::dll_file_extension() { return ".dll"; }
 
-const char * os::get_temp_directory()
-{
-    static char path_buf[MAX_PATH];
-    if (GetTempPath(MAX_PATH, path_buf)>0)
-      return path_buf;
-    else{
-      path_buf[0]='\0';
-      return path_buf;
-    }
+const char* os::get_temp_directory() {
+  const char *prop = Arguments::get_property("java.io.tmpdir");
+  if (prop != 0) return prop;
+  static char path_buf[MAX_PATH];
+  if (GetTempPath(MAX_PATH, path_buf)>0)
+    return path_buf;
+  else{
+    path_buf[0]='\0';
+    return path_buf;
+  }
 }
 
 static bool file_exists(const char* filename) {
--- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -149,11 +149,11 @@
 
   const char* tmpdir = os::get_temp_directory();
   const char* perfdir = PERFDATA_NAME;
-  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 2;
+  size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3;
   char* dirname = NEW_C_HEAP_ARRAY(char, nbytes);
 
   // construct the path name to user specific tmp directory
-  _snprintf(dirname, nbytes, "%s%s_%s", tmpdir, perfdir, user);
+  _snprintf(dirname, nbytes, "%s\\%s_%s", tmpdir, perfdir, user);
 
   return dirname;
 }
@@ -318,8 +318,9 @@
     }
 
     char* usrdir_name = NEW_C_HEAP_ARRAY(char,
-                              strlen(tmpdirname) + strlen(dentry->d_name) + 1);
+                              strlen(tmpdirname) + strlen(dentry->d_name) + 2);
     strcpy(usrdir_name, tmpdirname);
+    strcat(usrdir_name, "\\");
     strcat(usrdir_name, dentry->d_name);
 
     DIR* subdirp = os::opendir(usrdir_name);
--- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2608,6 +2608,46 @@
     } else if (opr->is_double_xmm()) {
       assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation");
       VMReg rname_first  = opr->as_xmm_double_reg()->as_VMReg();
+#  ifdef _LP64
+      first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));
+      second = &_int_0_scope_value;
+#  else
+      first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first));
+      // %%% This is probably a waste but we'll keep things as they were for now
+      if (true) {
+        VMReg rname_second = rname_first->next();
+        second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second));
+      }
+#  endif
+#endif
+
+    } else if (opr->is_double_fpu()) {
+      // On SPARC, fpu_regnrLo/fpu_regnrHi represents the two halves of
+      // the double as float registers in the native ordering. On X86,
+      // fpu_regnrLo is a FPU stack slot whose VMReg represents
+      // the low-order word of the double and fpu_regnrLo + 1 is the
+      // name for the other half.  *first and *second must represent the
+      // least and most significant words, respectively.
+
+#ifdef X86
+      // the exact location of fpu stack values is only known
+      // during fpu stack allocation, so the stack allocator object
+      // must be present
+      assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
+      assert(_fpu_stack_allocator != NULL, "must be present");
+      opr = _fpu_stack_allocator->to_fpu_stack(opr);
+
+      assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
+#endif
+#ifdef SPARC
+      assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
+#endif
+
+      VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());
+#ifdef _LP64
+      first = new LocationValue(Location::new_reg_loc(Location::dbl, rname_first));
+      second = &_int_0_scope_value;
+#else
       first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first));
       // %%% This is probably a waste but we'll keep things as they were for now
       if (true) {
@@ -2616,37 +2656,6 @@
       }
 #endif
 
-    } else if (opr->is_double_fpu()) {
-      // On SPARC, fpu_regnrLo/fpu_regnrHi represents the two halves of
-      // the double as float registers in the native ordering. On X86,
-      // fpu_regnrLo is a FPU stack slot whose VMReg represents
-      // the low-order word of the double and fpu_regnrLo + 1 is the
-      // name for the other half.  *first and *second must represent the
-      // least and most significant words, respectively.
-
-#ifdef X86
-      // the exact location of fpu stack values is only known
-      // during fpu stack allocation, so the stack allocator object
-      // must be present
-      assert(use_fpu_stack_allocation(), "should not have float stack values without fpu stack allocation (all floats must be SSE2)");
-      assert(_fpu_stack_allocator != NULL, "must be present");
-      opr = _fpu_stack_allocator->to_fpu_stack(opr);
-
-      assert(opr->fpu_regnrLo() == opr->fpu_regnrHi(), "assumed in calculation (only fpu_regnrHi is used)");
-#endif
-#ifdef SPARC
-      assert(opr->fpu_regnrLo() == opr->fpu_regnrHi() + 1, "assumed in calculation (only fpu_regnrHi is used)");
-#endif
-
-      VMReg rname_first = frame_map()->fpu_regname(opr->fpu_regnrHi());
-
-      first = new LocationValue(Location::new_reg_loc(Location::normal, rname_first));
-      // %%% This is probably a waste but we'll keep things as they were for now
-      if (true) {
-        VMReg rname_second = rname_first->next();
-        second = new LocationValue(Location::new_reg_loc(Location::normal, rname_second));
-      }
-
     } else {
       ShouldNotReachHere();
       first = NULL;
--- a/hotspot/src/share/vm/ci/ciConstant.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciConstant.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -36,7 +36,7 @@
              basictype_to_str(basic_type()));
   switch (basic_type()) {
   case T_BOOLEAN:
-    tty->print("%s", bool_to_str(_value._int == 0));
+    tty->print("%s", bool_to_str(_value._int != 0));
     break;
   case T_CHAR:
   case T_BYTE:
--- a/hotspot/src/share/vm/ci/ciEnv.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -385,11 +385,6 @@
                                                      KILL_COMPILE_ON_FATAL_(fail_type));
   }
 
-  if (found_klass != NULL) {
-    // Found it.  Build a CI handle.
-    return get_object(found_klass)->as_klass();
-  }
-
   // If we fail to find an array klass, look again for its element type.
   // The element type may be available either locally or via constraints.
   // In either case, if we can find the element type in the system dictionary,
@@ -414,6 +409,11 @@
     }
   }
 
+  if (found_klass != NULL) {
+    // Found it.  Build a CI handle.
+    return get_object(found_klass)->as_klass();
+  }
+
   if (require_local)  return NULL;
   // Not yet loaded into the VM, or not governed by loader constraints.
   // Make a CI representative for it.
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2956,8 +2956,8 @@
 #endif
     bool compact_fields   = CompactFields;
     int  allocation_style = FieldsAllocationStyle;
-    if( allocation_style < 0 || allocation_style > 1 ) { // Out of range?
-      assert(false, "0 <= FieldsAllocationStyle <= 1");
+    if( allocation_style < 0 || allocation_style > 2 ) { // Out of range?
+      assert(false, "0 <= FieldsAllocationStyle <= 2");
       allocation_style = 1; // Optimistic
     }
 
@@ -2993,6 +2993,25 @@
     } else if( allocation_style == 1 ) {
       // Fields order: longs/doubles, ints, shorts/chars, bytes, oops
       next_nonstatic_double_offset = next_nonstatic_field_offset;
+    } else if( allocation_style == 2 ) {
+      // Fields allocation: oops fields in super and sub classes are together.
+      if( nonstatic_field_size > 0 && super_klass() != NULL &&
+          super_klass->nonstatic_oop_map_size() > 0 ) {
+        int map_size = super_klass->nonstatic_oop_map_size();
+        OopMapBlock* first_map = super_klass->start_of_nonstatic_oop_maps();
+        OopMapBlock* last_map = first_map + map_size - 1;
+        int next_offset = last_map->offset() + (last_map->count() * heapOopSize);
+        if (next_offset == next_nonstatic_field_offset) {
+          allocation_style = 0;   // allocate oops first
+          next_nonstatic_oop_offset    = next_nonstatic_field_offset;
+          next_nonstatic_double_offset = next_nonstatic_oop_offset +
+                                         (nonstatic_oop_count * heapOopSize);
+        }
+      }
+      if( allocation_style == 2 ) {
+        allocation_style = 1;     // allocate oops last
+        next_nonstatic_double_offset = next_nonstatic_field_offset;
+      }
     } else {
       ShouldNotReachHere();
     }
--- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -334,33 +334,6 @@
   return NULL;
 }
 
-
-klassOop LoaderConstraintTable::find_constrained_elem_klass(symbolHandle name,
-                                                            symbolHandle elem_name,
-                                                            Handle loader,
-                                                            TRAPS) {
-  LoaderConstraintEntry *p = *(find_loader_constraint(name, loader));
-  if (p != NULL) {
-    assert(p->klass() == NULL, "Expecting null array klass");
-
-    // The array name has a constraint, but it will not have a class. Check
-    // each loader for an associated elem
-    for (int i = 0; i < p->num_loaders(); i++) {
-      Handle no_protection_domain;
-
-      klassOop k = SystemDictionary::find(elem_name, p->loader(i), no_protection_domain, THREAD);
-      if (k != NULL) {
-        // Return the first elem klass found.
-        return k;
-      }
-    }
-  }
-
-  // No constraints, or else no klass loaded yet.
-  return NULL;
-}
-
-
 void LoaderConstraintTable::ensure_loader_constraint_capacity(
                                                      LoaderConstraintEntry *p,
                                                     int nfree) {
--- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -66,9 +66,6 @@
   //                                           bool is_method, TRAPS)
 
   klassOop find_constrained_klass(symbolHandle name, Handle loader);
-  klassOop find_constrained_elem_klass(symbolHandle name, symbolHandle elem_name,
-                                       Handle loader, TRAPS);
-
 
   // Class loader constraints
 
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2178,9 +2178,8 @@
   // a loader constraint that would require this loader to return the
   // klass that is already loaded.
   if (FieldType::is_array(class_name())) {
-    // Array classes are hard because their klassOops are not kept in the
-    // constraint table. The array klass may be constrained, but the elem class
-    // may not be.
+    // For array classes, their klassOops are not kept in the
+    // constraint table. The element klassOops are.
     jint dimension;
     symbolOop object_key;
     BasicType t = FieldType::get_array_info(class_name(), &dimension,
@@ -2190,8 +2189,9 @@
     } else {
       symbolHandle elem_name(THREAD, object_key);
       MutexLocker mu(SystemDictionary_lock, THREAD);
-      klass = constraints()->find_constrained_elem_klass(class_name, elem_name, class_loader, THREAD);
+      klass = constraints()->find_constrained_klass(elem_name, class_loader);
     }
+    // If element class already loaded, allocate array klass
     if (klass != NULL) {
       klass = Klass::cast(klass)->array_klass_or_null(dimension);
     }
@@ -2209,22 +2209,38 @@
                                              Handle class_loader1,
                                              Handle class_loader2,
                                              Thread* THREAD) {
-  unsigned int d_hash1 = dictionary()->compute_hash(class_name, class_loader1);
+  symbolHandle constraint_name;
+  if (!FieldType::is_array(class_name())) {
+    constraint_name = class_name;
+  } else {
+    // For array classes, their klassOops are not kept in the
+    // constraint table. The element classes are.
+    jint dimension;
+    symbolOop object_key;
+    BasicType t = FieldType::get_array_info(class_name(), &dimension,
+                                            &object_key, CHECK_(false));
+    // primitive types always pass
+    if (t != T_OBJECT) {
+      return true;
+    } else {
+      constraint_name = symbolHandle(THREAD, object_key);
+    }
+  }
+  unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, class_loader1);
   int d_index1 = dictionary()->hash_to_index(d_hash1);
 
-  unsigned int d_hash2 = dictionary()->compute_hash(class_name, class_loader2);
+  unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, class_loader2);
   int d_index2 = dictionary()->hash_to_index(d_hash2);
+  {
+  MutexLocker mu_s(SystemDictionary_lock, THREAD);
 
-  {
-    MutexLocker mu_s(SystemDictionary_lock, THREAD);
+  // Better never do a GC while we're holding these oops
+  No_Safepoint_Verifier nosafepoint;
 
-    // Better never do a GC while we're holding these oops
-    No_Safepoint_Verifier nosafepoint;
-
-    klassOop klass1 = find_class(d_index1, d_hash1, class_name, class_loader1);
-    klassOop klass2 = find_class(d_index2, d_hash2, class_name, class_loader2);
-    return constraints()->add_entry(class_name, klass1, class_loader1,
-                                    klass2, class_loader2);
+  klassOop klass1 = find_class(d_index1, d_hash1, constraint_name, class_loader1);
+  klassOop klass2 = find_class(d_index2, d_hash2, constraint_name, class_loader2);
+  return constraints()->add_entry(constraint_name, klass1, class_loader1,
+                                  klass2, class_loader2);
   }
 }
 
@@ -2301,6 +2317,7 @@
 // Returns the name of the type that failed a loader constraint check, or
 // NULL if no constraint failed. The returned C string needs cleaning up
 // with a ResourceMark in the caller.  No exception except OOME is thrown.
+// Arrays are not added to the loader constraint table, their elements are.
 char* SystemDictionary::check_signature_loaders(symbolHandle signature,
                                                Handle loader1, Handle loader2,
                                                bool is_method, TRAPS)  {
--- a/hotspot/src/share/vm/code/codeCache.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/code/codeCache.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright 1997-2007 Sun Microsystems, Inc.  All Rights Reserved.
+ * Copyright 1997-2010 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
@@ -284,9 +284,11 @@
       cur->print_on(tty, is_live ? "scavenge root" : "dead scavenge root"); tty->cr();
     }
 #endif //PRODUCT
-    if (is_live)
+    if (is_live) {
       // Perform cur->oops_do(f), maybe just once per nmethod.
       f->do_code_blob(cur);
+      cur->fix_oop_relocations();
+    }
   }
 
   // Check for stray marks.
--- a/hotspot/src/share/vm/compiler/compileBroker.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1414,9 +1414,14 @@
     intx thread_id = os::current_thread_id();
     for (int try_temp_dir = 1; try_temp_dir >= 0; try_temp_dir--) {
       const char* dir = (try_temp_dir ? os::get_temp_directory() : NULL);
-      if (dir == NULL)  dir = "";
-      sprintf(fileBuf, "%shs_c" UINTX_FORMAT "_pid%u.log",
-              dir, thread_id, os::current_process_id());
+      if (dir == NULL) {
+        jio_snprintf(fileBuf, sizeof(fileBuf), "hs_c" UINTX_FORMAT "_pid%u.log",
+                     thread_id, os::current_process_id());
+      } else {
+        jio_snprintf(fileBuf, sizeof(fileBuf),
+                     "%s%shs_c" UINTX_FORMAT "_pid%u.log", dir,
+                     os::file_separator(), thread_id, os::current_process_id());
+      }
       fp = fopen(fileBuf, "at");
       if (fp != NULL) {
         file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1);
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -297,6 +297,11 @@
   }
 }
 
+// Currently we do not call this at all. Normally we would call it
+// during the concurrent marking / remark phases but we now call
+// the lock-based version instead. But we might want to resurrect this
+// code in the future. So, we'll leave it here commented out.
+#if 0
 MemRegion CMRegionStack::pop() {
   while (true) {
     // Otherwise...
@@ -321,6 +326,41 @@
     // Otherwise, we need to try again.
   }
 }
+#endif // 0
+
+void CMRegionStack::push_with_lock(MemRegion mr) {
+  assert(mr.word_size() > 0, "Precondition");
+  MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
+
+  if (isFull()) {
+    _overflow = true;
+    return;
+  }
+
+  _base[_index] = mr;
+  _index += 1;
+}
+
+MemRegion CMRegionStack::pop_with_lock() {
+  MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
+
+  while (true) {
+    if (_index == 0) {
+      return MemRegion();
+    }
+    _index -= 1;
+
+    MemRegion mr = _base[_index];
+    if (mr.start() != NULL) {
+      assert(mr.end() != NULL, "invariant");
+      assert(mr.word_size() > 0, "invariant");
+      return mr;
+    } else {
+      // that entry was invalidated... let's skip it
+      assert(mr.end() == NULL, "invariant");
+    }
+  }
+}
 
 bool CMRegionStack::invalidate_entries_into_cset() {
   bool result = false;
@@ -668,24 +708,46 @@
 //
 
 void ConcurrentMark::clearNextBitmap() {
-   guarantee(!G1CollectedHeap::heap()->mark_in_progress(), "Precondition.");
-
-   // clear the mark bitmap (no grey objects to start with).
-   // We need to do this in chunks and offer to yield in between
-   // each chunk.
-   HeapWord* start  = _nextMarkBitMap->startWord();
-   HeapWord* end    = _nextMarkBitMap->endWord();
-   HeapWord* cur    = start;
-   size_t chunkSize = M;
-   while (cur < end) {
-     HeapWord* next = cur + chunkSize;
-     if (next > end)
-       next = end;
-     MemRegion mr(cur,next);
-     _nextMarkBitMap->clearRange(mr);
-     cur = next;
-     do_yield_check();
-   }
+  G1CollectedHeap* g1h = G1CollectedHeap::heap();
+  G1CollectorPolicy* g1p = g1h->g1_policy();
+
+  // Make sure that the concurrent mark thread looks to still be in
+  // the current cycle.
+  guarantee(cmThread()->during_cycle(), "invariant");
+
+  // We are finishing up the current cycle by clearing the next
+  // marking bitmap and getting it ready for the next cycle. During
+  // this time no other cycle can start. So, let's make sure that this
+  // is the case.
+  guarantee(!g1h->mark_in_progress(), "invariant");
+
+  // clear the mark bitmap (no grey objects to start with).
+  // We need to do this in chunks and offer to yield in between
+  // each chunk.
+  HeapWord* start  = _nextMarkBitMap->startWord();
+  HeapWord* end    = _nextMarkBitMap->endWord();
+  HeapWord* cur    = start;
+  size_t chunkSize = M;
+  while (cur < end) {
+    HeapWord* next = cur + chunkSize;
+    if (next > end)
+      next = end;
+    MemRegion mr(cur,next);
+    _nextMarkBitMap->clearRange(mr);
+    cur = next;
+    do_yield_check();
+
+    // Repeat the asserts from above. We'll do them as asserts here to
+    // minimize their overhead on the product. However, we'll have
+    // them as guarantees at the beginning / end of the bitmap
+    // clearing to get some checking in the product.
+    assert(cmThread()->during_cycle(), "invariant");
+    assert(!g1h->mark_in_progress(), "invariant");
+  }
+
+  // Repeat the asserts from above.
+  guarantee(cmThread()->during_cycle(), "invariant");
+  guarantee(!g1h->mark_in_progress(), "invariant");
 }
 
 class NoteStartOfMarkHRClosure: public HeapRegionClosure {
@@ -3363,7 +3425,7 @@
       gclog_or_tty->print_cr("[%d] draining region stack, size = %d",
                              _task_id, _cm->region_stack_size());
 
-    MemRegion mr = _cm->region_stack_pop();
+    MemRegion mr = _cm->region_stack_pop_with_lock();
     // it returns MemRegion() if the pop fails
     statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
 
@@ -3384,7 +3446,7 @@
         if (has_aborted())
           mr = MemRegion();
         else {
-          mr = _cm->region_stack_pop();
+          mr = _cm->region_stack_pop_with_lock();
           // it returns MemRegion() if the pop fails
           statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
         }
@@ -3417,7 +3479,7 @@
           }
           // Now push the part of the region we didn't scan on the
           // region stack to make sure a task scans it later.
-          _cm->region_stack_push(newRegion);
+          _cm->region_stack_push_with_lock(newRegion);
         }
         // break from while
         mr = MemRegion();
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -252,9 +252,19 @@
   // with other "push" operations (no pops).
   void push(MemRegion mr);
 
+#if 0
+  // This is currently not used. See the comment in the .cpp file.
+
   // Lock-free; assumes that it will only be called in parallel
   // with other "pop" operations (no pushes).
   MemRegion pop();
+#endif // 0
+
+  // These two are the implementations that use a lock. They can be
+  // called concurrently with each other but they should not be called
+  // concurrently with the lock-free versions (push() / pop()).
+  void push_with_lock(MemRegion mr);
+  MemRegion pop_with_lock();
 
   bool isEmpty()    { return _index == 0; }
   bool isFull()     { return _index == _capacity; }
@@ -540,6 +550,10 @@
 
   // Manipulation of the region stack
   bool region_stack_push(MemRegion mr) {
+    // Currently we only call the lock-free version during evacuation
+    // pauses.
+    assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped");
+
     _regionStack.push(mr);
     if (_regionStack.overflow()) {
       set_has_overflown();
@@ -547,7 +561,33 @@
     }
     return true;
   }
-  MemRegion region_stack_pop()          { return _regionStack.pop(); }
+#if 0
+  // Currently this is not used. See the comment in the .cpp file.
+  MemRegion region_stack_pop() { return _regionStack.pop(); }
+#endif // 0
+
+  bool region_stack_push_with_lock(MemRegion mr) {
+    // Currently we only call the lock-based version during either
+    // concurrent marking or remark.
+    assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(),
+           "if we are at a safepoint it should be the remark safepoint");
+
+    _regionStack.push_with_lock(mr);
+    if (_regionStack.overflow()) {
+      set_has_overflown();
+      return false;
+    }
+    return true;
+  }
+  MemRegion region_stack_pop_with_lock() {
+    // Currently we only call the lock-based version during either
+    // concurrent marking or remark.
+    assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(),
+           "if we are at a safepoint it should be the remark safepoint");
+
+    return _regionStack.pop_with_lock();
+  }
+
   int region_stack_size()               { return _regionStack.size(); }
   bool region_stack_overflow()          { return _regionStack.overflow(); }
   bool region_stack_empty()             { return _regionStack.isEmpty(); }
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -42,8 +42,8 @@
 
  private:
   ConcurrentMark*                  _cm;
-  bool                             _started;
-  bool                             _in_progress;
+  volatile bool                    _started;
+  volatile bool                    _in_progress;
 
   void sleepBeforeNextCycle();
 
@@ -67,15 +67,25 @@
   // Counting virtual time so far.
   double vtime_count_accum() { return _vtime_count_accum; }
 
-  ConcurrentMark* cm()                           { return _cm;     }
+  ConcurrentMark* cm()     { return _cm; }
 
-  void            set_started()                  { _started = true;   }
-  void            clear_started()                { _started = false;  }
-  bool            started()                      { return _started;   }
+  void set_started()       { _started = true;  }
+  void clear_started()     { _started = false; }
+  bool started()           { return _started;  }
 
-  void            set_in_progress()              { _in_progress = true;   }
-  void            clear_in_progress()            { _in_progress = false;  }
-  bool            in_progress()                  { return _in_progress;   }
+  void set_in_progress()   { _in_progress = true;  }
+  void clear_in_progress() { _in_progress = false; }
+  bool in_progress()       { return _in_progress;  }
+
+  // This flag returns true from the moment a marking cycle is
+  // initiated (during the initial-mark pause when started() is set)
+  // to the moment when the cycle completes (just after the next
+  // marking bitmap has been cleared and in_progress() is
+  // cleared). While this flag is true we will not start another cycle
+  // so that cycles do not overlap. We cannot use just in_progress()
+  // as the CM thread might take some time to wake up before noticing
+  // that started() is set and set in_progress().
+  bool during_cycle()      { return started() || in_progress(); }
 
   // Yield for GC
   void            yield();
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -902,6 +902,10 @@
 
 void G1CollectedHeap::do_collection(bool full, bool clear_all_soft_refs,
                                     size_t word_size) {
+  if (GC_locker::check_active_before_gc()) {
+    return; // GC is disabled (e.g. JNI GetXXXCritical operation)
+  }
+
   ResourceMark rm;
 
   if (PrintHeapAtGC) {
@@ -916,10 +920,6 @@
   assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint");
   assert(Thread::current() == VMThread::vm_thread(), "should be in vm thread");
 
-  if (GC_locker::is_active()) {
-    return; // GC is disabled (e.g. JNI GetXXXCritical operation)
-  }
-
   {
     IsGCActiveMark x;
 
@@ -2658,6 +2658,10 @@
 
 void
 G1CollectedHeap::do_collection_pause_at_safepoint() {
+  if (GC_locker::check_active_before_gc()) {
+    return; // GC is disabled (e.g. JNI GetXXXCritical operation)
+  }
+
   if (PrintHeapAtGC) {
     Universe::print_heap_before_gc();
   }
@@ -2665,6 +2669,11 @@
   {
     ResourceMark rm;
 
+    // This call will decide whether this pause is an initial-mark
+    // pause. If it is, during_initial_mark_pause() will return true
+    // for the duration of this pause.
+    g1_policy()->decide_on_conc_mark_initiation();
+
     char verbose_str[128];
     sprintf(verbose_str, "GC pause ");
     if (g1_policy()->in_young_gc_mode()) {
@@ -2673,7 +2682,7 @@
       else
         strcat(verbose_str, "(partial)");
     }
-    if (g1_policy()->should_initiate_conc_mark())
+    if (g1_policy()->during_initial_mark_pause())
       strcat(verbose_str, " (initial-mark)");
 
     // if PrintGCDetails is on, we'll print long statistics information
@@ -2697,10 +2706,6 @@
              "young list should be well formed");
     }
 
-    if (GC_locker::is_active()) {
-      return; // GC is disabled (e.g. JNI GetXXXCritical operation)
-    }
-
     bool abandoned = false;
     { // Call to jvmpi::post_class_unload_events must occur outside of active GC
       IsGCActiveMark x;
@@ -2756,7 +2761,7 @@
       _young_list->print();
 #endif // SCAN_ONLY_VERBOSE
 
-      if (g1_policy()->should_initiate_conc_mark()) {
+      if (g1_policy()->during_initial_mark_pause()) {
         concurrent_mark()->checkpointRootsInitialPre();
       }
       save_marks();
@@ -2858,7 +2863,7 @@
       }
 
       if (g1_policy()->in_young_gc_mode() &&
-          g1_policy()->should_initiate_conc_mark()) {
+          g1_policy()->during_initial_mark_pause()) {
         concurrent_mark()->checkpointRootsInitialPost();
         set_marking_started();
         // CAUTION: after the doConcurrentMark() call below,
@@ -2937,6 +2942,9 @@
   // the same region
   assert(r == NULL || !r->is_gc_alloc_region(),
          "shouldn't already be a GC alloc region");
+  assert(r == NULL || !r->isHumongous(),
+         "humongous regions shouldn't be used as GC alloc regions");
+
   HeapWord* original_top = NULL;
   if (r != NULL)
     original_top = r->top();
@@ -3079,12 +3087,17 @@
 
       if (alloc_region->in_collection_set() ||
           alloc_region->top() == alloc_region->end() ||
-          alloc_region->top() == alloc_region->bottom()) {
-        // we will discard the current GC alloc region if it's in the
-        // collection set (it can happen!), if it's already full (no
-        // point in using it), or if it's empty (this means that it
-        // was emptied during a cleanup and it should be on the free
-        // list now).
+          alloc_region->top() == alloc_region->bottom() ||
+          alloc_region->isHumongous()) {
+        // we will discard the current GC alloc region if
+        // * it's in the collection set (it can happen!),
+        // * it's already full (no point in using it),
+        // * it's empty (this means that it was emptied during
+        // a cleanup and it should be on the free list now), or
+        // * it's humongous (this means that it was emptied
+        // during a cleanup and was added to the free list, but
+        // has been subseqently used to allocate a humongous
+        // object that may be less than the region size).
 
         alloc_region = NULL;
       }
@@ -3977,7 +3990,7 @@
     OopsInHeapRegionClosure        *scan_perm_cl;
     OopsInHeapRegionClosure        *scan_so_cl;
 
-    if (_g1h->g1_policy()->should_initiate_conc_mark()) {
+    if (_g1h->g1_policy()->during_initial_mark_pause()) {
       scan_root_cl = &scan_mark_root_cl;
       scan_perm_cl = &scan_mark_perm_cl;
       scan_so_cl   = &scan_mark_heap_rs_cl;
@@ -4140,7 +4153,7 @@
   FilterAndMarkInHeapRegionAndIntoCSClosure scan_and_mark(this, &boc, concurrent_mark());
 
   OopsInHeapRegionClosure *foc;
-  if (g1_policy()->should_initiate_conc_mark())
+  if (g1_policy()->during_initial_mark_pause())
     foc = &scan_and_mark;
   else
     foc = &scan_only;
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -178,8 +178,8 @@
   // so the hack is to do the cast  QQQ FIXME
   _pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark),
   _n_marks_since_last_pause(0),
-  _conc_mark_initiated(false),
-  _should_initiate_conc_mark(false),
+  _initiate_conc_mark_if_possible(false),
+  _during_initial_mark_pause(false),
   _should_revert_to_full_young_gcs(false),
   _last_full_young_gc(false),
 
@@ -198,7 +198,9 @@
   _recorded_survivor_regions(0),
   _recorded_survivor_head(NULL),
   _recorded_survivor_tail(NULL),
-  _survivors_age_table(true)
+  _survivors_age_table(true),
+
+  _gc_overhead_perc(0.0)
 
 {
   // Set up the region size and associated fields. Given that the
@@ -275,6 +277,11 @@
   // calculate_young_list_target_config during initialization
   _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes;
 
+  assert(GCTimeRatio > 0,
+         "we should have set it to a default value set_g1_gc_flags() "
+         "if a user set it to 0");
+  _gc_overhead_perc = 100.0 * (1.0 / (1.0 + GCTimeRatio));
+
   initialize_all();
 }
 
@@ -786,7 +793,7 @@
                            elapsed_time_ms,
                            calculations,
                            full_young_gcs() ? "full" : "partial",
-                           should_initiate_conc_mark() ? " i-m" : "",
+                           during_initial_mark_pause() ? " i-m" : "",
                            _in_marking_window,
                            _in_marking_window_im);
 #endif // TRACE_CALC_YOUNG_CONFIG
@@ -1033,7 +1040,8 @@
   set_full_young_gcs(true);
   _last_full_young_gc = false;
   _should_revert_to_full_young_gcs = false;
-  _should_initiate_conc_mark = false;
+  clear_initiate_conc_mark_if_possible();
+  clear_during_initial_mark_pause();
   _known_garbage_bytes = 0;
   _known_garbage_ratio = 0.0;
   _in_marking_window = false;
@@ -1179,7 +1187,8 @@
 void G1CollectorPolicy::record_concurrent_mark_init_end_pre(double
                                                    mark_init_elapsed_time_ms) {
   _during_marking = true;
-  _should_initiate_conc_mark = false;
+  assert(!initiate_conc_mark_if_possible(), "we should have cleared it by now");
+  clear_during_initial_mark_pause();
   _cur_mark_stop_world_time_ms = mark_init_elapsed_time_ms;
 }
 
@@ -1250,7 +1259,6 @@
   }
   _n_pauses_at_mark_end = _n_pauses;
   _n_marks_since_last_pause++;
-  _conc_mark_initiated = false;
 }
 
 void
@@ -1446,17 +1454,24 @@
 #endif // PRODUCT
 
   if (in_young_gc_mode()) {
-    last_pause_included_initial_mark = _should_initiate_conc_mark;
+    last_pause_included_initial_mark = during_initial_mark_pause();
     if (last_pause_included_initial_mark)
       record_concurrent_mark_init_end_pre(0.0);
 
     size_t min_used_targ =
       (_g1->capacity() / 100) * InitiatingHeapOccupancyPercent;
 
-    if (cur_used_bytes > min_used_targ) {
-      if (cur_used_bytes <= _prev_collection_pause_used_at_end_bytes) {
-      } else if (!_g1->mark_in_progress() && !_last_full_young_gc) {
-        _should_initiate_conc_mark = true;
+
+    if (!_g1->mark_in_progress() && !_last_full_young_gc) {
+      assert(!last_pause_included_initial_mark, "invariant");
+      if (cur_used_bytes > min_used_targ &&
+          cur_used_bytes > _prev_collection_pause_used_at_end_bytes) {
+        assert(!during_initial_mark_pause(), "we should not see this here");
+
+        // Note: this might have already been set, if during the last
+        // pause we decided to start a cycle but at the beginning of
+        // this pause we decided to postpone it. That's OK.
+        set_initiate_conc_mark_if_possible();
       }
     }
 
@@ -1747,7 +1762,7 @@
 
   bool new_in_marking_window = _in_marking_window;
   bool new_in_marking_window_im = false;
-  if (_should_initiate_conc_mark) {
+  if (during_initial_mark_pause()) {
     new_in_marking_window = true;
     new_in_marking_window_im = true;
   }
@@ -2166,7 +2181,13 @@
   if (predicted_time_ms > _expensive_region_limit_ms) {
     if (!in_young_gc_mode()) {
         set_full_young_gcs(true);
-      _should_initiate_conc_mark = true;
+        // We might want to do something different here. However,
+        // right now we don't support the non-generational G1 mode
+        // (and in fact we are planning to remove the associated code,
+        // see CR 6814390). So, let's leave it as is and this will be
+        // removed some time in the future
+        ShouldNotReachHere();
+        set_during_initial_mark_pause();
     } else
       // no point in doing another partial one
       _should_revert_to_full_young_gcs = true;
@@ -2288,7 +2309,7 @@
 }
 
 size_t G1CollectorPolicy::expansion_amount() {
-  if ((int)(recent_avg_pause_time_ratio() * 100.0) > G1GCPercent) {
+  if ((recent_avg_pause_time_ratio() * 100.0) > _gc_overhead_perc) {
     // We will double the existing space, or take
     // G1ExpandByPercentOfAvailable % of the available expansion
     // space, whichever is smaller, bounded below by a minimum
@@ -2690,6 +2711,50 @@
 #endif
 
 void
+G1CollectorPolicy::decide_on_conc_mark_initiation() {
+  // We are about to decide on whether this pause will be an
+  // initial-mark pause.
+
+  // First, during_initial_mark_pause() should not be already set. We
+  // will set it here if we have to. However, it should be cleared by
+  // the end of the pause (it's only set for the duration of an
+  // initial-mark pause).
+  assert(!during_initial_mark_pause(), "pre-condition");
+
+  if (initiate_conc_mark_if_possible()) {
+    // We had noticed on a previous pause that the heap occupancy has
+    // gone over the initiating threshold and we should start a
+    // concurrent marking cycle. So we might initiate one.
+
+    bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
+    if (!during_cycle) {
+      // The concurrent marking thread is not "during a cycle", i.e.,
+      // it has completed the last one. So we can go ahead and
+      // initiate a new cycle.
+
+      set_during_initial_mark_pause();
+
+      // And we can now clear initiate_conc_mark_if_possible() as
+      // we've already acted on it.
+      clear_initiate_conc_mark_if_possible();
+    } else {
+      // The concurrent marking thread is still finishing up the
+      // previous cycle. If we start one right now the two cycles
+      // overlap. In particular, the concurrent marking thread might
+      // be in the process of clearing the next marking bitmap (which
+      // we will use for the next cycle if we start one). Starting a
+      // cycle now will be bad given that parts of the marking
+      // information might get cleared by the marking thread. And we
+      // cannot wait for the marking thread to finish the cycle as it
+      // periodically yields while clearing the next marking bitmap
+      // and, if it's in a yield point, it's waiting for us to
+      // finish. So, at this point we will not start a cycle and we'll
+      // let the concurrent marking thread complete the last one.
+    }
+  }
+}
+
+void
 G1CollectorPolicy_BestRegionsFirst::
 record_collection_pause_start(double start_time_sec, size_t start_used) {
   G1CollectorPolicy::record_collection_pause_start(start_time_sec, start_used);
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -215,6 +215,8 @@
   SurvRateGroup*        _survivor_surv_rate_group;
   // add here any more surv rate groups
 
+  double                _gc_overhead_perc;
+
   bool during_marking() {
     return _during_marking;
   }
@@ -722,11 +724,31 @@
 
   size_t _n_marks_since_last_pause;
 
-  // True iff CM has been initiated.
-  bool _conc_mark_initiated;
+  // At the end of a pause we check the heap occupancy and we decide
+  // whether we will start a marking cycle during the next pause. If
+  // we decide that we want to do that, we will set this parameter to
+  // true. So, this parameter will stay true between the end of a
+  // pause and the beginning of a subsequent pause (not necessarily
+  // the next one, see the comments on the next field) when we decide
+  // that we will indeed start a marking cycle and do the initial-mark
+  // work.
+  volatile bool _initiate_conc_mark_if_possible;
 
-  // True iff CM should be initiated
-  bool _should_initiate_conc_mark;
+  // If initiate_conc_mark_if_possible() is set at the beginning of a
+  // pause, it is a suggestion that the pause should start a marking
+  // cycle by doing the initial-mark work. However, it is possible
+  // that the concurrent marking thread is still finishing up the
+  // previous marking cycle (e.g., clearing the next marking
+  // bitmap). If that is the case we cannot start a new cycle and
+  // we'll have to wait for the concurrent marking thread to finish
+  // what it is doing. In this case we will postpone the marking cycle
+  // initiation decision for the next pause. When we eventually decide
+  // to start a cycle, we will set _during_initial_mark_pause which
+  // will stay true until the end of the initial-mark pause and it's
+  // the condition that indicates that a pause is doing the
+  // initial-mark work.
+  volatile bool _during_initial_mark_pause;
+
   bool _should_revert_to_full_young_gcs;
   bool _last_full_young_gc;
 
@@ -979,9 +1001,21 @@
   // Add "hr" to the CS.
   void add_to_collection_set(HeapRegion* hr);
 
-  bool should_initiate_conc_mark()      { return _should_initiate_conc_mark; }
-  void set_should_initiate_conc_mark()  { _should_initiate_conc_mark = true; }
-  void unset_should_initiate_conc_mark(){ _should_initiate_conc_mark = false; }
+  bool initiate_conc_mark_if_possible()       { return _initiate_conc_mark_if_possible;  }
+  void set_initiate_conc_mark_if_possible()   { _initiate_conc_mark_if_possible = true;  }
+  void clear_initiate_conc_mark_if_possible() { _initiate_conc_mark_if_possible = false; }
+
+  bool during_initial_mark_pause()      { return _during_initial_mark_pause;  }
+  void set_during_initial_mark_pause()  { _during_initial_mark_pause = true;  }
+  void clear_during_initial_mark_pause(){ _during_initial_mark_pause = false; }
+
+  // This is called at the very beginning of an evacuation pause (it
+  // has to be the first thing that the pause does). If
+  // initiate_conc_mark_if_possible() is true, and the concurrent
+  // marking thread has completed its work during the previous cycle,
+  // it will set during_initial_mark_pause() to so that the pause does
+  // the initial-mark work and start a marking cycle.
+  void decide_on_conc_mark_initiation();
 
   // If an expansion would be appropriate, because recent GC overhead had
   // exceeded the desired limit, return an amount to expand by.
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -40,9 +40,6 @@
   develop(bool, G1Gen, true,                                                \
           "If true, it will enable the generational G1")                    \
                                                                             \
-  develop(intx, G1GCPercent, 10,                                            \
-          "The desired percent time spent on GC")                           \
-                                                                            \
   develop(intx, G1PolicyVerbose, 0,                                         \
           "The verbosity level on G1 policy decisions")                     \
                                                                             \
@@ -270,11 +267,11 @@
   product(uintx, G1HeapRegionSize, 0,                                       \
           "Size of the G1 regions.")                                        \
                                                                             \
-  experimental(bool, G1UseParallelRSetUpdating, false,                      \
+  experimental(bool, G1UseParallelRSetUpdating, true,                       \
           "Enables the parallelization of remembered set updating "         \
           "during evacuation pauses")                                       \
                                                                             \
-  experimental(bool, G1UseParallelRSetScanning, false,                      \
+  experimental(bool, G1UseParallelRSetScanning, true,                       \
           "Enables the parallelization of remembered set scanning "         \
           "during evacuation pauses")                                       \
                                                                             \
--- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2328,6 +2328,17 @@
       }
 
       DEFAULT:
+#ifdef ZERO
+          // Some zero configurations use the C++ interpreter as a
+          // fallback interpreter and have support for platform
+          // specific fast bytecodes which aren't supported here, so
+          // redispatch to the equivalent non-fast bytecode when they
+          // are encountered.
+          if (Bytecodes::is_defined((Bytecodes::Code)opcode)) {
+              opcode = (jubyte)Bytecodes::java_code((Bytecodes::Code)opcode);
+              goto opcode_switch;
+          }
+#endif
           fatal2("\t*** Unimplemented opcode: %d = %s\n",
                  opcode, Bytecodes::name((Bytecodes::Code)opcode));
           goto finish;
--- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -111,7 +111,22 @@
 
   // Allocate size HeapWords. The memory is NOT initialized to zero.
   inline HeapWord* allocate(size_t size);
-  static size_t alignment_reserve()              { return align_object_size(typeArrayOopDesc::header_size(T_INT)); }
+
+  // Reserve space at the end of TLAB
+  static size_t end_reserve() {
+    int reserve_size = typeArrayOopDesc::header_size(T_INT);
+    if (AllocatePrefetchStyle == 3) {
+      // BIS is used to prefetch - we need a space for it.
+      // +1 for rounding up to next cache line +1 to be safe
+      int lines = AllocatePrefetchLines + 2;
+      int step_size = AllocatePrefetchStepSize;
+      int distance = AllocatePrefetchDistance;
+      int prefetch_end = (distance + step_size*lines)/(int)HeapWordSize;
+      reserve_size = MAX2(reserve_size, prefetch_end);
+    }
+    return reserve_size;
+  }
+  static size_t alignment_reserve()              { return align_object_size(end_reserve()); }
   static size_t alignment_reserve_in_bytes()     { return alignment_reserve() * HeapWordSize; }
 
   // Return tlab size or remaining space in eden such that the
--- a/hotspot/src/share/vm/oops/typeArrayKlass.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/oops/typeArrayKlass.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -123,16 +123,16 @@
      || (((unsigned int) length + (unsigned int) dst_pos) > (unsigned int) d->length()) ) {
     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException());
   }
+  // Check zero copy
+  if (length == 0)
+    return;
 
   // This is an attempt to make the copy_array fast.
-  // NB: memmove takes care of overlapping memory segments.
-  // Potential problem: memmove is not guaranteed to be word atomic
-  // Revisit in Merlin
   int l2es = log2_element_size();
   int ihs = array_header_in_bytes() / wordSize;
-  char* src = (char*) ((oop*)s + ihs) + (src_pos << l2es);
-  char* dst = (char*) ((oop*)d + ihs) + (dst_pos << l2es);
-  memmove(dst, src, length << l2es);
+  char* src = (char*) ((oop*)s + ihs) + ((size_t)src_pos << l2es);
+  char* dst = (char*) ((oop*)d + ihs) + ((size_t)dst_pos << l2es);
+  Copy::conjoint_memory_atomic(src, dst, (size_t)length << l2es);
 }
 
 
--- a/hotspot/src/share/vm/opto/c2_globals.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/c2_globals.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -52,9 +52,6 @@
           "Code alignment for interior entry points "                       \
           "in generated code (in bytes)")                                   \
                                                                             \
-  product_pd(intx, OptoLoopAlignment,                                       \
-          "Align inner loops to zero relative to this modulus")             \
-                                                                            \
   product(intx, MaxLoopPad, (OptoLoopAlignment-1),                          \
           "Align a loop if padding size in bytes is less or equal to this value") \
                                                                             \
--- a/hotspot/src/share/vm/opto/cfgnode.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/cfgnode.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -956,6 +956,7 @@
     }
     if( jtkp && ttkp ) {
       if( jtkp->is_loaded() &&  jtkp->klass()->is_interface() &&
+          !jtkp->klass_is_exact() && // Keep exact interface klass (6894807)
           ttkp->is_loaded() && !ttkp->klass()->is_interface() ) {
         assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) ||
                ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), "");
--- a/hotspot/src/share/vm/opto/doCall.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/doCall.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -714,8 +714,6 @@
 
   // iterate through all entries sequentially
   for (;!handlers.is_done(); handlers.next()) {
-    // Do nothing if turned off
-    if( !DeutschShiffmanExceptions ) break;
     ciExceptionHandler* handler = handlers.handler();
 
     if (handler->is_rethrow()) {
@@ -741,46 +739,26 @@
       return;                   // No more handling to be done here!
     }
 
-    // %%% The following logic replicates make_from_klass_unique.
-    // TO DO:  Replace by a subroutine call.  Then generalize
-    // the type check, as noted in the next "%%%" comment.
+    // Get the handler's klass
+    ciInstanceKlass* klass = handler->catch_klass();
 
-    ciInstanceKlass* klass = handler->catch_klass();
-    if (UseUniqueSubclasses) {
-      // (We use make_from_klass because it respects UseUniqueSubclasses.)
-      const TypeOopPtr* tp = TypeOopPtr::make_from_klass(klass);
-      klass = tp->klass()->as_instance_klass();
+    if (!klass->is_loaded()) {  // klass is not loaded?
+      // fall through into catch_call_exceptions which will emit a
+      // handler with an uncommon trap.
+      break;
     }
 
-    // Get the handler's klass
-    if (!klass->is_loaded())    // klass is not loaded?
-      break;                    // Must call Rethrow!
     if (klass->is_interface())  // should not happen, but...
       break;                    // bail out
-    // See if the loaded exception klass has no subtypes
-    if (klass->has_subklass())
-      break;                    // Cannot easily do precise test ==> Rethrow
 
-    // %%% Now that subclass checking is very fast, we need to rewrite
-    // this section and remove the option "DeutschShiffmanExceptions".
-    // The exception processing chain should be a normal typecase pattern,
-    // with a bailout to the interpreter only in the case of unloaded
-    // classes.  (The bailout should mark the method non-entrant.)
-    // This rewrite should be placed in GraphKit::, not Parse::.
-
-    // Add a dependence; if any subclass added we need to recompile
-    // %%% should use stronger assert_unique_concrete_subtype instead
-    if (!klass->is_final()) {
-      C->dependencies()->assert_leaf_type(klass);
-    }
-
-    // Implement precise test
+    // Check the type of the exception against the catch type
     const TypeKlassPtr *tk = TypeKlassPtr::make(klass);
     Node* con = _gvn.makecon(tk);
-    Node* cmp = _gvn.transform( new (C, 3) CmpPNode(ex_klass_node, con) );
-    Node* bol = _gvn.transform( new (C, 2) BoolNode(cmp, BoolTest::ne) );
-    { BuildCutout unless(this, bol, PROB_LIKELY(0.7f));
-      const TypeInstPtr* tinst = TypeInstPtr::make_exact(TypePtr::NotNull, klass);
+    Node* not_subtype_ctrl = gen_subtype_check(ex_klass_node, con);
+    if (!stopped()) {
+      PreserveJVMState pjvms(this);
+      const TypeInstPtr* tinst = TypeOopPtr::make_from_klass_unique(klass)->cast_to_ptr_type(TypePtr::NotNull)->is_instptr();
+      assert(klass->has_subklass() || tinst->klass_is_exact(), "lost exactness");
       Node* ex_oop = _gvn.transform(new (C, 2) CheckCastPPNode(control(), ex_node, tinst));
       push_ex_oop(ex_oop);      // Push exception oop for handler
 #ifndef PRODUCT
@@ -792,6 +770,7 @@
 #endif
       merge_exception(handler_bci);
     }
+    set_control(not_subtype_ctrl);
 
     // Come here if exception does not match handler.
     // Carry on with more handler checks.
@@ -800,21 +779,6 @@
 
   assert(!stopped(), "you should return if you finish the chain");
 
-  if (remaining == 1) {
-    // Further checks do not matter.
-  }
-
-  if (can_rerun_bytecode()) {
-    // Do not push_ex_oop here!
-    // Re-executing the bytecode will reproduce the throwing condition.
-    bool must_throw = true;
-    uncommon_trap(Deoptimization::Reason_unhandled,
-                  Deoptimization::Action_none,
-                  (ciKlass*)NULL, (const char*)NULL, // default args
-                  must_throw);
-    return;
-  }
-
   // Oops, need to call into the VM to resolve the klasses at runtime.
   // Note:  This call must not deoptimize, since it is not a real at this bci!
   kill_dead_locals();
--- a/hotspot/src/share/vm/opto/macro.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/macro.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1487,11 +1487,11 @@
                                         Node*& contended_phi_rawmem,
                                         Node* old_eden_top, Node* new_eden_top,
                                         Node* length) {
+   enum { fall_in_path = 1, pf_path = 2 };
    if( UseTLAB && AllocatePrefetchStyle == 2 ) {
       // Generate prefetch allocation with watermark check.
       // As an allocation hits the watermark, we will prefetch starting
       // at a "distance" away from watermark.
-      enum { fall_in_path = 1, pf_path = 2 };
 
       Node *pf_region = new (C, 3) RegionNode(3);
       Node *pf_phi_rawmem = new (C, 3) PhiNode( pf_region, Type::MEMORY,
@@ -1570,6 +1570,45 @@
       needgc_false = pf_region;
       contended_phi_rawmem = pf_phi_rawmem;
       i_o = pf_phi_abio;
+   } else if( UseTLAB && AllocatePrefetchStyle == 3 ) {
+      // Insert a prefetch for each allocation only on the fast-path
+      Node *pf_region = new (C, 3) RegionNode(3);
+      Node *pf_phi_rawmem = new (C, 3) PhiNode( pf_region, Type::MEMORY,
+                                                TypeRawPtr::BOTTOM );
+
+      // Generate several prefetch instructions only for arrays.
+      uint lines = (length != NULL) ? AllocatePrefetchLines : 1;
+      uint step_size = AllocatePrefetchStepSize;
+      uint distance = AllocatePrefetchDistance;
+
+      // Next cache address.
+      Node *cache_adr = new (C, 4) AddPNode(old_eden_top, old_eden_top,
+                                            _igvn.MakeConX(distance));
+      transform_later(cache_adr);
+      cache_adr = new (C, 2) CastP2XNode(needgc_false, cache_adr);
+      transform_later(cache_adr);
+      Node* mask = _igvn.MakeConX(~(intptr_t)(step_size-1));
+      cache_adr = new (C, 3) AndXNode(cache_adr, mask);
+      transform_later(cache_adr);
+      cache_adr = new (C, 2) CastX2PNode(cache_adr);
+      transform_later(cache_adr);
+
+      // Prefetch
+      Node *prefetch = new (C, 3) PrefetchWriteNode( contended_phi_rawmem, cache_adr );
+      prefetch->set_req(0, needgc_false);
+      transform_later(prefetch);
+      contended_phi_rawmem = prefetch;
+      Node *prefetch_adr;
+      distance = step_size;
+      for ( uint i = 1; i < lines; i++ ) {
+        prefetch_adr = new (C, 4) AddPNode( cache_adr, cache_adr,
+                                            _igvn.MakeConX(distance) );
+        transform_later(prefetch_adr);
+        prefetch = new (C, 3) PrefetchWriteNode( contended_phi_rawmem, prefetch_adr );
+        transform_later(prefetch);
+        distance += step_size;
+        contended_phi_rawmem = prefetch;
+      }
    } else if( AllocatePrefetchStyle > 0 ) {
       // Insert a prefetch for each allocation only on the fast-path
       Node *prefetch_adr;
--- a/hotspot/src/share/vm/opto/memnode.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/memnode.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1244,5 +1244,5 @@
   virtual int Opcode() const;
   virtual uint ideal_reg() const { return NotAMachineReg; }
   virtual uint match_edge(uint idx) const { return idx==2; }
-  virtual const Type *bottom_type() const { return Type::ABIO; }
+  virtual const Type *bottom_type() const { return ( AllocatePrefetchStyle == 3 ) ? Type::MEMORY : Type::ABIO; }
 };
--- a/hotspot/src/share/vm/opto/parse.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/parse.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -551,9 +551,6 @@
   // Also handles exceptions for individual bytecodes.
   void catch_inline_exceptions(SafePointNode* ex_map);
 
-  // Bytecode classifier, helps decide to use uncommon_trap vs. rethrow_C.
-  bool can_rerun_bytecode();
-
   // Merge the given map into correct exceptional exit state.
   // Assumes that there is no applicable local handler.
   void throw_to_exit(SafePointNode* ex_map);
--- a/hotspot/src/share/vm/opto/parse1.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/parse1.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -798,67 +798,6 @@
   initial_gvn()->transform_no_reclaim(exit);
 }
 
-bool Parse::can_rerun_bytecode() {
-  switch (bc()) {
-  case Bytecodes::_ldc:
-  case Bytecodes::_ldc_w:
-  case Bytecodes::_ldc2_w:
-  case Bytecodes::_getfield:
-  case Bytecodes::_putfield:
-  case Bytecodes::_getstatic:
-  case Bytecodes::_putstatic:
-  case Bytecodes::_arraylength:
-  case Bytecodes::_baload:
-  case Bytecodes::_caload:
-  case Bytecodes::_iaload:
-  case Bytecodes::_saload:
-  case Bytecodes::_faload:
-  case Bytecodes::_aaload:
-  case Bytecodes::_laload:
-  case Bytecodes::_daload:
-  case Bytecodes::_bastore:
-  case Bytecodes::_castore:
-  case Bytecodes::_iastore:
-  case Bytecodes::_sastore:
-  case Bytecodes::_fastore:
-  case Bytecodes::_aastore:
-  case Bytecodes::_lastore:
-  case Bytecodes::_dastore:
-  case Bytecodes::_irem:
-  case Bytecodes::_idiv:
-  case Bytecodes::_lrem:
-  case Bytecodes::_ldiv:
-  case Bytecodes::_frem:
-  case Bytecodes::_fdiv:
-  case Bytecodes::_drem:
-  case Bytecodes::_ddiv:
-  case Bytecodes::_checkcast:
-  case Bytecodes::_instanceof:
-  case Bytecodes::_anewarray:
-  case Bytecodes::_newarray:
-  case Bytecodes::_multianewarray:
-  case Bytecodes::_new:
-  case Bytecodes::_monitorenter:  // can re-run initial null check, only
-  case Bytecodes::_return:
-    return true;
-    break;
-
-  // Don't rerun athrow since it's part of the exception path.
-  case Bytecodes::_athrow:
-  case Bytecodes::_invokestatic:
-  case Bytecodes::_invokedynamic:
-  case Bytecodes::_invokespecial:
-  case Bytecodes::_invokevirtual:
-  case Bytecodes::_invokeinterface:
-    return false;
-    break;
-
-  default:
-    assert(false, "unexpected bytecode produced an exception");
-    return true;
-  }
-}
-
 //---------------------------do_exceptions-------------------------------------
 // Process exceptions arising from the current bytecode.
 // Send caught exceptions to the proper handler within this method.
@@ -872,9 +811,6 @@
     return;
   }
 
-  // Make sure we can classify this bytecode if we need to.
-  debug_only(can_rerun_bytecode());
-
   PreserveJVMState pjvms(this, false);
 
   SafePointNode* ex_map;
--- a/hotspot/src/share/vm/opto/runtime.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/runtime.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -865,7 +865,7 @@
     thread->set_exception_stack_size(0);
 
     // Check if the exception PC is a MethodHandle call site.
-    thread->set_is_method_handle_exception(nm->is_method_handle_return(pc));
+    thread->set_is_method_handle_return(nm->is_method_handle_return(pc));
   }
 
   // Restore correct return pc.  Was saved above.
--- a/hotspot/src/share/vm/opto/type.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/opto/type.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -2545,12 +2545,15 @@
       ftip->is_loaded() &&  ftip->klass()->is_interface() &&
       ktip->is_loaded() && !ktip->klass()->is_interface()) {
     // Happens in a CTW of rt.jar, 320-341, no extra flags
+    assert(!ftip->klass_is_exact(), "interface could not be exact");
     return ktip->cast_to_ptr_type(ftip->ptr());
   }
+  // Interface klass type could be exact in opposite to interface type,
+  // return it here instead of incorrect Constant ptr J/L/Object (6894807).
   if (ftkp != NULL && ktkp != NULL &&
       ftkp->is_loaded() &&  ftkp->klass()->is_interface() &&
+      !ftkp->klass_is_exact() && // Keep exact interface klass
       ktkp->is_loaded() && !ktkp->klass()->is_interface()) {
-    // Happens in a CTW of rt.jar, 320-341, no extra flags
     return ktkp->cast_to_ptr_type(ftkp->ptr());
   }
 
--- a/hotspot/src/share/vm/prims/forte.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/prims/forte.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -55,12 +55,11 @@
 };
 
 
-static void is_decipherable_compiled_frame(frame* fr, RegisterMap* map,
-  bool* is_compiled_p, bool* is_walkable_p);
+static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm);
 static bool is_decipherable_interpreted_frame(JavaThread* thread,
-                                                frame* fr,
-                                                methodOop* method_p,
-                                                int* bci_p);
+                                              frame* fr,
+                                              methodOop* method_p,
+                                              int* bci_p);
 
 
 
@@ -122,41 +121,43 @@
 // Determine if 'fr' is a decipherable compiled frame. We are already
 // assured that fr is for a java nmethod.
 
-static bool is_decipherable_compiled_frame(frame* fr) {
-
-  assert(fr->cb() != NULL && fr->cb()->is_nmethod(), "invariant");
-  nmethod* nm = (nmethod*) fr->cb();
+static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm) {
   assert(nm->is_java_method(), "invariant");
 
-  // First try and find an exact PcDesc
+  if (thread->has_last_Java_frame() && thread->last_Java_pc() == fr->pc()) {
+    // We're stopped at a call into the JVM so look for a PcDesc with
+    // the actual pc reported by the frame.
+    PcDesc* pc_desc = nm->pc_desc_at(fr->pc());
 
-  PcDesc* pc_desc = nm->pc_desc_at(fr->pc());
-
-  // Did we find a useful PcDesc?
-  if (pc_desc != NULL &&
-      pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) {
-
-    address probe_pc = fr->pc() + 1;
-    pc_desc = nm->pc_desc_near(probe_pc);
-
-    // Now do we have a useful PcDesc?
-
+    // Did we find a useful PcDesc?
     if (pc_desc != NULL &&
-        pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) {
-      // No debug information available for this pc
-      // vframeStream would explode if we try and walk the frames.
-      return false;
+        pc_desc->scope_decode_offset() != DebugInformationRecorder::serialized_null) {
+      return true;
     }
-
-    // This PcDesc is useful however we must adjust the frame's pc
-    // so that the vframeStream lookups will use this same pc
-
-    fr->set_pc(pc_desc->real_pc(nm));
   }
 
+  // We're at some random pc in the nmethod so search for the PcDesc
+  // whose pc is greater than the current PC.  It's done this way
+  // because the extra PcDescs that are recorded for improved debug
+  // info record the end of the region covered by the ScopeDesc
+  // instead of the beginning.
+  PcDesc* pc_desc = nm->pc_desc_near(fr->pc() + 1);
+
+  // Now do we have a useful PcDesc?
+  if (pc_desc == NULL ||
+      pc_desc->scope_decode_offset() == DebugInformationRecorder::serialized_null) {
+    // No debug information available for this pc
+    // vframeStream would explode if we try and walk the frames.
+    return false;
+  }
+
+  // This PcDesc is useful however we must adjust the frame's pc
+  // so that the vframeStream lookups will use this same pc
+  fr->set_pc(pc_desc->real_pc(nm));
   return true;
 }
 
+
 // Determine if 'fr' is a walkable interpreted frame. Returns false
 // if it is not. *method_p, and *bci_p are not set when false is
 // returned. *method_p is non-NULL if frame was executing a Java
@@ -166,9 +167,9 @@
 // even if a valid BCI cannot be found.
 
 static bool is_decipherable_interpreted_frame(JavaThread* thread,
-                                                frame* fr,
-                                                methodOop* method_p,
-                                                int* bci_p) {
+                                              frame* fr,
+                                              methodOop* method_p,
+                                              int* bci_p) {
   assert(fr->is_interpreted_frame(), "just checking");
 
   // top frame is an interpreted frame
@@ -323,13 +324,15 @@
       // have a PCDesc that can get us a bci however we did find
       // a method
 
-      if (!is_decipherable_compiled_frame(&candidate)) {
+      if (!is_decipherable_compiled_frame(thread, &candidate, nm)) {
         return false;
       }
 
       // is_decipherable_compiled_frame may modify candidate's pc
       *initial_frame_p = candidate;
 
+      assert(nm->pc_desc_at(candidate.pc()) != NULL, "if it's decipherable then pc must be valid");
+
       return true;
     }
 
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1353,6 +1353,16 @@
       MarkStackSize / K, MarkStackSizeMax / K);
     tty->print_cr("ConcGCThreads: %u", ConcGCThreads);
   }
+
+  if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) {
+    // In G1, we want the default GC overhead goal to be higher than
+    // say in PS. So we set it here to 10%. Otherwise the heap might
+    // be expanded more aggressively than we would like it to. In
+    // fact, even 10% seems to not be high enough in some cases
+    // (especially small GC stress tests that the main thing they do
+    // is allocation). We might consider increase it further.
+    FLAG_SET_DEFAULT(GCTimeRatio, 9);
+  }
 }
 
 void Arguments::set_heap_size() {
--- a/hotspot/src/share/vm/runtime/globals.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -1052,7 +1052,8 @@
           "Use SSE2 MOVDQU instruction for Arraycopy")                      \
                                                                             \
   product(intx, FieldsAllocationStyle, 1,                                   \
-          "0 - type based with oops first, 1 - with oops last")             \
+          "0 - type based with oops first, 1 - with oops last, "            \
+          "2 - oops in super and sub classes are together")                 \
                                                                             \
   product(bool, CompactFields, true,                                        \
           "Allocate nonstatic fields in gaps between previous fields")      \
@@ -2502,10 +2503,6 @@
   notproduct(bool, TraceSpilling, false,                                    \
           "Trace spilling")                                                 \
                                                                             \
-  develop(bool, DeutschShiffmanExceptions, true,                            \
-          "Fast check to find exception handler for precisely typed "       \
-          "exceptions")                                                     \
-                                                                            \
   product(bool, SplitIfBlocks, true,                                        \
           "Clone compares and control flow through merge points to fold "   \
           "some branches")                                                  \
@@ -2711,7 +2708,8 @@
   product(intx,  AllocatePrefetchStyle, 1,                                  \
           "0 = no prefetch, "                                               \
           "1 = prefetch instructions for each allocation, "                 \
-          "2 = use TLAB watermark to gate allocation prefetch")             \
+          "2 = use TLAB watermark to gate allocation prefetch, "            \
+          "3 = use BIS instruction on Sparc for allocation prefetch")       \
                                                                             \
   product(intx,  AllocatePrefetchDistance, -1,                              \
           "Distance to prefetch ahead of allocation pointer")               \
@@ -3114,6 +3112,9 @@
   develop_pd(intx, CodeEntryAlignment,                                      \
           "Code entry alignment for generated code (in bytes)")             \
                                                                             \
+  product_pd(intx, OptoLoopAlignment,                                       \
+          "Align inner loops to zero relative to this modulus")             \
+                                                                            \
   product_pd(uintx, InitialCodeCacheSize,                                   \
           "Initial code cache size (in bytes)")                             \
                                                                             \
--- a/hotspot/src/share/vm/runtime/mutexLocker.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/mutexLocker.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -70,6 +70,7 @@
 Monitor* CMark_lock                   = NULL;
 Monitor* ZF_mon                       = NULL;
 Monitor* Cleanup_mon                  = NULL;
+Mutex*   CMRegionStack_lock           = NULL;
 Mutex*   SATB_Q_FL_lock               = NULL;
 Monitor* SATB_Q_CBL_mon               = NULL;
 Mutex*   Shared_SATB_Q_lock           = NULL;
@@ -167,6 +168,7 @@
     def(CMark_lock                 , Monitor, nonleaf,     true ); // coordinate concurrent mark thread
     def(ZF_mon                     , Monitor, leaf,        true );
     def(Cleanup_mon                , Monitor, nonleaf,     true );
+    def(CMRegionStack_lock         , Mutex,   leaf,        true );
     def(SATB_Q_FL_lock             , Mutex  , special,     true );
     def(SATB_Q_CBL_mon             , Monitor, nonleaf,     true );
     def(Shared_SATB_Q_lock         , Mutex,   nonleaf,     true );
--- a/hotspot/src/share/vm/runtime/mutexLocker.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/mutexLocker.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -63,6 +63,7 @@
 extern Monitor* CMark_lock;                      // used for concurrent mark thread coordination
 extern Monitor* ZF_mon;                          // used for G1 conc zero-fill.
 extern Monitor* Cleanup_mon;                     // used for G1 conc cleanup.
+extern Mutex*   CMRegionStack_lock;              // used for protecting accesses to the CM region stack
 extern Mutex*   SATB_Q_FL_lock;                  // Protects SATB Q
                                                  // buffer free list.
 extern Monitor* SATB_Q_CBL_mon;                  // Protects SATB Q
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -259,13 +259,16 @@
 address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* thread, address return_address) {
   assert(frame::verify_return_pc(return_address), "must be a return pc");
 
+  // Reset MethodHandle flag.
+  thread->set_is_method_handle_return(false);
+
   // the fastest case first
   CodeBlob* blob = CodeCache::find_blob(return_address);
   if (blob != NULL && blob->is_nmethod()) {
     nmethod* code = (nmethod*)blob;
     assert(code != NULL, "nmethod must be present");
     // Check if the return address is a MethodHandle call site.
-    thread->set_is_method_handle_exception(code->is_method_handle_return(return_address));
+    thread->set_is_method_handle_return(code->is_method_handle_return(return_address));
     // native nmethods don't have exception handlers
     assert(!code->is_native_method(), "no exception handler");
     assert(code->header_begin() != code->exception_begin(), "no exception handler");
@@ -292,7 +295,7 @@
       nmethod* code = (nmethod*)blob;
       assert(code != NULL, "nmethod must be present");
       // Check if the return address is a MethodHandle call site.
-      thread->set_is_method_handle_exception(code->is_method_handle_return(return_address));
+      thread->set_is_method_handle_return(code->is_method_handle_return(return_address));
       assert(code->header_begin() != code->exception_begin(), "no exception handler");
       return code->exception_begin();
     }
--- a/hotspot/src/share/vm/runtime/thread.hpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/runtime/thread.hpp	Tue Apr 20 01:30:04 2010 -0700
@@ -772,7 +772,7 @@
   volatile address _exception_pc;                // PC where exception happened
   volatile address _exception_handler_pc;        // PC for handler of exception
   volatile int     _exception_stack_size;        // Size of frame where exception happened
-  volatile int     _is_method_handle_exception;  // True if the current exception PC is at a MethodHandle call.
+  volatile int     _is_method_handle_return;     // true (== 1) if the current exception PC is a MethodHandle call site.
 
   // support for compilation
   bool    _is_compiling;                         // is true if a compilation is active inthis thread (one compilation per thread possible)
@@ -1108,13 +1108,13 @@
   int      exception_stack_size() const          { return _exception_stack_size; }
   address  exception_pc() const                  { return _exception_pc; }
   address  exception_handler_pc() const          { return _exception_handler_pc; }
-  int      is_method_handle_exception() const    { return _is_method_handle_exception; }
+  bool     is_method_handle_return() const       { return _is_method_handle_return == 1; }
 
   void set_exception_oop(oop o)                  { _exception_oop = o; }
   void set_exception_pc(address a)               { _exception_pc = a; }
   void set_exception_handler_pc(address a)       { _exception_handler_pc = a; }
   void set_exception_stack_size(int size)        { _exception_stack_size = size; }
-  void set_is_method_handle_exception(int value) { _is_method_handle_exception = value; }
+  void set_is_method_handle_return(bool value)   { _is_method_handle_return = value ? 1 : 0; }
 
   // Stack overflow support
   inline size_t stack_available(address cur_sp);
@@ -1188,7 +1188,7 @@
   static ByteSize exception_pc_offset()          { return byte_offset_of(JavaThread, _exception_pc        ); }
   static ByteSize exception_handler_pc_offset()  { return byte_offset_of(JavaThread, _exception_handler_pc); }
   static ByteSize exception_stack_size_offset()  { return byte_offset_of(JavaThread, _exception_stack_size); }
-  static ByteSize is_method_handle_exception_offset() { return byte_offset_of(JavaThread, _is_method_handle_exception); }
+  static ByteSize is_method_handle_return_offset() { return byte_offset_of(JavaThread, _is_method_handle_return); }
   static ByteSize stack_guard_state_offset()     { return byte_offset_of(JavaThread, _stack_guard_state   ); }
   static ByteSize suspend_flags_offset()         { return byte_offset_of(JavaThread, _suspend_flags       ); }
 
--- a/hotspot/src/share/vm/utilities/ostream.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/utilities/ostream.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -363,7 +363,7 @@
   return _log_file != NULL;
 }
 
-static const char* make_log_name(const char* log_name, const char* force_directory, char* buf) {
+static const char* make_log_name(const char* log_name, const char* force_directory) {
   const char* basename = log_name;
   char file_sep = os::file_separator()[0];
   const char* cp;
@@ -374,6 +374,27 @@
   }
   const char* nametail = log_name;
 
+  // Compute buffer length
+  size_t buffer_length;
+  if (force_directory != NULL) {
+    buffer_length = strlen(force_directory) + strlen(os::file_separator()) +
+                    strlen(basename) + 1;
+  } else {
+    buffer_length = strlen(log_name) + 1;
+  }
+
+  const char* star = strchr(basename, '*');
+  int star_pos = (star == NULL) ? -1 : (star - nametail);
+
+  char pid[32];
+  if (star_pos >= 0) {
+    jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id());
+    buffer_length += strlen(pid);
+  }
+
+  // Create big enough buffer.
+  char *buf = NEW_C_HEAP_ARRAY(char, buffer_length);
+
   strcpy(buf, "");
   if (force_directory != NULL) {
     strcat(buf, force_directory);
@@ -381,14 +402,11 @@
     nametail = basename;       // completely skip directory prefix
   }
 
-  const char* star = strchr(basename, '*');
-  int star_pos = (star == NULL) ? -1 : (star - nametail);
-
   if (star_pos >= 0) {
     // convert foo*bar.log to foo123bar.log
     int buf_pos = (int) strlen(buf);
     strncpy(&buf[buf_pos], nametail, star_pos);
-    sprintf(&buf[buf_pos + star_pos], "%u", os::current_process_id());
+    strcpy(&buf[buf_pos + star_pos], pid);
     nametail += star_pos + 1;  // skip prefix and star
   }
 
@@ -399,20 +417,23 @@
 void defaultStream::init_log() {
   // %%% Need a MutexLocker?
   const char* log_name = LogFile != NULL ? LogFile : "hotspot.log";
-  char buf[O_BUFLEN*2];
-  const char* try_name = make_log_name(log_name, NULL, buf);
+  const char* try_name = make_log_name(log_name, NULL);
   fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name);
   if (!file->is_open()) {
     // Try again to open the file.
     char warnbuf[O_BUFLEN*2];
-    sprintf(warnbuf, "Warning:  Cannot open log file: %s\n", try_name);
+    jio_snprintf(warnbuf, sizeof(warnbuf),
+                 "Warning:  Cannot open log file: %s\n", try_name);
     // Note:  This feature is for maintainer use only.  No need for L10N.
     jio_print(warnbuf);
-    try_name = make_log_name("hs_pid*.log", os::get_temp_directory(), buf);
-    sprintf(warnbuf, "Warning:  Forcing option -XX:LogFile=%s\n", try_name);
+    FREE_C_HEAP_ARRAY(char, try_name);
+    try_name = make_log_name("hs_pid*.log", os::get_temp_directory());
+    jio_snprintf(warnbuf, sizeof(warnbuf),
+                 "Warning:  Forcing option -XX:LogFile=%s\n", try_name);
     jio_print(warnbuf);
     delete file;
     file = new(ResourceObj::C_HEAP) fileStream(try_name);
+    FREE_C_HEAP_ARRAY(char, try_name);
   }
   if (file->is_open()) {
     _log_file = file;
--- a/hotspot/src/share/vm/utilities/vmError.cpp	Sun Apr 11 23:24:24 2010 -0700
+++ b/hotspot/src/share/vm/utilities/vmError.cpp	Tue Apr 20 01:30:04 2010 -0700
@@ -807,8 +807,8 @@
       if (fd == -1) {
         // try temp directory
         const char * tmpdir = os::get_temp_directory();
-        jio_snprintf(buffer, sizeof(buffer), "%shs_err_pid%u.log",
-                     (tmpdir ? tmpdir : ""), os::current_process_id());
+        jio_snprintf(buffer, sizeof(buffer), "%s%shs_err_pid%u.log",
+                     tmpdir, os::file_separator(), os::current_process_id());
         fd = open(buffer, O_WRONLY | O_CREAT | O_TRUNC, 0666);
       }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/test/compiler/6892265/Test.java	Tue Apr 20 01:30:04 2010 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2009 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 6892265
+ * @summary System.arraycopy unable to reference elements beyond Integer.MAX_VALUE bytes
+ *
+ * @run main/othervm Test
+ */
+
+public class Test {
+  static  final int NCOPY = 1;
+  static  final int OVERFLOW = 1;
+  static  int[] src2 = new int[NCOPY];
+  static  int[] dst2;
+
+  static void test() {
+    int N;
+    int SIZE;
+
+    N = Integer.MAX_VALUE/4 + OVERFLOW;
+    System.arraycopy(src2, 0, dst2, N, NCOPY);
+    System.arraycopy(dst2, N, src2, 0, NCOPY);
+  }
+
+  public static void main(String[] args) {
+    try {
+      dst2 = new int[NCOPY + Integer.MAX_VALUE/4 + OVERFLOW];
+    } catch (OutOfMemoryError e) {
+       System.exit(95); // Not enough memory
+    }
+    System.out.println("warmup");
+    for (int i=0; i <11000; i++) {
+      test();
+    }
+    System.out.println("start");
+    for (int i=0; i <1000; i++) {
+      test();
+    }
+    System.out.println("finish");
+  }
+
+}
--- a/jaxp/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/jaxp/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 6c0ccabb430dacdcd4479f8b197980d5da4eeb66 jdk7-b85
 81c0f115bbe5d3bcf59864465b5eca5538567c79 jdk7-b86
 8b493f1aa136d86de0885fcba15262c4fa2b1412 jdk7-b87
+d8ebd15910034f2ba50b2f129f959f86cca01419 jdk7-b88
+d2818fd2b036f3b3154a9a7de41afcf4ac679c1b jdk7-b89
--- a/jaxws/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/jaxws/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 8424512588ff95362c1f1e5f11c6efd4e7f7db6e jdk7-b85
 512b0e924a5ae0c0b7ad326182cae0dc0e4d1aa8 jdk7-b86
 3febd6fab2ac8ffddbaf7bed00d11290262af153 jdk7-b87
+8c666f8f3565974e301ccb58b7538912551a6e26 jdk7-b88
+bf3675aa7f20fc6f241ce95760005aef2a30ff41 jdk7-b89
--- a/jdk/.hgtags	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/.hgtags	Tue Apr 20 01:30:04 2010 -0700
@@ -62,3 +62,5 @@
 b396584a3e64988839cca21ea1f7fbdcc9248783 jdk7-b85
 eae6e9ab26064d9ba0e7665dd646a1fd2506fcc1 jdk7-b86
 2cafbbe9825e911a6ca6c17d9a18eb1f0bf0873c jdk7-b87
+b3c69282f6d3c90ec21056cd1ab70dc0c895b069 jdk7-b88
+4a6abb7e224cc8d9a583c23c5782e4668739a119 jdk7-b89
--- a/jdk/make/sun/javazic/tzdata/VERSION	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/VERSION	Tue Apr 20 01:30:04 2010 -0700
@@ -21,4 +21,4 @@
 # CA 95054 USA or visit www.sun.com if you need additional information or
 # have any questions.
 #
-tzdata2010b
+tzdata2010g
--- a/jdk/make/sun/javazic/tzdata/antarctica	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/antarctica	Tue Apr 20 01:30:04 2010 -0700
@@ -79,6 +79,33 @@
 Rule	ChileAQ	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
 Rule	ChileAQ	2000	max	-	Mar	Sun>=9	3:00u	0	-
 
+# These rules are stolen from the `australasia' file.
+Rule	AusAQ	1917	only	-	Jan	 1	0:01	1:00	-
+Rule	AusAQ	1917	only	-	Mar	25	2:00	0	-
+Rule	AusAQ	1942	only	-	Jan	 1	2:00	1:00	-
+Rule	AusAQ	1942	only	-	Mar	29	2:00	0	-
+Rule	AusAQ	1942	only	-	Sep	27	2:00	1:00	-
+Rule	AusAQ	1943	1944	-	Mar	lastSun	2:00	0	-
+Rule	AusAQ	1943	only	-	Oct	 3	2:00	1:00	-
+Rule	ATAQ	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	ATAQ	1968	only	-	Mar	lastSun	2:00s	0	-
+Rule	ATAQ	1968	1985	-	Oct	lastSun	2:00s	1:00	-
+Rule	ATAQ	1969	1971	-	Mar	Sun>=8	2:00s	0	-
+Rule	ATAQ	1972	only	-	Feb	lastSun	2:00s	0	-
+Rule	ATAQ	1973	1981	-	Mar	Sun>=1	2:00s	0	-
+Rule	ATAQ	1982	1983	-	Mar	lastSun	2:00s	0	-
+Rule	ATAQ	1984	1986	-	Mar	Sun>=1	2:00s	0	-
+Rule	ATAQ	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
+Rule	ATAQ	1987	1990	-	Mar	Sun>=15	2:00s	0	-
+Rule	ATAQ	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
+Rule	ATAQ	1988	1990	-	Oct	lastSun	2:00s	1:00	-
+Rule	ATAQ	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	ATAQ	1991	2005	-	Mar	lastSun	2:00s	0	-
+Rule	ATAQ	2000	only	-	Aug	lastSun	2:00s	1:00	-
+Rule	ATAQ	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	ATAQ	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	ATAQ	2007	only	-	Mar	lastSun	2:00s	0	-
+Rule	ATAQ	2008	max	-	Apr	Sun>=1	2:00s	0	-
 
 # Argentina - year-round bases
 # Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
@@ -120,20 +147,52 @@
 # http://www.timeanddate.com/news/time/antarctica-new-times.html
 # </a>
 
+# From Steffen Thorsen (2010-03-10):
+# We got these changes from the Australian Antarctic Division:
+# - Macquarie Island will stay on UTC+11 for winter and therefore not
+# switch back from daylight savings time when other parts of Australia do
+# on 4 April.
+#
+# - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
+# The change to UTC+11 is being considered as a regular summer thing but
+# has not been decided yet.
+#
+# - Davis station will revert to its normal time of UTC+7 at 10 March 2010
+# 20:00 UTC.
+#
+# - Mawson station stays on UTC+5.
+#
+# In addition to the Rule changes for Casey/Davis, it means that Macquarie
+# will no longer be like Hobart and will have to have its own Zone created.
+#
+# Background:
+# <a href="http://www.timeanddate.com/news/time/antartica-time-changes-2010.html">
+# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
+# </a>
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Antarctica/Casey	0	-	zzz	1969
 			8:00	-	WST	2009 Oct 18 2:00
 						# Western (Aus) Standard Time
-			11:00	-	CAST	# Casey Time
+			11:00	-	CAST	2010 Mar 5 2:00
+						# Casey Time
+			8:00	-	WST
 Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
 			7:00	-	DAVT	1964 Nov # Davis Time
 			0	-	zzz	1969 Feb
 			7:00	-	DAVT	2009 Oct 18 2:00
-			5:00	-	DAVT
+			5:00	-	DAVT	2010 Mar 10 20:00u
+			7:00	-	DAVT
 Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
 			6:00	-	MAWT	2009 Oct 18 2:00
 						# Mawson Time
 			5:00	-	MAWT
+Zone Antarctica/Macquarie 0	-	zzz	1911
+			10:00	-	EST	1916 Oct 1 2:00
+			10:00	1:00	EST	1917 Feb
+			10:00	AusAQ	EST	1967
+			10:00	ATAQ	EST	2010 Apr 4 3:00
+			11:00	-	MIST	# Macquarie Island Time
 # References:
 # <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html">
 # Casey Weather (1998-02-26)
--- a/jdk/make/sun/javazic/tzdata/asia	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/asia	Tue Apr 20 01:30:04 2010 -0700
@@ -236,22 +236,20 @@
 # 2010 midnight. The decision came at a cabinet meeting at the Prime
 # Minister's Office last night..."
 
-# From Danvin Ruangchan (2009-12-24):
-# ...the news mentions DST will be turned off again 7 months after March
-# 31st on Oct 31, 2010.
-
-# From Arthur David Olson (2009-12-26):
-# Indeed, "The government will advance again the Banglasdesh Standard
-# Time by one one hour on March 31 next year by enforcing the Daylight
-# Saving Time (DST) for seven months. It will continue till October 31
-# until further notice." I take that last sentence as the
-# establishment of a rule.
+# From Alexander Krivenyshev (2010-03-22):
+# According to Bangladesh newspaper "The Daily Star,"
+# Cabinet cancels Daylight Saving Time 
+# <a href="http://www.thedailystar.net/newDesign/latest_news.php?nid=22817">
+# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
+# </a>
+# or
+# <a href="http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html">
+# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
+# </a>
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	S
-Rule	Dhaka	2010	only	-	Jan	1	0:00	0	-
-Rule	Dhaka	2010	max	-	Mar	31	23:00	1:00	S
-Rule	Dhaka	2010	max	-	Nov	1	0:00	0	-
+Rule	Dhaka	2009	only	-	Dec	31	23:59	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dhaka	6:01:40 -	LMT	1890
@@ -2131,6 +2129,32 @@
 # http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
 # </a>
 
+# From Alexander Krivenyshev (2010-03-19):
+# According to Voice of Palestine DST will last for 191 days, from March
+# 26, 2010 till "the last Sunday before the tenth day of Tishri
+# (October), each year" (October 03, 2010?)
+#
+# <a href="http://palvoice.org/forums/showthread.php?t=245697">
+# http://palvoice.org/forums/showthread.php?t=245697
+# </a>
+# (in Arabic)
+# or
+# <a href="http://www.worldtimezone.com/dst_news/dst_news_westbank03.html">
+# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
+# </a>
+
+# From Steffen Thorsen (2010-03-24):
+# ...Ma'an News Agency reports that Hamas cabinet has decided it will
+# start one day later, at 12:01am. Not sure if they really mean 12:01am or
+# noon though:
+#
+# <a href="http://www.maannews.net/eng/ViewDetails.aspx?ID=271178">
+# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
+# </a>
+# (Ma'an News Agency)
+# "At 12:01am Friday, clocks in Israel and the West Bank will change to
+# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
+
 # The rules for Egypt are stolen from the `africa' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
@@ -2148,7 +2172,8 @@
 Rule Palestine	2006	only	-	Sep	22	0:00	0	-
 Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
 Rule Palestine	2008	only	-	Aug	lastFri	2:00	0	-
-Rule Palestine	2009	max	-	Mar	lastFri	0:00	1:00	S
+Rule Palestine	2009	only	-	Mar	lastFri	0:00	1:00	S
+Rule Palestine	2010	max	-	Mar	lastSat	0:01	1:00	S
 Rule Palestine	2009	max	-	Sep	Fri>=1	2:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -2440,9 +2465,18 @@
 # Thursday of the month or the start of the last Friday of the month or
 # something else. For now, use the start of the last Friday.
 
+# From Steffen Thorsen (2010-03-17):
+# The "Syrian News Station" reported on 2010-03-16 that the Council of
+# Ministers has decided that Syria will start DST on midnight Thursday
+# 2010-04-01: (midnight between Thursday and Friday):
+# <a href="http://sns.sy/sns/?path=news/read/11421">
+# http://sns.sy/sns/?path=news/read/11421 (Arabic)
+# </a>
+
 Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
 Rule	Syria	2008	only	-	Nov	1	0:00	0	-
-Rule	Syria	2009	max	-	Mar	lastFri	0:00	1:00	S
+Rule	Syria	2009	only	-	Mar	lastFri	0:00	1:00	S
+Rule	Syria	2010	max	-	Apr	Fri>=1	0:00	1:00	S
 Rule	Syria	2009	max	-	Oct	lastFri	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
--- a/jdk/make/sun/javazic/tzdata/australasia	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/australasia	Tue Apr 20 01:30:04 2010 -0700
@@ -289,11 +289,30 @@
 # <a href="http://www.fiji.gov.fj/publish/page_16198.shtml">
 # http://www.fiji.gov.fj/publish/page_16198.shtml
 # </a>
+
+# From Steffen Thorsen (2010-03-03):
+# The Cabinet in Fiji has decided to end DST about a month early, on
+# 2010-03-28 at 03:00.
+# The plan is to observe DST again, from 2010-10-24 to sometime in March
+# 2011 (last Sunday a good guess?).
+#
+# Official source:
+# <a href="http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166">
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
+# </a>
+#
+# A bit more background info here:
+# <a href="http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html">
+# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
+# </a>
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
 Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
 Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
-Rule	Fiji	2010	only	-	Apr	25	3:00	0	-
+Rule	Fiji	2010	only	-	Mar	lastSun	3:00	0	-
+Rule	Fiji	2010	only	-	Oct	24	2:00	1:00	S
+Rule	Fiji	2011	only	-	Mar	lastSun 3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
 			12:00	Fiji	FJ%sT	# Fiji Time
@@ -471,70 +490,30 @@
 
 # Samoa
 
-# From Alexander Krivenyshev (2008-12-06):
-# The Samoa government (Western Samoa) may implement DST on the first Sunday of 
-# October 2009 (October 4, 2009) until the last Sunday of March 2010 (March 28, 
-# 2010). 
-# 
-# "Selected Committee reports to Cabinet on Daylight Saving Time",
-# Government of Samoa:
-# <a href="http://www.govt.ws/pr_article.cfm?pr_id=560">
-# http://www.govt.ws/pr_article.cfm?pr_id=560
-# </a>
-# or
-# <a href="http://www.worldtimezone.com/dst_news/dst_news_samoa01.html">
-# http://www.worldtimezone.com/dst_news/dst_news_samoa01.html
-# </a>
-
-# From Steffen Thorsen (2009-08-27):
-# Samoa's parliament passed the Daylight Saving Bill 2009, and will start 
-# daylight saving time on the first Sunday of October 2009 and end on the 
-# last Sunday of March 2010. We hope that the full text will be published 
-# soon, but we believe that the bill is only valid for 2009-2010. Samoa's 
-# Daylight Saving Act 2009 will be enforced as soon as the Head of State 
-# executes a proclamation publicizing this Act.
+# From Steffen Thorsen (2009-10-16):
+# We have been in contact with the government of Samoa again, and received
+# the following info:
 #
-# Some background information here, which will be updated once we have 
-# more details:
+# "Cabinet has now approved Daylight Saving to be effected next year
+# commencing from the last Sunday of September 2010 and conclude first
+# Sunday of April 2011."
+#
+# Background info:
 # <a href="http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html">
 # http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
 # </a>
-
-# From Alexander Krivenyshev (2009-10-03):
-# First, my deepest condolences to people of Samoa islands and all families and
-# loved ones around the world who lost their lives in the earthquake and tsunami.
 #
-# Considering the recent devastation on Samoa by earthquake and tsunami and that
-# many government offices/ ministers are closed- not sure if "Daylight Saving
-# Bill 2009" will be implemented in next few days- on October 4, 2009.
-#
-# Here is reply from Consulate-General of Samoa in New Zealand
-# ---------------------------
-# Consul General
-# consulgeneral@samoaconsulate.org.nz
-#
-# Talofa Alexander,
-#
-# Thank you for your sympathy for our country but at this time we have not
-# been informed about the Daylight Savings Time Change.  Most Ministries in
-# Apia are closed or relocating due to weather concerns.
-#
-# When we do find out if they are still proceeding with the time change we
-# will advise you soonest.
-#
-# Kind Regards,
-# Lana
-# for: Consul General
-
-# From Steffen Thorsen (2009-10-05):
-# We have called a hotel in Samoa and asked about local time there - they 
-# are still on standard time.
+# Samoa's Daylight Saving Time Act 2009 is available here, but does not
+# contain any dates:
+# <a href="http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf">
+# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
+# </a>
 
 Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
 			-11:26:56 -	LMT	1911
 			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	WST	2009 Oct 4
-			-11:00	1:00	WSDT	2010 Mar 28
+			-11:00	-	WST	2010 Sep 26
+			-11:00	1:00	WSDT	2011 Apr 3
 			-11:00	-	WST
 
 # Solomon Is
--- a/jdk/make/sun/javazic/tzdata/europe	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/europe	Tue Apr 20 01:30:04 2010 -0700
@@ -2063,7 +2063,9 @@
 			 3:00	Russia	KUY%sT	1991 Mar 31 2:00s
 			 2:00	Russia	KUY%sT	1991 Sep 29 2:00s
 			 3:00	-	KUYT	1991 Oct 20 3:00
-			 4:00	Russia	SAM%sT	# Samara Time
+			 4:00	Russia	SAM%sT	2010 Mar 28 2:00s # Samara Time
+			 3:00	Russia	SAM%sT
+
 #
 # From Oscar van Vlijmen (2001-08-25): [This region consists of]
 # Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
@@ -2216,7 +2218,8 @@
 			11:00	-	PETT	1930 Jun 21 # P-K Time
 			12:00	Russia	PET%sT	1991 Mar 31 2:00s
 			11:00	Russia	PET%sT	1992 Jan 19 2:00s
-			12:00	Russia	PET%sT
+			12:00	Russia	PET%sT	2010 Mar 28 2:00s
+			11:00	Russia	PET%sT
 #
 # Chukotskij avtonomnyj okrug
 Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
@@ -2224,7 +2227,8 @@
 			13:00	Russia	ANA%sT	1982 Apr  1 0:00s
 			12:00	Russia	ANA%sT	1991 Mar 31 2:00s
 			11:00	Russia	ANA%sT	1992 Jan 19 2:00s
-			12:00	Russia	ANA%sT
+			12:00	Russia	ANA%sT	2010 Mar 28 2:00s
+			11:00	Russia	ANA%sT
 
 # Serbia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
--- a/jdk/make/sun/javazic/tzdata/southamerica	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/southamerica	Tue Apr 20 01:30:04 2010 -0700
@@ -1143,6 +1143,18 @@
 # http://www.shoa.cl/noticias/2008/04hora/hora.htm
 # </a>.
 
+# From Angel Chiang (2010-03-04):
+# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
+# <a href="http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098">
+# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
+# </a>
+# (in Spanish, last paragraph).
+#
+# This is breaking news. There should be more information available later.
+
+# From Arthur Daivd Olson (2010-03-06):
+# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
 Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
@@ -1177,7 +1189,9 @@
 # N.B.: the end of March 29 in Chile is March 30 in Universal time,
 # which is used below in specifying the transition.
 Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
-Rule	Chile	2009	max	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	2010	only	-	Apr	 4	3:00u	0	-
+Rule	Chile	2011	max	-	Mar	Sun>=9	3:00u	0	-
 # IATA SSIM anomalies: (1992-02) says 1992-03-14;
 # (1996-09) says 1998-03-08.  Ignore these.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -1386,8 +1400,24 @@
 # Decree 1,867 (2004-03-05)
 # From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
 # <http://www.presidencia.gov.py/decretos/D1867.pdf>
-Rule	Para	2004	max	-	Oct	Sun>=15	0:00	1:00	S
-Rule	Para	2005	max	-	Mar	Sun>=8	0:00	0	-
+Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	S
+Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
+# From Carlos Raul Perasso (2010-02-18):
+# By decree number 3958 issued yesterday (
+# <a href="http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf">
+# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
+# </a>
+# )
+# Paraguay changes its DST schedule, postponing the March rule to April and
+# modifying the October date. The decree reads:
+# ...
+# Art. 1. It is hereby established that from the second Sunday of the month of
+# April of this year (2010), the official time is to be set back 60 minutes,
+# and that on the first Sunday of the month of October, it is to be set
+# forward 60 minutes, in all the territory of the Paraguayan Republic.
+# ...
+Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
+Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
--- a/jdk/make/sun/javazic/tzdata/zone.tab	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/javazic/tzdata/zone.tab	Tue Apr 20 01:30:04 2010 -0700
@@ -66,6 +66,7 @@
 AQ	-7824+10654	Antarctica/Vostok	Vostok Station, S Magnetic Pole
 AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
+AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
 AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
 AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, MN, SE, SF)
 AR	-2447-06525	America/Argentina/Salta	(SA, LP, NQ, RN)
@@ -351,7 +352,7 @@
 RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
 RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
 RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
-RU	+5312+05009	Europe/Samara	Moscow+01 - Samara, Udmurtia
+RU	+5312+05009	Europe/Samara	Moscow - Samara, Udmurtia
 RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
 RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
 RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
@@ -362,8 +363,8 @@
 RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
 RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
 RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
-RU	+5301+15839	Asia/Kamchatka	Moscow+09 - Kamchatka
-RU	+6445+17729	Asia/Anadyr	Moscow+10 - Bering Sea
+RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
+RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
 RW	-0157+03004	Africa/Kigali
 SA	+2438+04643	Asia/Riyadh
 SB	-0932+16012	Pacific/Guadalcanal
--- a/jdk/make/sun/nio/cs/FILES_java.gmk	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/nio/cs/FILES_java.gmk	Tue Apr 20 01:30:04 2010 -0700
@@ -42,8 +42,6 @@
 	sun/io/ByteToCharBig5_Solaris.java \
 	sun/io/ByteToCharBig5_HKSCS.java \
 	sun/io/ByteToCharMS950_HKSCS.java \
-	sun/io/ByteToCharHKSCS.java \
-	sun/io/ByteToCharHKSCS_2001.java \
 	sun/io/ByteToCharGB18030.java \
 	sun/io/ByteToCharGB18030DB.java \
 	sun/io/ByteToCharCp037.java \
@@ -173,8 +171,6 @@
 	sun/io/CharToByteBig5.java \
 	sun/io/CharToByteBig5_Solaris.java \
 	sun/io/CharToByteBig5_HKSCS.java \
-	sun/io/CharToByteHKSCS.java \
-	sun/io/CharToByteHKSCS_2001.java \
 	sun/io/CharToByteMS950_HKSCS.java \
 	sun/io/CharToByteGB18030.java \
 	sun/io/CharToByteCp037.java \
@@ -374,6 +370,9 @@
 	sun/nio/cs/ext/MacUkraine.java \
 	sun/nio/cs/ext/TIS_620.java \
         sun/nio/cs/ext/EUC_TWMapping.java \
+        sun/nio/cs/ext/HKSCSMapping.java \
+        sun/nio/cs/ext/HKSCS2001Mapping.java \
+        sun/nio/cs/ext/HKSCS_XPMapping.java \
 	sun/nio/cs/ext/IBM1381.java \
 	sun/nio/cs/ext/IBM1383.java \
 	sun/nio/cs/ext/IBM930.java \
@@ -394,7 +393,8 @@
 	sun/nio/cs/ext/MS936.java \
 	sun/nio/cs/ext/MS949.java \
 	sun/nio/cs/ext/MS950.java \
-	sun/nio/cs/ext/GBK.java
+	sun/nio/cs/ext/GBK.java   \
+	sun/nio/cs/ext/Big5.java
 
 FILES_java = $(FILES_src) $(FILES_gen_extcs)
 
--- a/jdk/make/sun/nio/cs/Makefile	Sun Apr 11 23:24:24 2010 -0700
+++ b/jdk/make/sun/nio/cs/Makefile	Tue Apr 20 01:30:04 2010 -0700
@@ -93,7 +93,9 @@
 	$(MKDIR) -p $(GENCSEXT)
 	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE)	$(GENCSDATASRC) $(GENCSEXT) extsbcs
 	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) euctw \
-		$(GENCSSRCDIR)/GenerateEUC_TW.java
+		$(GENCSSRCDIR)/EUC_TW.java
+	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) hkscs \
+		$(GENCSSRCDIR)/HKSCS.java
 	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) dbcs
 
 $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/tools/CharsetMapping/Big5.c2b	Tue Apr 20 01:30:04 2010 -0700
@@ -0,0 +1,8 @@
+#Add the following 5 characters which are duplicated
+#or have conflicts with other characters.
+0xA1C4	0xFF3F	#REGWARN Fallback 0xA1C4 SPACING UNDERSCORE
+0xA2AC	0x2571	#REGWARN Fallback 0xA2AC LT DIAG UP RIGHT TO LOW LEFT
+0xA2AD	0x2572	#REGWARN Fallback 0xA2AD LT DIAG UP LEFT TO LOW RIGHT
+0xA451	0x5341	#REGWARN Fallback 0xA451 HANGZHOU NUMERAL TEN
+0xA4CA	0x5345	#REGWARN Fallback 0xA4CA HANGZHOU NUMERAL THIRTY
+#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/tools/CharsetMapping/Big5.map	Tue Apr 20 01:30:04 2010 -0700
@@ -0,0 +1,13837 @@
+#  From Big5.b2c
+#  Added sb
+#  Added Big5.b2c-irreversible
+#
+0x00	0x0000
+0x01	0x0001
+0x02	0x0002
+0x03	0x0003
+0x04	0x0004
+0x05	0x0005
+0x06	0x0006
+0x07	0x0007
+0x08	0x0008
+0x09	0x0009
+0x0a	0x000a
+0x0b	0x000b
+0x0c	0x000c
+0x0d	0x000d
+0x0e	0x000e
+0x0f	0x000f
+0x10	0x0010
+0x11	0x0011
+0x12	0x0012
+0x13	0x0013
+0x14	0x0014
+0x15	0x0015
+0x16	0x0016
+0x17	0x0017
+0x18	0x0018
+0x19	0x0019
+0x1a	0x001a
+0x1b	0x001b
+0x1c	0x001c
+0x1d	0x001d
+0x1e	0x001e
+0x1f	0x001f
+0x20    0x0020  # SPACE
+0x21    0x0021  # EXCLAMATION MARK
+0x22    0x0022  # QUOTATION MARK
+0x23    0x0023  # NUMBER SIGN
+0x24    0x0024  # DOLLAR SIGN
+0x25    0x0025  # PERCENT SIGN
+0x26    0x0026  # AMPERSAND
+0x27    0x0027  # APOSTROPHE
+0x28    0x0028  # LEFT PARENTHESIS
+0x29    0x0029  # RIGHT PARENTHESIS
+0x2A    0x002A  # ASTERISK
+0x2B    0x002B  # PLUS SIGN
+0x2C    0x002C  # COMMA
+0x2D    0x002D  # HYPHEN-MINUS
+0x2E    0x002E  # FULL STOP
+0x2F    0x002F  # SOLIDUS
+0x30    0x0030  # DIGIT ZERO
+0x31    0x0031  # DIGIT ONE
+0x32    0x0032  # DIGIT TWO
+0x33    0x0033  # DIGIT THREE
+0x34    0x0034  # DIGIT FOUR
+0x35    0x0035  # DIGIT FIVE
+0x36    0x0036  # DIGIT SIX
+0x37    0x0037  # DIGIT SEVEN
+0x38    0x0038  # DIGIT EIGHT
+0x39    0x0039  # DIGIT NINE
+0x3A    0x003A  # COLON
+0x3B    0x003B  # SEMICOLON
+0x3C    0x003C  # LESS-THAN SIGN
+0x3D    0x003D  # EQUALS SIGN
+0x3E    0x003E  # GREATER-THAN SIGN
+0x3F    0x003F  # QUESTION MARK
+0x40    0x0040  # COMMERCIAL AT
+0x41    0x0041  # LATIN CAPITAL LETTER A
+0x42    0x0042  # LATIN CAPITAL LETTER B
+0x43    0x0043  # LATIN CAPITAL LETTER C
+0x44    0x0044  # LATIN CAPITAL LETTER D
+0x45    0x0045  # LATIN CAPITAL LETTER E
+0x46    0x0046  # LATIN CAPITAL LETTER F
+0x47    0x0047  # LATIN CAPITAL LETTER G
+0x48    0x0048  # LATIN CAPITAL LETTER H
+0x49    0x0049  # LATIN CAPITAL LETTER I
+0x4A    0x004A  # LATIN CAPITAL LETTER J
+0x4B    0x004B  # LATIN CAPITAL LETTER K
+0x4C    0x004C  # LATIN CAPITAL LETTER L
+0x4D    0x004D  # LATIN CAPITAL LETTER M
+0x4E    0x004E  # LATIN CAPITAL LETTER N
+0x4F    0x004F  # LATIN CAPITAL LETTER O
+0x50    0x0050  # LATIN CAPITAL LETTER P
+0x51    0x0051  # LATIN CAPITAL LETTER Q
+0x52    0x0052  # LATIN CAPITAL LETTER R
+0x53    0x0053  # LATIN CAPITAL LETTER S
+0x54    0x0054  # LATIN CAPITAL LETTER T
+0x55    0x0055  # LATIN CAPITAL LETTER U
+0x56    0x0056  # LATIN CAPITAL LETTER V
+0x57    0x0057  # LATIN CAPITAL LETTER W
+0x58    0x0058  # LATIN CAPITAL LETTER X
+0x59    0x0059  # LATIN CAPITAL LETTER Y
+0x5A    0x005A  # LATIN CAPITAL LETTER Z
+0x5B    0x005B  # LEFT SQUARE BRACKET
+0x5C    0x005C  # WON SIGN
+0x5D    0x005D  # RIGHT SQUARE BRACKET
+0x5E    0x005E  # CIRCUMFLEX ACCENT
+0x5F    0x005F  # LOW LINE
+0x60    0x0060  # GRAVE ACCENT
+0x61    0x0061  # LATIN SMALL LETTER A
+0x62    0x0062  # LATIN SMALL LETTER B
+0x63    0x0063  # LATIN SMALL LETTER C
+0x64    0x0064  # LATIN SMALL LETTER D
+0x65    0x0065  # LATIN SMALL LETTER E
+0x66    0x0066  # LATIN SMALL LETTER F
+0x67    0x0067  # LATIN SMALL LETTER G
+0x68    0x0068  # LATIN SMALL LETTER H
+0x69    0x0069  # LATIN SMALL LETTER I
+0x6A    0x006A  # LATIN SMALL LETTER J
+0x6B    0x006B  # LATIN SMALL LETTER K
+0x6C    0x006C  # LATIN SMALL LETTER L
+0x6D    0x006D  # LATIN SMALL LETTER M
+0x6E    0x006E  # LATIN SMALL LETTER N
+0x6F    0x006F  # LATIN SMALL LETTER O
+0x70    0x0070  # LATIN SMALL LETTER P
+0x71    0x0071  # LATIN SMALL LETTER Q
+0x72    0x0072  # LATIN SMALL LETTER R
+0x73    0x0073  # LATIN SMALL LETTER S
+0x74    0x0074  # LATIN SMALL LETTER T
+0x75    0x0075  # LATIN SMALL LETTER U
+0x76    0x0076  # LATIN SMALL LETTER V
+0x77    0x0077  # LATIN SMALL LETTER W
+0x78    0x0078  # LATIN SMALL LETTER X
+0x79    0x0079  # LATIN SMALL LETTER Y
+0x7A    0x007A  # LATIN SMALL LETTER Z
+0x7B    0x007B  # LEFT CURLY BRACKET
+0x7C    0x007C  # VERTICAL LINE
+0x7D    0x007D  # RIGHT CURLY BRACKET
+0x7E    0x007E  # TILDE
+0x7F    0x007F
+#
+0xA140	0x3000	# IDEOGRAPHIC SPACE
+0xA141	0xFF0C	# FULLWIDTH COMMA
+0xA142	0x3001	# IDEOGRAPHIC COMMA
+0xA143	0x3002	# IDEOGRAPHIC FULL STOP
+0xA144	0xFF0E	# FULLWIDTH FULL STOP
+0xA145	0x2022	# BULLET
+0xA146	0xFF1B	# FULLWIDTH SEMICOLON
+0xA147	0xFF1A	# FULLWIDTH COLON
+0xA148	0xFF1F	# FULLWIDTH QUESTION MARK
+0xA149	0xFF01	# FULLWIDTH EXCLAMATION MARK
+0xA14A	0xFE30	# PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+0xA14B	0x2026	# HORIZONTAL ELLIPSIS
+0xA14C	0x2025	# TWO DOT LEADER
+0xA14D	0xFE50	# SMALL COMMA
+0xA14E	0xFF64	# HALFWIDTH IDEOGRAPHIC COMMA
+0xA14F	0xFE52	# SMALL FULL STOP
+0xA150	0x00B7	# MIDDLE DOT
+0xA151	0xFE54	# SMALL SEMICOLON
+0xA152	0xFE55	# SMALL COLON
+0xA153	0xFE56	# SMALL QUESTION MARK
+0xA154	0xFE57	# SMALL EXCLAMATION MARK
+0xA155	0xFF5C	# FULLWIDTH VERTICAL BAR
+0xA156	0x2013	# EN DASH
+0xA157	0xFE31	# PRESENTATION FORM FOR VERTICAL EM DASH
+0xA158	0x2014	# EM DASH
+0xA159	0xFE33	# PRESENTATION FORM FOR VERTICAL LOW LINE
+0xA15B	0xFE34	# PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+0xA15C	0xFE4F	# WAVY LOW LINE
+0xA15D	0xFF08	# FULLWIDTH LEFT PARENTHESIS
+0xA15E	0xFF09	# FULLWIDTH RIGHT PARENTHESIS
+0xA15F	0xFE35	# PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+0xA160	0xFE36	# PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+0xA161	0xFF5B	# FULLWIDTH LEFT CURLY BRACKET
+0xA162	0xFF5D	# FULLWIDTH RIGHT CURLY BRACKET
+0xA163	0xFE37	# PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+0xA164	0xFE38	# PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+0xA165	0x3014	# LEFT TORTOISE SHELL BRACKET
+0xA166	0x3015	# RIGHT TORTOISE SHELL BRACKET
+0xA167	0xFE39	# PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+0xA168	0xFE3A	# PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+0xA169	0x3010	# LEFT BLACK LENTICULAR BRACKET
+0xA16A	0x3011	# RIGHT BLACK LENTICULAR BRACKET
+0xA16B	0xFE3B	# PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+0xA16C	0xFE3C	# PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+0xA16D	0x300A	# LEFT DOUBLE ANGLE BRACKET
+0xA16E	0x300B	# RIGHT DOUBLE ANGLE BRACKET
+0xA16F	0xFE3D	# PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+0xA170	0xFE3E	# PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+0xA171	0x3008	# LEFT ANGLE BRACKET
+0xA172	0x3009	# RIGHT ANGLE BRACKET
+0xA173	0xFE3F	# PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+0xA174	0xFE40	# PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+0xA175	0x300C	# LEFT CORNER BRACKET
+0xA176	0x300D	# RIGHT CORNER BRACKET
+0xA177	0xFE41	# PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+0xA178	0xFE42	# PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+0xA179	0x300E	# LEFT WHITE CORNER BRACKET
+0xA17A	0x300F	# RIGHT WHITE CORNER BRACKET
+0xA17B	0xFE43	# PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+0xA17C	0xFE44	# PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+0xA17D	0xFE59	# SMALL LEFT PARENTHESIS
+0xA17E	0xFE5A	# SMALL RIGHT PARENTHESIS
+0xA1A1	0xFE5B	# SMALL LEFT CURLY BRACKET
+0xA1A2	0xFE5C	# SMALL RIGHT CURLY BRACKET
+0xA1A3	0xFE5D	# SMALL LEFT TORTOISE SHELL BRACKET
+0xA1A4	0xFE5E	# SMALL RIGHT TORTOISE SHELL BRACKET
+0xA1A5	0x2018	# LEFT SINGLE QUOTATION MARK
+0xA1A6	0x2019	# RIGHT SINGLE QUOTATION MARK
+0xA1A7	0x201C	# LEFT DOUBLE QUOTATION MARK
+0xA1A8	0x201D	# RIGHT DOUBLE QUOTATION MARK
+0xA1A9	0x301D	# REVERSED DOUBLE PRIME QUOTATION MARK
+0xA1AA	0x301E	# DOUBLE PRIME QUOTATION MARK
+0xA1AB	0x2035	# REVERSED PRIME
+0xA1AC	0x2032	# PRIME
+0xA1AD	0xFF03	# FULLWIDTH NUMBER SIGN
+0xA1AE	0xFF06	# FULLWIDTH AMPERSAND
+0xA1AF	0xFF0A	# FULLWIDTH ASTERISK
+0xA1B0	0x203B	# REFERENCE MARK
+0xA1B1	0x00A7	# SECTION SIGN
+0xA1B2	0x3003	# DITTO MARK
+0xA1B3	0x25CB	# WHITE CIRCLE
+0xA1B4	0x25CF	# BLACK CIRCLE
+0xA1B5	0x25B3	# WHITE UP-POINTING TRIANGLE
+0xA1B6	0x25B2	# BLACK UP-POINTING TRIANGLE
+0xA1B7	0x25CE	# BULLSEYE
+0xA1B8	0x2606	# WHITE STAR
+0xA1B9	0x2605	# BLACK STAR
+0xA1BA	0x25C7	# WHITE DIAMOND
+0xA1BB	0x25C6	# BLACK DIAMOND
+0xA1BC	0x25A1	# WHITE SQUARE
+0xA1BD	0x25A0	# BLACK SQUARE
+0xA1BE	0x25BD	# WHITE DOWN-POINTING TRIANGLE
+0xA1BF	0x25BC	# BLACK DOWN-POINTING TRIANGLE
+0xA1C0	0x32A3	# CIRCLED IDEOGRAPH CORRECT
+0xA1C1	0x2105	# CARE OF
+0xA1C2	0x203E	# OVERLINE
+0xA1C6	0xFE49	# DASHED OVERLINE
+0xA1C7	0xFE4A	# CENTRELINE OVERLINE
+0xA1C8	0xFE4D	# DASHED LOW LINE
+0xA1C9	0xFE4E	# CENTRELINE LOW LINE
+0xA1CA	0xFE4B	# WAVY OVERLINE
+0xA1CB	0xFE4C	# DOUBLE WAVY OVERLINE
+0xA1CC	0xFE5F	# SMALL NUMBER SIGN
+0xA1CD	0xFE60	# SMALL AMPERSAND
+0xA1CE	0xFE61	# SMALL ASTERISK
+0xA1CF	0xFF0B	# FULLWIDTH PLUS SIGN
+0xA1D0	0xFF0D	# FULLWIDTH HYPHEN-MINUS
+0xA1D1	0x00D7	# MULTIPLICATION SIGN
+0xA1D2	0x00F7	# DIVISION SIGN
+0xA1D3	0x00B1	# PLUS-MINUS SIGN
+0xA1D4	0x221A	# SQUARE ROOT
+0xA1D5	0xFF1C	# FULLWIDTH LESS-THAN SIGN
+0xA1D6	0xFF1E	# FULLWIDTH GREATER-THAN SIGN
+0xA1D7	0xFF1D	# FULLWIDTH EQUALS SIGN
+0xA1D8	0x2266	# LESS THAN OVER EQUAL TO
+0xA1D9	0x2267	# GREATER THAN OVER EQUAL TO
+0xA1DA	0x2260	# NOT EQUAL TO
+0xA1DB	0x221E	# INFINITY
+0xA1DC	0x2252	# APPROXIMATELY EQUAL TO OR THE IMAGE OF
+0xA1DD	0x2261	# IDENTICAL TO
+0xA1DE	0xFE62	# SMALL PLUS SIGN
+0xA1DF	0xFE63	# SMALL HYPHEN-MINUS
+0xA1E0	0xFE64	# SMALL LESS-THAN SIGN
+0xA1E1	0xFE65	# SMALL GREATER-THAN SIGN
+0xA1E2	0xFE66	# SMALL EQUALS SIGN
+0xA1E3	0x223C	# TILDE OPERATOR
+0xA1E4	0x2229	# INTERSECTION
+0xA1E5	0x222A	# UNION
+0xA1E6	0x22A5	# UP TACK
+0xA1E7	0x2220	# ANGLE
+0xA1E8	0x221F	# RIGHT ANGLE
+0xA1E9	0x22BF	# RIGHT TRIANGLE
+0xA1EA	0x33D2	# SQUARE LOG
+0xA1EB	0x33D1	# SQUARE LN
+0xA1EC	0x222B	# INTEGRAL
+0xA1ED	0x222E	# CONTOUR INTEGRAL
+0xA1EE	0x2235	# BECAUSE
+0xA1EF	0x2234	# THEREFORE
+0xA1F0	0x2640	# FEMALE SIGN
+0xA1F1	0x2642	# MALE SIGN
+0xA1F2	0x2641	# EARTH
+0xA1F3	0x2609	# SUN
+0xA1F4	0x2191	# UPWARDS ARROW
+0xA1F5	0x2193	# DOWNWARDS ARROW
+0xA1F6	0x2190	# LEFTWARDS ARROW
+0xA1F7	0x2192	# RIGHTWARDS ARROW
+0xA1F8	0x2196	# NORTH WEST ARROW
+0xA1F9	0x2197	# NORTH EAST ARROW
+0xA1FA	0x2199	# SOUTH WEST ARROW
+0xA1FB	0x2198	# SOUTH EAST ARROW
+0xA1FC	0x2225	# PARALLEL TO
+0xA1FD	0x2223	# DIVIDES
+0xA241	0xFF0F	# FULLWIDTH SOLIDUS
+0xA242	0xFF3C	# FULLWIDTH REVERSE SOLIDUS
+0xA243	0xFF04	# FULLWIDTH DOLLAR SIGN
+0xA244	0x00A5	# YEN SIGN
+0xA245	0x3012	# POSTAL MARK
+0xA246	0x00A2	# CENT SIGN
+0xA247	0x00A3	# POUND SIGN
+0xA248	0xFF05	# FULLWIDTH PERCENT SIGN
+0xA249	0xFF20	# FULLWIDTH COMMERCIAL AT
+0xA24A	0x2103	# DEGREE CELSIUS
+0xA24B	0x2109	# DEGREE FAHRENHEIT
+0xA24C	0xFE69	# SMALL DOLLAR SIGN
+0xA24D	0xFE6A	# SMALL PERCENT SIGN
+0xA24E	0xFE6B	# SMALL COMMERCIAL AT
+0xA24F	0x33D5	# SQUARE MIL
+0xA250	0x339C	# SQUARE MM
+0xA251	0x339D	# SQUARE CM
+0xA252	0x339E	# SQUARE KM
+0xA253	0x33CE	# SQUARE KM CAPITAL
+0xA254	0x33A1	# SQUARE M SQUARED
+0xA255	0x338E	# SQUARE MG
+0xA256	0x338F	# SQUARE KG
+0xA257	0x33C4	# SQUARE CC
+0xA258	0x00B0	# DEGREE SIGN
+0xA259	0x5159	# <CJK>
+0xA25A	0x515B	# <CJK>
+0xA25B	0x515E	# <CJK>
+0xA25C	0x515D	# <CJK>
+0xA25D	0x5161	# <CJK>
+0xA25E	0x5163	# <CJK>
+0xA25F	0x55E7	# <CJK>
+0xA260	0x74E9	# <CJK>
+0xA261	0x7CCE	# <CJK>
+0xA262	0x2581	# LOWER ONE EIGHTH BLOCK
+0xA263	0x2582	# LOWER ONE QUARTER BLOCK
+0xA264	0x2583	# LOWER THREE EIGHTHS BLOCK
+0xA265	0x2584	# LOWER HALF BLOCK
+0xA266	0x2585	# LOWER FIVE EIGHTHS BLOCK
+0xA267	0x2586	# LOWER THREE QUARTERS BLOCK
+0xA268	0x2587	# LOWER SEVEN EIGHTHS BLOCK
+0xA269	0x2588	# FULL BLOCK
+0xA26A	0x258F	# LEFT ONE EIGHTH BLOCK
+0xA26B	0x258E	# LEFT ONE QUARTER BLOCK
+0xA26C	0x258D	# LEFT THREE EIGHTHS BLOCK
+0xA26D	0x258C	# LEFT HALF BLOCK
+0xA26E	0x258B	# LEFT FIVE EIGHTHS BLOCK
+0xA26F	0x258A	# LEFT THREE QUARTERS BLOCK
+0xA270	0x2589	# LEFT SEVEN EIGHTHS BLOCK
+0xA271	0x253C	# BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xA272	0x2534	# BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xA273	0x252C	# BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xA274	0x2524	# BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xA275	0x251C	# BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xA276	0x2594	# UPPER ONE EIGHTH BLOCK
+0xA277	0x2500	# BOX DRAWINGS LIGHT HORIZONTAL
+0xA278	0x2502	# BOX DRAWINGS LIGHT VERTICAL
+0xA279	0x2595	# RIGHT ONE EIGHTH BLOCK
+0xA27A	0x250C	# BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xA27B	0x2510	# BOX DRAWINGS LIGHT DOWN AND LEFT
+0xA27C	0x2514	# BOX DRAWINGS LIGHT UP AND RIGHT
+0xA27D	0x2518	# BOX DRAWINGS LIGHT UP AND LEFT
+0xA27E	0x256D	# BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+0xA2A1	0x256E	# BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+0xA2A2	0x2570	# BOX DRAWINGS LIGHT ARC UP AND RIGHT
+0xA2A3	0x256F	# BOX DRAWINGS LIGHT ARC UP AND LEFT
+0xA2A4	0x2550	# BOX DRAWINGS DOUBLE HORIZONTAL
+0xA2A5	0x255E	# BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xA2A6	0x256A	# BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xA2A7	0x2561	# BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xA2A8	0x25E2	# BLACK LOWER RIGHT TRIANGLE
+0xA2A9	0x25E3	# BLACK LOWER LEFT TRIANGLE
+0xA2AA	0x25E5	# BLACK UPPER RIGHT TRIANGLE
+0xA2AB	0x25E4	# BLACK UPPER LEFT TRIANGLE
+0xA2AE	0x2573	# BOX DRAWINGS LIGHT DIAGONAL CROSS
+0xA2AF	0xFF10	# FULLWIDTH DIGIT ZERO
+0xA2B0	0xFF11	# FULLWIDTH DIGIT ONE
+0xA2B1	0xFF12	# FULLWIDTH DIGIT TWO
+0xA2B2	0xFF13	# FULLWIDTH DIGIT THREE
+0xA2B3	0xFF14	# FULLWIDTH DIGIT FOUR
+0xA2B4	0xFF15	# FULLWIDTH DIGIT FIVE
+0xA2B5	0xFF16	# FULLWIDTH DIGIT SIX
+0xA2B6	0xFF17	# FULLWIDTH DIGIT SEVEN
+0xA2B7	0xFF18	# FULLWIDTH DIGIT EIGHT
+0xA2B8	0xFF19	# FULLWIDTH DIGIT NINE
+0xA2B9	0x2160	# ROMAN NUMERAL ONE
+0xA2BA	0x2161	# ROMAN NUMERAL TWO
+0xA2BB	0x2162	# ROMAN NUMERAL THREE
+0xA2BC	0x2163	# ROMAN NUMERAL FOUR
+0xA2BD	0x2164	# ROMAN NUMERAL FIVE
+0xA2BE	0x2165	# ROMAN NUMERAL SIX
+0xA2BF	0x2166	# ROMAN NUMERAL SEVEN
+0xA2C0	0x2167	# ROMAN NUMERAL EIGHT
+0xA2C1	0x2168	# ROMAN NUMERAL NINE
+0xA2C2	0x2169	# ROMAN NUMERAL TEN
+0xA2C3	0x3021	# HANGZHOU NUMERAL ONE
+0xA2C4	0x3022	# HANGZHOU NUMERAL TWO
+0xA2C5	0x3023	# HANGZHOU NUMERAL THREE
+0xA2C6	0x3024	# HANGZHOU NUMERAL FOUR
+0xA2C7	0x3025	# HANGZHOU NUMERAL FIVE
+0xA2C8	0x3026	# HANGZHOU NUMERAL SIX
+0xA2C9	0x3027	# HANGZHOU NUMERAL SEVEN
+0xA2CA	0x3028	# HANGZHOU NUMERAL EIGHT
+0xA2CB	0x3029	# HANGZHOU NUMERAL NINE
+0xA2CD	0x5344	# <CJK>
+0xA2CF	0xFF21	# FULLWIDTH LATIN CAPITAL LETTER A
+0xA2D0	0xFF22	# FULLWIDTH LATIN CAPITAL LETTER B
+0xA2D1	0xFF23	# FULLWIDTH LATIN CAPITAL LETTER C
+0xA2D2	0xFF24	# FULLWIDTH LATIN CAPITAL LETTER D
+0xA2D3	0xFF25	# FULLWIDTH LATIN CAPITAL LETTER E
+0xA2D4	0xFF26	# FULLWIDTH LATIN CAPITAL LETTER F
+0xA2D5	0xFF27	# FULLWIDTH LATIN CAPITAL LETTER G
+0xA2D6	0xFF28	# FULLWIDTH LATIN CAPITAL LETTER H
+0xA2D7	0xFF29	# FULLWIDTH LATIN CAPITAL LETTER I
+0xA2D8	0xFF2A	# FULLWIDTH LATIN CAPITAL LETTER J
+0xA2D9	0xFF2B	# FULLWIDTH LATIN CAPITAL LETTER K
+0xA2DA	0xFF2C	# FULLWIDTH LATIN CAPITAL LETTER L
+0xA2DB	0xFF2D	# FULLWIDTH LATIN CAPITAL LETTER M
+0xA2DC	0xFF2E	# FULLWIDTH LATIN CAPITAL LETTER N
+0xA2DD	0xFF2F	# FULLWIDTH LATIN CAPITAL LETTER O
+0xA2DE	0xFF30	# FULLWIDTH LATIN CAPITAL LETTER P
+0xA2DF	0xFF31	# FULLWIDTH LATIN CAPITAL LETTER Q
+0xA2E0	0xFF32	# FULLWIDTH LATIN CAPITAL LETTER R
+0xA2E1	0xFF33	# FULLWIDTH LATIN CAPITAL LETTER S
+0xA2E2	0xFF34	# FULLWIDTH LATIN CAPITAL LETTER T
+0xA2E3	0xFF35	# FULLWIDTH LATIN CAPITAL LETTER U
+0xA2E4	0xFF36	# FULLWIDTH LATIN CAPITAL LETTER V
+0xA2E5	0xFF37	# FULLWIDTH LATIN CAPITAL LETTER W
+0xA2E6	0xFF38	# FULLWIDTH LATIN CAPITAL LETTER X
+0xA2E7	0xFF39	# FULLWIDTH LATIN CAPITAL LETTER Y
+0xA2E8	0xFF3A	# FULLWIDTH LATIN CAPITAL LETTER Z
+0xA2E9	0xFF41	# FULLWIDTH LATIN SMALL LETTER A
+0xA2EA	0xFF42	# FULLWIDTH LATIN SMALL LETTER B
+0xA2EB	0xFF43	# FULLWIDTH LATIN SMALL LETTER C
+0xA2EC	0xFF44	# FULLWIDTH LATIN SMALL LETTER D
+0xA2ED	0xFF45	# FULLWIDTH LATIN SMALL LETTER E
+0xA2EE	0xFF46	# FULLWIDTH LATIN SMALL LETTER F
+0xA2EF	0xFF47	# FULLWIDTH LATIN SMALL LETTER G
+0xA2F0	0xFF48	# FULLWIDTH LATIN SMALL LETTER H
+0xA2F1	0xFF49	# FULLWIDTH LATIN SMALL LETTER I
+0xA2F2	0xFF4A	# FULLWIDTH LATIN SMALL LETTER J
+0xA2F3	0xFF4B	# FULLWIDTH LATIN SMALL LETTER K
+0xA2F4	0xFF4C	# FULLWIDTH LATIN SMALL LETTER L
+0xA2F5	0xFF4D	# FULLWIDTH LATIN SMALL LETTER M
+0xA2F6	0xFF4E	# FULLWIDTH LATIN SMALL LETTER N
+0xA2F7	0xFF4F	# FULLWIDTH LATIN SMALL LETTER O
+0xA2F8	0xFF50	# FULLWIDTH LATIN SMALL LETTER P
+0xA2F9	0xFF51	# FULLWIDTH LATIN SMALL LETTER Q
+0xA2FA	0xFF52	# FULLWIDTH LATIN SMALL LETTER R
+0xA2FB	0xFF53	# FULLWIDTH LATIN SMALL LETTER S
+0xA2FC	0xFF54	# FULLWIDTH LATIN SMALL LETTER T
+0xA2FD	0xFF55	# FULLWIDTH LATIN SMALL LETTER U
+0xA2FE	0xFF56	# FULLWIDTH LATIN SMALL LETTER V
+0xA340	0xFF57	# FULLWIDTH LATIN SMALL LETTER W
+0xA341	0xFF58	# FULLWIDTH LATIN SMALL LETTER X
+0xA342	0xFF59	# FULLWIDTH LATIN SMALL LETTER Y
+0xA343	0xFF5A	# FULLWIDTH LATIN SMALL LETTER Z
+0xA344	0x0391	# GREEK CAPITAL LETTER ALPHA
+0xA345	0x0392	# GREEK CAPITAL LETTER BETA
+0xA346	0x0393	# GREEK CAPITAL LETTER GAMMA
+0xA347	0x0394	# GREEK CAPITAL LETTER DELTA
+0xA348	0x0395	# GREEK CAPITAL LETTER EPSILON
+0xA349	0x0396	# GREEK CAPITAL LETTER ZETA
+0xA34A	0x0397	# GREEK CAPITAL LETTER ETA
+0xA34B	0x0398	# GREEK CAPITAL LETTER THETA
+0xA34C	0x0399	# GREEK CAPITAL LETTER IOTA
+0xA34D	0x039A	# GREEK CAPITAL LETTER KAPPA
+0xA34E	0x039B	# GREEK CAPITAL LETTER LAMDA
+0xA34F	0x039C	# GREEK CAPITAL LETTER MU
+0xA350	0x039D	# GREEK CAPITAL LETTER NU
+0xA351	0x039E	# GREEK CAPITAL LETTER XI
+0xA352	0x039F	# GREEK CAPITAL LETTER OMICRON
+0xA353	0x03A0	# GREEK CAPITAL LETTER PI
+0xA354	0x03A1	# GREEK CAPITAL LETTER RHO
+0xA355	0x03A3	# GREEK CAPITAL LETTER SIGMA
+0xA356	0x03A4	# GREEK CAPITAL LETTER TAU
+0xA357	0x03A5	# GREEK CAPITAL LETTER UPSILON
+0xA358	0x03A6	# GREEK CAPITAL LETTER PHI
+0xA359	0x03A7	# GREEK CAPITAL LETTER CHI
+0xA35A	0x03A8	# GREEK CAPITAL LETTER PSI
+0xA35B	0x03A9	# GREEK CAPITAL LETTER OMEGA
+0xA35C	0x03B1	# GREEK SMALL LETTER ALPHA
+0xA35D	0x03B2	# GREEK SMALL LETTER BETA
+0xA35E	0x03B3	# GREEK SMALL LETTER GAMMA
+0xA35F	0x03B4	# GREEK SMALL LETTER DELTA
+0xA360	0x03B5	# GREEK SMALL LETTER EPSILON
+0xA361	0x03B6	# GREEK SMALL LETTER ZETA
+0xA362	0x03B7	# GREEK SMALL LETTER ETA
+0xA363	0x03B8	# GREEK SMALL LETTER THETA
+0xA364	0x03B9	# GREEK SMALL LETTER IOTA
+0xA365	0x03BA	# GREEK SMALL LETTER KAPPA
+0xA366	0x03BB	# GREEK SMALL LETTER LAMDA
+0xA367	0x03BC	# GREEK SMALL LETTER MU
+0xA368	0x03BD	# GREEK SMALL LETTER NU
+0xA369	0x03BE	# GREEK SMALL LETTER XI
+0xA36A	0x03BF	# GREEK SMALL LETTER OMICRON
+0xA36B	0x03C0	# GREEK SMALL LETTER PI
+0xA36C	0x03C1	# GREEK SMALL LETTER RHO
+0xA36D	0x03C3	# GREEK SMALL LETTER SIGMA
+0xA36E	0x03C4	# GREEK SMALL LETTER TAU
+0xA36F	0x03C5	# GREEK SMALL LETTER UPSILON
+0xA370	0x03C6	# GREEK SMALL LETTER PHI
+0xA371	0x03C7	# GREEK SMALL LETTER CHI
+0xA372	0x03C8	# GREEK SMALL LETTER PSI
+0xA373	0x03C9	# GREEK SMALL LETTER OMEGA
+0xA374	0x3105	# BOPOMOFO LETTER B
+0xA375	0x3106	# BOPOMOFO LETTER P
+0xA376	0x3107	# BOPOMOFO LETTER M
+0xA377	0x3108	# BOPOMOFO LETTER F
+0xA378	0x3109	# BOPOMOFO LETTER D
+0xA379	0x310A	# BOPOMOFO LETTER T
+0xA37A	0x310B	# BOPOMOFO LETTER N
+0xA37B	0x310C	# BOPOMOFO LETTER L
+0xA37C	0x310D	# BOPOMOFO LETTER G
+0xA37D	0x310E	# BOPOMOFO LETTER K
+0xA37E	0x310F	# BOPOMOFO LETTER H
+0xA3A1	0x3110	# BOPOMOFO LETTER J
+0xA3A2	0x3111	# BOPOMOFO LETTER Q
+0xA3A3	0x3112	# BOPOMOFO LETTER X
+0xA3A4	0x3113	# BOPOMOFO LETTER ZH
+0xA3A5	0x3114	# BOPOMOFO LETTER CH
+0xA3A6	0x3115	# BOPOMOFO LETTER SH
+0xA3A7	0x3116	# BOPOMOFO LETTER R
+0xA3A8	0x3117	# BOPOMOFO LETTER Z
+0xA3A9	0x3118	# BOPOMOFO LETTER C
+0xA3AA	0x3119	# BOPOMOFO LETTER S
+0xA3AB	0x311A	# BOPOMOFO LETTER A
+0xA3AC	0x311B	# BOPOMOFO LETTER O
+0xA3AD	0x311C	# BOPOMOFO LETTER E
+0xA3AE	0x311D	# BOPOMOFO LETTER EH
+0xA3AF	0x311E	# BOPOMOFO LETTER AI
+0xA3B0	0x311F	# BOPOMOFO LETTER EI
+0xA3B1	0x3120	# BOPOMOFO LETTER AU
+0xA3B2	0x3121	# BOPOMOFO LETTER OU
+0xA3B3	0x3122	# BOPOMOFO LETTER AN
+0xA3B4	0x3123	# BOPOMOFO LETTER EN
+0xA3B5	0x3124	# BOPOMOFO LETTER ANG
+0xA3B6	0x3125	# BOPOMOFO LETTER ENG
+0xA3B7	0x3126	# BOPOMOFO LETTER ER
+0xA3B8	0x3127	# BOPOMOFO LETTER I
+0xA3B9	0x3128	# BOPOMOFO LETTER U
+0xA3BA	0x3129	# BOPOMOFO LETTER IU
+0xA3BB	0x02D9	# DOT ABOVE (Mandarin Chinese light tone)
+0xA3BC	0x02C9	# MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+0xA3BD	0x02CA	# MODIFIER LETTER ACUTE ACCENT (Mandarin Chinese second tone)
+0xA3BE	0x02C7	# CARON (Mandarin Chinese third tone)
+0xA3BF	0x02CB	# MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone)
+0xA440	0x4E00	# <CJK>
+0xA441	0x4E59	# <CJK>
+0xA442	0x4E01	# <CJK>
+0xA443	0x4E03	# <CJK>
+0xA444	0x4E43	# <CJK>
+0xA445	0x4E5D	# <CJK>
+0xA446	0x4E86	# <CJK>
+0xA447	0x4E8C	# <CJK>
+0xA448	0x4EBA	# <CJK>
+0xA449	0x513F	# <CJK>
+0xA44A	0x5165	# <CJK>
+0xA44B	0x516B	# <CJK>
+0xA44C	0x51E0	# <CJK>
+0xA44D	0x5200	# <CJK>
+0xA44E	0x5201	# <CJK>
+0xA44F	0x529B	# <CJK>
+0xA450	0x5315	# <CJK>
+0xA452	0x535C	# <CJK>
+0xA453	0x53C8	# <CJK>
+0xA454	0x4E09	# <CJK>
+0xA455	0x4E0B	# <CJK>
+0xA456	0x4E08	# <CJK>
+0xA457	0x4E0A	# <CJK>
+0xA458	0x4E2B	# <CJK>
+0xA459	0x4E38	# <CJK>
+0xA45A	0x51E1	# <CJK>
+0xA45B	0x4E45	# <CJK>
+0xA45C	0x4E48	# <CJK>
+0xA45D	0x4E5F	# <CJK>
+0xA45E	0x4E5E	# <CJK>
+0xA45F	0x4E8E	# <CJK>
+0xA460	0x4EA1	# <CJK>
+0xA461	0x5140	# <CJK>
+0xA462	0x5203	# <CJK>
+0xA463	0x52FA	# <CJK>
+0xA464	0x5343	# <CJK>
+0xA465	0x53C9	# <CJK>
+0xA466	0x53E3	# <CJK>
+0xA467	0x571F	# <CJK>
+0xA468	0x58EB	# <CJK>
+0xA469	0x5915	# <CJK>
+0xA46A	0x5927	# <CJK>
+0xA46B	0x5973	# <CJK>
+0xA46C	0x5B50	# <CJK>
+0xA46D	0x5B51	# <CJK>
+0xA46E	0x5B53	# <CJK>
+0xA46F	0x5BF8	# <CJK>
+0xA470	0x5C0F	# <CJK>
+0xA471	0x5C22	# <CJK>
+0xA472	0x5C38	# <CJK>
+0xA473	0x5C71	# <CJK>
+0xA474	0x5DDD	# <CJK>
+0xA475	0x5DE5	# <CJK>
+0xA476	0x5DF1	# <CJK>
+0xA477	0x5DF2	# <CJK>
+0xA478	0x5DF3	# <CJK>
+0xA479	0x5DFE	# <CJK>
+0xA47A	0x5E72	# <CJK>
+0xA47B	0x5EFE	# <CJK>
+0xA47C	0x5F0B	# <CJK>
+0xA47D	0x5F13	# <CJK>
+0xA47E	0x624D	# <CJK>
+0xA4A1	0x4E11	# <CJK>
+0xA4A2	0x4E10	# <CJK>
+0xA4A3	0x4E0D	# <CJK>
+0xA4A4	0x4E2D	# <CJK>
+0xA4A5	0x4E30	# <CJK>
+0xA4A6	0x4E39	# <CJK>
+0xA4A7	0x4E4B	# <CJK>
+0xA4A8	0x5C39	# <CJK>
+0xA4A9	0x4E88	# <CJK>
+0xA4AA	0x4E91	# <CJK>
+0xA4AB	0x4E95	# <CJK>
+0xA4AC	0x4E92	# <CJK>
+0xA4AD	0x4E94	# <CJK>
+0xA4AE	0x4EA2	# <CJK>
+0xA4AF	0x4EC1	# <CJK>
+0xA4B0	0x4EC0	# <CJK>
+0xA4B1	0x4EC3	# <CJK>
+0xA4B2	0x4EC6	# <CJK>
+0xA4B3	0x4EC7	# <CJK>
+0xA4B4	0x4ECD	# <CJK>
+0xA4B5	0x4ECA	# <CJK>
+0xA4B6	0x4ECB	# <CJK>
+0xA4B7	0x4EC4	# <CJK>
+0xA4B8	0x5143	# <CJK>
+0xA4B9	0x5141	# <CJK>
+0xA4BA	0x5167	# <CJK>
+0xA4BB	0x516D	# <CJK>
+0xA4BC	0x516E	# <CJK>
+0xA4BD	0x516C	# <CJK>
+0xA4BE	0x5197	# <CJK>
+0xA4BF	0x51F6	# <CJK>
+0xA4C0	0x5206	# <CJK>
+0xA4C1	0x5207	# <CJK>
+0xA4C2	0x5208	# <CJK>
+0xA4C3	0x52FB	# <CJK>
+0xA4C4	0x52FE	# <CJK>
+0xA4C5	0x52FF	# <CJK>
+0xA4C6	0x5316	# <CJK>
+0xA4C7	0x5339	# <CJK>
+0xA4C8	0x5348	# <CJK>
+0xA4C9	0x5347	# <CJK>
+0xA4CB	0x535E	# <CJK>
+0xA4CC	0x5384	# <CJK>
+0xA4CD	0x53CB	# <CJK>
+0xA4CE	0x53CA	# <CJK>
+0xA4CF	0x53CD	# <CJK>
+0xA4D0	0x58EC	# <CJK>
+0xA4D1	0x5929	# <CJK>
+0xA4D2	0x592B	# <CJK>
+0xA4D3	0x592A	# <CJK>
+0xA4D4	0x592D	# <CJK>
+0xA4D5	0x5B54	# <CJK>
+0xA4D6	0x5C11	# <CJK>
+0xA4D7	0x5C24	# <CJK>
+0xA4D8	0x5C3A	# <CJK>
+0xA4D9	0x5C6F	# <CJK>
+0xA4DA	0x5DF4	# <CJK>
+0xA4DB	0x5E7B	# <CJK>
+0xA4DC	0x5EFF	# <CJK>
+0xA4DD	0x5F14	# <CJK>
+0xA4DE	0x5F15	# <CJK>
+0xA4DF	0x5FC3	# <CJK>
+0xA4E0	0x6208	# <CJK>
+0xA4E1	0x6236	# <CJK>
+0xA4E2	0x624B	# <CJK>
+0xA4E3	0x624E	# <CJK>
+0xA4E4	0x652F	# <CJK>
+0xA4E5	0x6587	# <CJK>
+0xA4E6	0x6597	# <CJK>
+0xA4E7	0x65A4	# <CJK>
+0xA4E8	0x65B9	# <CJK>
+0xA4E9	0x65E5	# <CJK>
+0xA4EA	0x66F0	# <CJK>
+0xA4EB	0x6708	# <CJK>
+0xA4EC	0x6728	# <CJK>
+0xA4ED	0x6B20	# <CJK>
+0xA4EE	0x6B62	# <CJK>
+0xA4EF	0x6B79	# <CJK>
+0xA4F0	0x6BCB	# <CJK>
+0xA4F1	0x6BD4	# <CJK>
+0xA4F2	0x6BDB	# <CJK>
+0xA4F3	0x6C0F	# <CJK>
+0xA4F4	0x6C34	# <CJK>
+0xA4F5	0x706B	# <CJK>
+0xA4F6	0x722A	# <CJK>
+0xA4F7	0x7236	# <CJK>
+0xA4F8	0x723B	# <CJK>
+0xA4F9	0x7247	# <CJK>
+0xA4FA	0x7259	# <CJK>
+0xA4FB	0x725B	# <CJK>
+0xA4FC	0x72AC	# <CJK>
+0xA4FD	0x738B	# <CJK>
+0xA4FE	0x4E19	# <CJK>
+0xA540	0x4E16	# <CJK>
+0xA541	0x4E15	# <CJK>
+0xA542	0x4E14	# <CJK>
+0xA543	0x4E18	# <CJK>
+0xA544	0x4E3B	# <CJK>
+0xA545	0x4E4D	# <CJK>
+0xA546	0x4E4F	# <CJK>
+0xA547	0x4E4E	# <CJK>
+0xA548	0x4EE5	# <CJK>
+0xA549	0x4ED8	# <CJK>
+0xA54A	0x4ED4	# <CJK>
+0xA54B	0x4ED5	# <CJK>
+0xA54C	0x4ED6	# <CJK>
+0xA54D	0x4ED7	# <CJK>
+0xA54E	0x4EE3	# <CJK>
+0xA54F	0x4EE4	# <CJK>
+0xA550	0x4ED9	# <CJK>
+0xA551	0x4EDE	# <CJK>
+0xA552	0x5145	# <CJK>
+0xA553	0x5144	# <CJK>
+0xA554	0x5189	# <CJK>
+0xA555	0x518A	# <CJK>
+0xA556	0x51AC	# <CJK>
+0xA557	0x51F9	# <CJK>
+0xA558	0x51FA	# <CJK>
+0xA559	0x51F8	# <CJK>
+0xA55A	0x520A	# <CJK>
+0xA55B	0x52A0	# <CJK>
+0xA55C	0x529F	# <CJK>
+0xA55D	0x5305	# <CJK>
+0xA55E	0x5306	# <CJK>
+0xA55F	0x5317	# <CJK>
+0xA560	0x531D	# <CJK>
+0xA561	0x4EDF	# <CJK>
+0xA562	0x534A	# <CJK>
+0xA563	0x5349	# <CJK>
+0xA564	0x5361	# <CJK>
+0xA565	0x5360	# <CJK>
+0xA566	0x536F	# <CJK>
+0xA567	0x536E	# <CJK>
+0xA568	0x53BB	# <CJK>
+0xA569	0x53EF	# <CJK>
+0xA56A	0x53E4	# <CJK>
+0xA56B	0x53F3	# <CJK>
+0xA56C	0x53EC	# <CJK>
+0xA56D	0x53EE	# <CJK>
+0xA56E	0x53E9	# <CJK>
+0xA56F	0x53E8	# <CJK>
+0xA570	0x53FC	# <CJK>
+0xA571	0x53F8	# <CJK>
+0xA572	0x53F5	# <CJK>
+0xA573	0x53EB	# <CJK>
+0xA574	0x53E6	# <CJK>
+0xA575	0x53EA	# <CJK>
+0xA576	0x53F2	# <CJK>
+0xA577	0x53F1	# <CJK>
+0xA578	0x53F0	# <CJK>
+0xA579	0x53E5	# <CJK>
+0xA57A	0x53ED	# <CJK>
+0xA57B	0x53FB	# <CJK>
+0xA57C	0x56DB	# <CJK>
+0xA57D	0x56DA	# <CJK>
+0xA57E	0x5916	# <CJK>
+0xA5A1	0x592E	# <CJK>
+0xA5A2	0x5931	# <CJK>
+0xA5A3	0x5974	# <CJK>
+0xA5A4	0x5976	# <CJK>
+0xA5A5	0x5B55	# <CJK>
+0xA5A6	0x5B83	# <CJK>
+0xA5A7	0x5C3C	# <CJK>
+0xA5A8	0x5DE8	# <CJK>
+0xA5A9	0x5DE7	# <CJK>
+0xA5AA	0x5DE6	# <CJK>
+0xA5AB	0x5E02	# <CJK>
+0xA5AC	0x5E03	# <CJK>
+0xA5AD	0x5E73	# <CJK>
+0xA5AE	0x5E7C	# <CJK>
+0xA5AF	0x5F01	# <CJK>
+0xA5B0	0x5F18	# <CJK>
+0xA5B1	0x5F17	# <CJK>
+0xA5B2	0x5FC5	# <CJK>
+0xA5B3	0x620A	# <CJK>
+0xA5B4	0x6253	# <CJK>
+0xA5B5	0x6254	# <CJK>
+0xA5B6	0x6252	# <CJK>
+0xA5B7	0x6251	# <CJK>
+0xA5B8	0x65A5	# <CJK>
+0xA5B9	0x65E6	# <CJK>
+0xA5BA	0x672E	# <CJK>
+0xA5BB	0x672C	# <CJK>
+0xA5BC	0x672A	# <CJK>
+0xA5BD	0x672B	# <CJK>
+0xA5BE	0x672D	# <CJK>
+0xA5BF	0x6B63	# <CJK>
+0xA5C0	0x6BCD	# <CJK>
+0xA5C1	0x6C11	# <CJK>
+0xA5C2	0x6C10	# <CJK>
+0xA5C3	0x6C38	# <CJK>
+0xA5C4	0x6C41	# <CJK>
+0xA5C5	0x6C40	# <CJK>
+0xA5C6	0x6C3E	# <CJK>
+0xA5C7	0x72AF	# <CJK>
+0xA5C8	0x7384	# <CJK>
+0xA5C9	0x7389	# <CJK>
+0xA5CA	0x74DC	# <CJK>
+0xA5CB	0x74E6	# <CJK>
+0xA5CC	0x7518	# <CJK>
+0xA5CD	0x751F	# <CJK>
+0xA5CE	0x7528	# <CJK>
+0xA5CF	0x7529	# <CJK>
+0xA5D0	0x7530	# <CJK>
+0xA5D1	0x7531	# <CJK>
+0xA5D2	0x7532	# <CJK>
+0xA5D3	0x7533	# <CJK>
+0xA5D4	0x758B	# <CJK>
+0xA5D5	0x767D	# <CJK>
+0xA5D6	0x76AE	# <CJK>
+0xA5D7	0x76BF	# <CJK>
+0xA5D8	0x76EE	# <CJK>
+0xA5D9	0x77DB	# <CJK>
+0xA5DA	0x77E2	# <CJK>
+0xA5DB	0x77F3	# <CJK>
+0xA5DC	0x793A	# <CJK>
+0xA5DD	0x79BE	# <CJK>
+0xA5DE	0x7A74	# <CJK>
+0xA5DF	0x7ACB	# <CJK>
+0xA5E0	0x4E1E	# <CJK>
+0xA5E1	0x4E1F	# <CJK>
+0xA5E2	0x4E52	# <CJK>
+0xA5E3	0x4E53	# <CJK>
+0xA5E4	0x4E69	# <CJK>
+0xA5E5	0x4E99	# <CJK>
+0xA5E6	0x4EA4	# <CJK>
+0xA5E7	0x4EA6	# <CJK>
+0xA5E8	0x4EA5	# <CJK>
+0xA5E9	0x4EFF	# <CJK>
+0xA5EA	0x4F09	# <CJK>
+0xA5EB	0x4F19	# <CJK>
+0xA5EC	0x4F0A	# <CJK>
+0xA5ED	0x4F15	# <CJK>
+0xA5EE	0x4F0D	# <CJK>
+0xA5EF	0x4F10	# <CJK>
+0xA5F0	0x4F11	# <CJK>
+0xA5F1	0x4F0F	# <CJK>
+0xA5F2	0x4EF2	# <CJK>
+0xA5F3	0x4EF6	# <CJK>
+0xA5F4	0x4EFB	# <CJK>
+0xA5F5	0x4EF0	# <CJK>
+0xA5F6	0x4EF3	# <CJK>
+0xA5F7	0x4EFD	# <CJK>
+0xA5F8	0x4F01	# <CJK>
+0xA5F9	0x4F0B	# <CJK>
+0xA5FA	0x5149	# <CJK>
+0xA5FB	0x5147	# <CJK>
+0xA5FC	0x5146	# <CJK>
+0xA5FD	0x5148	# <CJK>
+0xA5FE	0x5168	# <CJK>
+0xA640	0x5171	# <CJK>
+0xA641	0x518D	# <CJK>
+0xA642	0x51B0	# <CJK>
+0xA643	0x5217	# <CJK>
+0xA644	0x5211	# <CJK>
+0xA645	0x5212	# <CJK>
+0xA646	0x520E	# <CJK>
+0xA647	0x5216	# <CJK>
+0xA648	0x52A3	# <CJK>
+0xA649	0x5308	# <CJK>
+0xA64A	0x5321	# <CJK>
+0xA64B	0x5320	# <CJK>
+0xA64C	0x5370	# <CJK>
+0xA64D	0x5371	# <CJK>
+0xA64E	0x5409	# <CJK>
+0xA64F	0x540F	# <CJK>
+0xA650	0x540C	# <CJK>
+0xA651	0x540A	# <CJK>
+0xA652	0x5410	# <CJK>
+0xA653	0x5401	# <CJK>
+0xA654	0x540B	# <CJK>
+0xA655	0x5404	# <CJK>
+0xA656	0x5411	# <CJK>
+0xA657	0x540D	# <CJK>
+0xA658	0x5408	# <CJK>
+0xA659	0x5403	# <CJK>
+0xA65A	0x540E	# <CJK>
+0xA65B	0x5406	# <CJK>
+0xA65C	0x5412	# <CJK>
+0xA65D	0x56E0	# <CJK>
+0xA65E	0x56DE	# <CJK>
+0xA65F	0x56DD	# <CJK>
+0xA660	0x5733	# <CJK>
+0xA661	0x5730	# <CJK>
+0xA662	0x5728	# <CJK>
+0xA663	0x572D	# <CJK>
+0xA664	0x572C	# <CJK>
+0xA665	0x572F	# <CJK>
+0xA666	0x5729	# <CJK>
+0xA667	0x5919	# <CJK>
+0xA668	0x591A	# <CJK>
+0xA669	0x5937	# <CJK>
+0xA66A	0x5938	# <CJK>
+0xA66B	0x5984	# <CJK>
+0xA66C	0x5978	# <CJK>
+0xA66D	0x5983	# <CJK>
+0xA66E	0x597D	# <CJK>
+0xA66F	0x5979	# <CJK>
+0xA670	0x5982	# <CJK>
+0xA671	0x5981	# <CJK>
+0xA672	0x5B57	# <CJK>
+0xA673	0x5B58	# <CJK>
+0xA674	0x5B87	# <CJK>
+0xA675	0x5B88	# <CJK>
+0xA676	0x5B85	# <CJK>
+0xA677	0x5B89	# <CJK>
+0xA678	0x5BFA	# <CJK>
+0xA679	0x5C16	# <CJK>
+0xA67A	0x5C79	# <CJK>
+0xA67B	0x5DDE	# <CJK>
+0xA67C	0x5E06	# <CJK>
+0xA67D	0x5E76	# <CJK>
+0xA67E	0x5E74	# <CJK>
+0xA6A1	0x5F0F	# <CJK>
+0xA6A2	0x5F1B	# <CJK>
+0xA6A3	0x5FD9	# <CJK>
+0xA6A4	0x5FD6	# <CJK>
+0xA6A5	0x620E	# <CJK>
+0xA6A6	0x620C	# <CJK>
+0xA6A7	0x620D	# <CJK>
+0xA6A8	0x6210	# <CJK>
+0xA6A9	0x6263	# <CJK>
+0xA6AA	0x625B	# <CJK>
+0xA6AB	0x6258	# <CJK>
+0xA6AC	0x6536	# <CJK>
+0xA6AD	0x65E9	# <CJK>
+0xA6AE	0x65E8	# <CJK>
+0xA6AF	0x65EC	# <CJK>
+0xA6B0	0x65ED	# <CJK>
+0xA6B1	0x66F2	# <CJK>
+0xA6B2	0x66F3	# <CJK>
+0xA6B3	0x6709	# <CJK>
+0xA6B4	0x673D	# <CJK>
+0xA6B5	0x6734	# <CJK>
+0xA6B6	0x6731	# <CJK>
+0xA6B7	0x6735	# <CJK>
+0xA6B8	0x6B21	# <CJK>
+0xA6B9	0x6B64	# <CJK>
+0xA6BA	0x6B7B	# <CJK>
+0xA6BB	0x6C16	# <CJK>
+0xA6BC	0x6C5D	# <CJK>
+0xA6BD	0x6C57	# <CJK>
+0xA6BE	0x6C59	# <CJK>
+0xA6BF	0x6C5F	# <CJK>
+0xA6C0	0x6C60	# <CJK>
+0xA6C1	0x6C50	# <CJK>
+0xA6C2	0x6C55	# <CJK>
+0xA6C3	0x6C61	# <CJK>
+0xA6C4	0x6C5B	# <CJK>
+0xA6C5	0x6C4D	# <CJK>
+0xA6C6	0x6C4E	# <CJK>
+0xA6C7	0x7070	# <CJK>
+0xA6C8	0x725F	# <CJK>
+0xA6C9	0x725D	# <CJK>
+0xA6CA	0x767E	# <CJK>
+0xA6CB	0x7AF9	# <CJK>
+0xA6CC	0x7C73	# <CJK>
+0xA6CD	0x7CF8	# <CJK>
+0xA6CE	0x7F36	# <CJK>
+0xA6CF	0x7F8A	# <CJK>
+0xA6D0	0x7FBD	# <CJK>
+0xA6D1	0x8001	# <CJK>
+0xA6D2	0x8003	# <CJK>
+0xA6D3	0x800C	# <CJK>
+0xA6D4	0x8012	# <CJK>
+0xA6D5	0x8033	# <CJK>
+0xA6D6	0x807F	# <CJK>
+0xA6D7	0x8089	# <CJK>
+0xA6D8	0x808B	# <CJK>
+0xA6D9	0x808C	# <CJK>
+0xA6DA	0x81E3	# <CJK>
+0xA6DB	0x81EA	# <CJK>
+0xA6DC	0x81F3	# <CJK>
+0xA6DD	0x81FC	# <CJK>
+0xA6DE	0x820C	# <CJK>
+0xA6DF	0x821B	# <CJK>
+0xA6E0	0x821F	# <CJK>
+0xA6E1	0x826E	# <CJK>
+0xA6E2	0x8272	# <CJK>
+0xA6E3	0x827E	# <CJK>
+0xA6E4	0x866B	# <CJK>
+0xA6E5	0x8840	# <CJK>
+0xA6E6	0x884C	# <CJK>
+0xA6E7	0x8863	# <CJK>
+0xA6E8	0x897F	# <CJK>
+0xA6E9	0x9621	# <CJK>
+0xA6EA	0x4E32	# <CJK>
+0xA6EB	0x4EA8	# <CJK>
+0xA6EC	0x4F4D	# <CJK>
+0xA6ED	0x4F4F	# <CJK>
+0xA6EE	0x4F47	# <CJK>
+0xA6EF	0x4F57	# <CJK>
+0xA6F0	0x4F5E	# <CJK>
+0xA6F1	0x4F34	# <CJK>
+0xA6F2	0x4F5B	# <CJK>
+0xA6F3	0x4F55	# <CJK>
+0xA6F4	0x4F30	# <CJK>
+0xA6F5	0x4F50	# <CJK>
+0xA6F6	0x4F51	# <CJK>
+0xA6F7	0x4F3D	# <CJK>
+0xA6F8	0x4F3A	# <CJK>
+0xA6F9	0x4F38	# <CJK>
+0xA6FA	0x4F43	# <CJK>
+0xA6FB	0x4F54	# <CJK>
+0xA6FC	0x4F3C	# <CJK>
+0xA6FD	0x4F46	# <CJK>
+0xA6FE	0x4F63	# <CJK>
+0xA740	0x4F5C	# <CJK>
+0xA741	0x4F60	# <CJK>
+0xA742	0x4F2F	# <CJK>
+0xA743	0x4F4E	# <CJK>
+0xA744	0x4F36	# <CJK>
+0xA745	0x4F59	# <CJK>
+0xA746	0x4F5D	# <CJK>
+0xA747	0x4F48	# <CJK>
+0xA748	0x4F5A	# <CJK>
+0xA749	0x514C	# <CJK>
+0xA74A	0x514B	# <CJK>
+0xA74B	0x514D	# <CJK>
+0xA74C	0x5175	# <CJK>
+0xA74D	0x51B6	# <CJK>
+0xA74E	0x51B7	# <CJK>
+0xA74F	0x5225	# <CJK>
+0xA750	0x5224	# <CJK>
+0xA751	0x5229	# <CJK>
+0xA752	0x522A	# <CJK>
+0xA753	0x5228	# <CJK>
+0xA754	0x52AB	# <CJK>
+0xA755	0x52A9	# <CJK>
+0xA756	0x52AA	# <CJK>
+0xA757	0x52AC	# <CJK>
+0xA758	0x5323	# <CJK>
+0xA759	0x5373	# <CJK>
+0xA75A	0x5375	# <CJK>
+0xA75B	0x541D	# <CJK>
+0xA75C	0x542D	# <CJK>
+0xA75D	0x541E	# <CJK>
+0xA75E	0x543E	# <CJK>
+0xA75F	0x5426	# <CJK>
+0xA760	0x544E	# <CJK>
+0xA761	0x5427	# <CJK>
+0xA762	0x5446	# <CJK>
+0xA763	0x5443	# <CJK>
+0xA764	0x5433	# <CJK>
+0xA765	0x5448	# <CJK>
+0xA766	0x5442	# <CJK>
+0xA767	0x541B	# <CJK>
+0xA768	0x5429	# <CJK>
+0xA769	0x544A	# <CJK>
+0xA76A	0x5439	# <CJK>
+0xA76B	0x543B	# <CJK>
+0xA76C	0x5438	# <CJK>
+0xA76D	0x542E	# <CJK>
+0xA76E	0x5435	# <CJK>
+0xA76F	0x5436	# <CJK>
+0xA770	0x5420	# <CJK>
+0xA771	0x543C	# <CJK>
+0xA772	0x5440	# <CJK>
+0xA773	0x5431	# <CJK>
+0xA774	0x542B	# <CJK>
+0xA775	0x541F	# <CJK>
+0xA776	0x542C	# <CJK>
+0xA777	0x56EA	# <CJK>
+0xA778	0x56F0	# <CJK>
+0xA779	0x56E4	# <CJK>
+0xA77A	0x56EB	# <CJK>
+0xA77B	0x574A	# <CJK>
+0xA77C	0x5751	# <CJK>
+0xA77D	0x5740	# <CJK>
+0xA77E	0x574D	# <CJK>
+0xA7A1	0x5747	# <CJK>
+0xA7A2	0x574E	# <CJK>
+0xA7A3	0x573E	# <CJK>
+0xA7A4	0x5750	# <CJK>
+0xA7A5	0x574F	# <CJK>
+0xA7A6	0x573B	# <CJK>
+0xA7A7	0x58EF	# <CJK>
+0xA7A8	0x593E	# <CJK>
+0xA7A9	0x599D	# <CJK>
+0xA7AA	0x5992	# <CJK>
+0xA7AB	0x59A8	# <CJK>
+0xA7AC	0x599E	# <CJK>
+0xA7AD	0x59A3	# <CJK>
+0xA7AE	0x5999	# <CJK>
+0xA7AF	0x5996	# <CJK>
+0xA7B0	0x598D	# <CJK>
+0xA7B1	0x59A4	# <CJK>
+0xA7B2	0x5993	# <CJK>
+0xA7B3	0x598A	# <CJK>
+0xA7B4	0x59A5	# <CJK>
+0xA7B5	0x5B5D	# <CJK>
+0xA7B6	0x5B5C	# <CJK>
+0xA7B7	0x5B5A	# <CJK>
+0xA7B8	0x5B5B	# <CJK>
+0xA7B9	0x5B8C	# <CJK>
+0xA7BA	0x5B8B	# <CJK>
+0xA7BB	0x5B8F	# <CJK>
+0xA7BC	0x5C2C	# <CJK>
+0xA7BD	0x5C40	# <CJK>
+0xA7BE	0x5C41	# <CJK>
+0xA7BF	0x5C3F	# <CJK>
+0xA7C0	0x5C3E	# <CJK>
+0xA7C1	0x5C90	# <CJK>
+0xA7C2	0x5C91	# <CJK>
+0xA7C3	0x5C94	# <CJK>
+0xA7C4	0x5C8C	# <CJK>
+0xA7C5	0x5DEB	# <CJK>
+0xA7C6	0x5E0C	# <CJK>
+0xA7C7	0x5E8F	# <CJK>
+0xA7C8	0x5E87	# <CJK>
+0xA7C9	0x5E8A	# <CJK>
+0xA7CA	0x5EF7	# <CJK>
+0xA7CB	0x5F04	# <CJK>
+0xA7CC	0x5F1F	# <CJK>
+0xA7CD	0x5F64	# <CJK>
+0xA7CE	0x5F62	# <CJK>
+0xA7CF	0x5F77	# <CJK>
+0xA7D0	0x5F79	# <CJK>
+0xA7D1	0x5FD8	# <CJK>
+0xA7D2	0x5FCC	# <CJK>
+0xA7D3	0x5FD7	# <CJK>
+0xA7D4	0x5FCD	# <CJK>
+0xA7D5	0x5FF1	# <CJK>
+0xA7D6	0x5FEB	# <CJK>
+0xA7D7	0x5FF8	# <CJK>
+0xA7D8	0x5FEA	# <CJK>
+0xA7D9	0x6212	# <CJK>
+0xA7DA	0x6211	# <CJK>
+0xA7DB	0x6284	# <CJK>
+0xA7DC	0x6297	# <CJK>
+0xA7DD	0x6296	# <CJK>
+0xA7DE	0x6280	# <CJK>
+0xA7DF	0x6276	# <CJK>
+0xA7E0	0x6289	# <CJK>
+0xA7E1	0x626D	# <CJK>
+0xA7E2	0x628A	# <CJK>
+0xA7E3	0x627C	# <CJK>
+0xA7E4	0x627E	# <CJK>
+0xA7E5	0x6279	# <CJK>
+0xA7E6	0x6273	# <CJK>
+0xA7E7	0x6292	# <CJK>
+0xA7E8	0x626F	# <CJK>
+0xA7E9	0x6298	# <CJK>
+0xA7EA	0x626E	# <CJK>
+0xA7EB	0x6295	# <CJK>
+0xA7EC	0x6293	# <CJK>
+0xA7ED	0x6291	# <CJK>
+0xA7EE	0x6286	# <CJK>
+0xA7EF	0x6539	# <CJK>
+0xA7F0	0x653B	# <CJK>
+0xA7F1	0x6538	# <CJK>
+0xA7F2	0x65F1	# <CJK>
+0xA7F3	0x66F4	# <CJK>
+0xA7F4	0x675F	# <CJK>
+0xA7F5	0x674E	# <CJK>
+0xA7F6	0x674F	# <CJK>
+0xA7F7	0x6750	# <CJK>
+0xA7F8	0x6751	# <CJK>
+0xA7F9	0x675C	# <CJK>
+0xA7FA	0x6756	# <CJK>
+0xA7FB	0x675E	# <CJK>
+0xA7FC	0x6749	# <CJK>
+0xA7FD	0x6746	# <CJK>
+0xA7FE	0x6760	# <CJK>
+0xA840	0x6753	# <CJK>
+0xA841	0x6757	# <CJK>
+0xA842	0x6B65	# <CJK>
+0xA843	0x6BCF	# <CJK>
+0xA844	0x6C42	# <CJK>
+0xA845	0x6C5E	# <CJK>
+0xA846	0x6C99	# <CJK>
+0xA847	0x6C81	# <CJK>
+0xA848	0x6C88	# <CJK>
+0xA849	0x6C89	# <CJK>
+0xA84A	0x6C85	# <CJK>
+0xA84B	0x6C9B	# <CJK>
+0xA84C	0x6C6A	# <CJK>
+0xA84D	0x6C7A	# <CJK>
+0xA84E	0x6C90	# <CJK>
+0xA84F	0x6C70	# <CJK>
+0xA850	0x6C8C	# <CJK>
+0xA851	0x6C68	# <CJK>
+0xA852	0x6C96	# <CJK>
+0xA853	0x6C92	# <CJK>
+0xA854	0x6C7D	# <CJK>
+0xA855	0x6C83	# <CJK>
+0xA856	0x6C72	# <CJK>
+0xA857	0x6C7E	# <CJK>
+0xA858	0x6C74	# <CJK>
+0xA859	0x6C86	# <CJK>
+0xA85A	0x6C76	# <CJK>
+0xA85B	0x6C8D	# <CJK>
+0xA85C	0x6C94	# <CJK>
+0xA85D	0x6C98	# <CJK>
+0xA85E	0x6C82	# <CJK>
+0xA85F	0x7076	# <CJK>
+0xA860	0x707C	# <CJK>
+0xA861	0x707D	# <CJK>
+0xA862	0x7078	# <CJK>
+0xA863	0x7262	# <CJK>
+0xA864	0x7261	# <CJK>
+0xA865	0x7260	# <CJK>
+0xA866	0x72C4	# <CJK>
+0xA867	0x72C2	# <CJK>
+0xA868	0x7396	# <CJK>
+0xA869	0x752C	# <CJK>
+0xA86A	0x752B	# <CJK>
+0xA86B	0x7537	# <CJK>
+0xA86C	0x7538	# <CJK>
+0xA86D	0x7682	# <CJK>
+0xA86E	0x76EF	# <CJK>
+0xA86F	0x77E3	# <CJK>
+0xA870	0x79C1	# <CJK>
+0xA871	0x79C0	# <CJK>
+0xA872	0x79BF	# <CJK>
+0xA873	0x7A76	# <CJK>
+0xA874	0x7CFB	# <CJK>
+0xA875	0x7F55	# <CJK>
+0xA876	0x8096	# <CJK>
+0xA877	0x8093	# <CJK>
+0xA878	0x809D	# <CJK>
+0xA879	0x8098	# <CJK>
+0xA87A	0x809B	# <CJK>
+0xA87B	0x809A	# <CJK>
+0xA87C	0x80B2	# <CJK>
+0xA87D	0x826F	# <CJK>
+0xA87E	0x8292	# <CJK>
+0xA8A1	0x828B	# <CJK>
+0xA8A2	0x828D	# <CJK>
+0xA8A3	0x898B	# <CJK>
+0xA8A4	0x89D2	# <CJK>
+0xA8A5	0x8A00	# <CJK>
+0xA8A6	0x8C37	# <CJK>
+0xA8A7	0x8C46	# <CJK>
+0xA8A8	0x8C55	# <CJK>
+0xA8A9	0x8C9D	# <CJK>
+0xA8AA	0x8D64	# <CJK>
+0xA8AB	0x8D70	# <CJK>
+0xA8AC	0x8DB3	# <CJK>
+0xA8AD	0x8EAB	# <CJK>
+0xA8AE	0x8ECA	# <CJK>
+0xA8AF	0x8F9B	# <CJK>
+0xA8B0	0x8FB0	# <CJK>
+0xA8B1	0x8FC2	# <CJK>
+0xA8B2	0x8FC6	# <CJK>
+0xA8B3	0x8FC5	# <CJK>
+0xA8B4	0x8FC4	# <CJK>
+0xA8B5	0x5DE1	# <CJK>
+0xA8B6	0x9091	# <CJK>
+0xA8B7	0x90A2	# <CJK>
+0xA8B8	0x90AA	# <CJK>
+0xA8B9	0x90A6	# <CJK>
+0xA8BA	0x90A3	# <CJK>
+0xA8BB	0x9149	# <CJK>
+0xA8BC	0x91C6	# <CJK>
+0xA8BD	0x91CC	# <CJK>
+0xA8BE	0x9632	# <CJK>
+0xA8BF	0x962E	# <CJK>
+0xA8C0	0x9631	# <CJK>
+0xA8C1	0x962A	# <CJK>
+0xA8C2	0x962C	# <CJK>
+0xA8C3	0x4E26	# <CJK>
+0xA8C4	0x4E56	# <CJK>
+0xA8C5	0x4E73	# <CJK>
+0xA8C6	0x4E8B	# <CJK>
+0xA8C7	0x4E9B	# <CJK>
+0xA8C8	0x4E9E	# <CJK>
+0xA8C9	0x4EAB	# <CJK>
+0xA8CA	0x4EAC	# <CJK>
+0xA8CB	0x4F6F	# <CJK>
+0xA8CC	0x4F9D	# <CJK>
+0xA8CD	0x4F8D	# <CJK>
+0xA8CE	0x4F73	# <CJK>
+0xA8CF	0x4F7F	# <CJK>
+0xA8D0	0x4F6C	# <CJK>
+0xA8D1	0x4F9B	# <CJK>
+0xA8D2	0x4F8B	# <CJK>
+0xA8D3	0x4F86	# <CJK>
+0xA8D4	0x4F83	# <CJK>
+0xA8D5	0x4F70	# <CJK>
+0xA8D6	0x4F75	# <CJK>
+0xA8D7	0x4F88	# <CJK>
+0xA8D8	0x4F69	# <CJK>
+0xA8D9	0x4F7B	# <CJK>
+0xA8DA	0x4F96	# <CJK>
+0xA8DB	0x4F7E	# <CJK>
+0xA8DC	0x4F8F	# <CJK>
+0xA8DD	0x4F91	# <CJK>
+0xA8DE	0x4F7A	# <CJK>
+0xA8DF	0x5154	# <CJK>
+0xA8E0	0x5152	# <CJK>
+0xA8E1	0x5155	# <CJK>
+0xA8E2	0x5169	# <CJK>
+0xA8E3	0x5177	# <CJK>
+0xA8E4	0x5176	# <CJK>
+0xA8E5	0x5178	# <CJK>
+0xA8E6	0x51BD	# <CJK>
+0xA8E7	0x51FD	# <CJK>
+0xA8E8	0x523B	# <CJK>
+0xA8E9	0x5238	# <CJK>
+0xA8EA	0x5237	# <CJK>
+0xA8EB	0x523A	# <CJK>
+0xA8EC	0x5230	# <CJK>
+0xA8ED	0x522E	# <CJK>
+0xA8EE	0x5236	# <CJK>
+0xA8EF	0x5241	# <CJK>
+0xA8F0	0x52BE	# <CJK>
+0xA8F1	0x52BB	# <CJK>
+0xA8F2	0x5352	# <CJK>
+0xA8F3	0x5354	# <CJK>
+0xA8F4	0x5353	# <CJK>
+0xA8F5	0x5351	# <CJK>
+0xA8F6	0x5366	# <CJK>
+0xA8F7	0x5377	# <CJK>
+0xA8F8	0x5378	# <CJK>
+0xA8F9	0x5379	# <CJK>
+0xA8FA	0x53D6	# <CJK>
+0xA8FB	0x53D4	# <CJK>
+0xA8FC	0x53D7	# <CJK>
+0xA8FD	0x5473	# <CJK>
+0xA8FE	0x5475	# <CJK>
+0xA940	0x5496	# <CJK>
+0xA941	0x5478	# <CJK>
+0xA942	0x5495	# <CJK>
+0xA943	0x5480	# <CJK>
+0xA944	0x547B	# <CJK>
+0xA945	0x5477	# <CJK>
+0xA946	0x5484	# <CJK>
+0xA947	0x5492	# <CJK>
+0xA948	0x5486	# <CJK>
+0xA949	0x547C	# <CJK>
+0xA94A	0x5490	# <CJK>
+0xA94B	0x5471	# <CJK>
+0xA94C	0x5476	# <CJK>
+0xA94D	0x548C	# <CJK>
+0xA94E	0x549A	# <CJK>
+0xA94F	0x5462	# <CJK>
+0xA950	0x5468	# <CJK>
+0xA951	0x548B	# <CJK>
+0xA952	0x547D	# <CJK>
+0xA953	0x548E	# <CJK>
+0xA954	0x56FA	# <CJK>
+0xA955	0x5783	# <CJK>
+0xA956	0x5777	# <CJK>
+0xA957	0x576A	# <CJK>
+0xA958	0x5769	# <CJK>
+0xA959	0x5761	# <CJK>
+0xA95A	0x5766	# <CJK>
+0xA95B	0x5764	# <CJK>
+0xA95C	0x577C	# <CJK>
+0xA95D	0x591C	# <CJK>
+0xA95E	0x5949	# <CJK>
+0xA95F	0x5947	# <CJK>
+0xA960	0x5948	# <CJK>
+0xA961	0x5944	# <CJK>
+0xA962	0x5954	# <CJK>
+0xA963	0x59BE	# <CJK>
+0xA964	0x59BB	# <CJK>
+0xA965	0x59D4	# <CJK>
+0xA966	0x59B9	# <CJK>
+0xA967	0x59AE	# <CJK>
+0xA968	0x59D1	# <CJK>
+0xA969	0x59C6	# <CJK>
+0xA96A	0x59D0	# <CJK>
+0xA96B	0x59CD	# <CJK>
+0xA96C	0x59CB	# <CJK>
+0xA96D	0x59D3	# <CJK>
+0xA96E	0x59CA	# <CJK>
+0xA96F	0x59AF	# <CJK>
+0xA970	0x59B3	# <CJK>
+0xA971	0x59D2	# <CJK>
+0xA972	0x59C5	# <CJK>
+0xA973	0x5B5F	# <CJK>
+0xA974	0x5B64	# <CJK>
+0xA975	0x5B63	# <CJK>
+0xA976	0x5B97	# <CJK>
+0xA977	0x5B9A	# <CJK>
+0xA978	0x5B98	# <CJK>
+0xA979	0x5B9C	# <CJK>
+0xA97A	0x5B99	# <CJK>
+0xA97B	0x5B9B	# <CJK>
+0xA97C	0x5C1A	# <CJK>
+0xA97D	0x5C48	# <CJK>
+0xA97E	0x5C45	# <CJK>
+0xA9A1	0x5C46	# <CJK>
+0xA9A2	0x5CB7	# <CJK>
+0xA9A3	0x5CA1	# <CJK>
+0xA9A4	0x5CB8	# <CJK>
+0xA9A5	0x5CA9	# <CJK>
+0xA9A6	0x5CAB	# <CJK>
+0xA9A7	0x5CB1	# <CJK>
+0xA9A8	0x5CB3	# <CJK>
+0xA9A9	0x5E18	# <CJK>
+0xA9AA	0x5E1A	# <CJK>
+0xA9AB	0x5E16	# <CJK>
+0xA9AC	0x5E15	# <CJK>
+0xA9AD	0x5E1B	# <CJK>
+0xA9AE	0x5E11	# <CJK>
+0xA9AF	0x5E78	# <CJK>
+0xA9B0	0x5E9A	# <CJK>
+0xA9B1	0x5E97	# <CJK>
+0xA9B2	0x5E9C	# <CJK>
+0xA9B3	0x5E95	# <CJK>
+0xA9B4	0x5E96	# <CJK>
+0xA9B5	0x5EF6	# <CJK>
+0xA9B6	0x5F26	# <CJK>
+0xA9B7	0x5F27	# <CJK>
+0xA9B8	0x5F29	# <CJK>
+0xA9B9	0x5F80	# <CJK>
+0xA9BA	0x5F81	# <CJK>
+0xA9BB	0x5F7F	# <CJK>
+0xA9BC	0x5F7C	# <CJK>
+0xA9BD	0x5FDD	# <CJK>
+0xA9BE	0x5FE0	# <CJK>
+0xA9BF	0x5FFD	# <CJK>
+0xA9C0	0x5FF5	# <CJK>
+0xA9C1	0x5FFF	# <CJK>
+0xA9C2	0x600F	# <CJK>
+0xA9C3	0x6014	# <CJK>
+0xA9C4	0x602F	# <CJK>
+0xA9C5	0x6035	# <CJK>
+0xA9C6	0x6016	# <CJK>
+0xA9C7	0x602A	# <CJK>
+0xA9C8	0x6015	# <CJK>
+0xA9C9	0x6021	# <CJK>
+0xA9CA	0x6027	# <CJK>
+0xA9CB	0x6029	# <CJK>
+0xA9CC	0x602B	# <CJK>
+0xA9CD	0x601B	# <CJK>
+0xA9CE	0x6216	# <CJK>
+0xA9CF	0x6215	# <CJK>
+0xA9D0	0x623F	# <CJK>
+0xA9D1	0x623E	# <CJK>
+0xA9D2	0x6240	# <CJK>
+0xA9D3	0x627F	# <CJK>
+0xA9D4	0x62C9	# <CJK>
+0xA9D5	0x62CC	# <CJK>
+0xA9D6	0x62C4	# <CJK>
+0xA9D7	0x62BF	# <CJK>
+0xA9D8	0x62C2	# <CJK>
+0xA9D9	0x62B9	# <CJK>
+0xA9DA	0x62D2	# <CJK>
+0xA9DB	0x62DB	# <CJK>
+0xA9DC	0x62AB	# <CJK>
+0xA9DD	0x62D3	# <CJK>
+0xA9DE	0x62D4	# <CJK>
+0xA9DF	0x62CB	# <CJK>
+0xA9E0	0x62C8	# <CJK>
+0xA9E1	0x62A8	# <CJK>
+0xA9E2	0x62BD	# <CJK>
+0xA9E3	0x62BC	# <CJK>
+0xA9E4	0x62D0	# <CJK>
+0xA9E5	0x62D9	# <CJK>
+0xA9E6	0x62C7	# <CJK>
+0xA9E7	0x62CD	# <CJK>
+0xA9E8	0x62B5	# <CJK>
+0xA9E9	0x62DA	# <CJK>
+0xA9EA	0x62B1	# <CJK>
+0xA9EB	0x62D8	# <CJK>
+0xA9EC	0x62D6	# <CJK>
+0xA9ED	0x62D7	# <CJK>
+0xA9EE	0x62C6	# <CJK>
+0xA9EF	0x62AC	# <CJK>
+0xA9F0	0x62CE	# <CJK>
+0xA9F1	0x653E	# <CJK>
+0xA9F2	0x65A7	# <CJK>
+0xA9F3	0x65BC	# <CJK>
+0xA9F4	0x65FA	# <CJK>
+0xA9F5	0x6614	# <CJK>
+0xA9F6	0x6613	# <CJK>
+0xA9F7	0x660C	# <CJK>
+0xA9F8	0x6606	# <CJK>
+0xA9F9	0x6602	# <CJK>
+0xA9FA	0x660E	# <CJK>
+0xA9FB	0x6600	# <CJK>
+0xA9FC	0x660F	# <CJK>
+0xA9FD	0x6615	# <CJK>
+0xA9FE	0x660A	# <CJK>
+0xAA40	0x6607	# <CJK>
+0xAA41	0x670D	# <CJK>
+0xAA42	0x670B	# <CJK>
+0xAA43	0x676D	# <CJK>
+0xAA44	0x678B	# <CJK>
+0xAA45	0x6795	# <CJK>
+0xAA46	0x6771	# <CJK>
+0xAA47	0x679C	# <CJK>
+0xAA48	0x6773	# <CJK>
+0xAA49	0x6777	# <CJK>
+0xAA4A	0x6787	# <CJK>
+0xAA4B	0x679D	# <CJK>
+0xAA4C	0x6797	# <CJK>
+0xAA4D	0x676F	# <CJK>
+0xAA4E	0x6770	# <CJK>
+0xAA4F	0x677F	# <CJK>
+0xAA50	0x6789	# <CJK>
+0xAA51	0x677E	# <CJK>
+0xAA52	0x6790	# <CJK>
+0xAA53	0x6775	# <CJK>
+0xAA54	0x679A	# <CJK>
+0xAA55	0x6793	# <CJK>
+0xAA56	0x677C	# <CJK>
+0xAA57	0x676A	# <CJK>
+0xAA58	0x6772	# <CJK>
+0xAA59	0x6B23	# <CJK>
+0xAA5A	0x6B66	# <CJK>
+0xAA5B	0x6B67	# <CJK>
+0xAA5C	0x6B7F	# <CJK>
+0xAA5D	0x6C13	# <CJK>
+0xAA5E	0x6C1B	# <CJK>
+0xAA5F	0x6CE3	# <CJK>
+0xAA60	0x6CE8	# <CJK>
+0xAA61	0x6CF3	# <CJK>
+0xAA62	0x6CB1	# <CJK>
+0xAA63	0x6CCC	# <CJK>
+0xAA64	0x6CE5	# <CJK>
+0xAA65	0x6CB3	# <CJK>
+0xAA66	0x6CBD	# <CJK>
+0xAA67	0x6CBE	# <CJK>
+0xAA68	0x6CBC	# <CJK>
+0xAA69	0x6CE2	# <CJK>
+0xAA6A	0x6CAB	# <CJK>
+0xAA6B	0x6CD5	# <CJK>
+0xAA6C	0x6CD3	# <CJK>
+0xAA6D	0x6CB8	# <CJK>
+0xAA6E	0x6CC4	# <CJK>
+0xAA6F	0x6CB9	# <CJK>
+0xAA70	0x6CC1	# <CJK>
+0xAA71	0x6CAE	# <CJK>
+0xAA72	0x6CD7	# <CJK>
+0xAA73	0x6CC5	# <CJK>
+0xAA74	0x6CF1	# <CJK>
+0xAA75	0x6CBF	# <CJK>
+0xAA76	0x6CBB	# <CJK>
+0xAA77	0x6CE1	# <CJK>
+0xAA78	0x6CDB	# <CJK>
+0xAA79	0x6CCA	# <CJK>
+0xAA7A	0x6CAC	# <CJK>
+0xAA7B	0x6CEF	# <CJK>
+0xAA7C	0x6CDC	# <CJK>
+0xAA7D	0x6CD6	# <CJK>
+0xAA7E	0x6CE0	# <CJK>
+0xAAA1	0x7095	# <CJK>
+0xAAA2	0x708E	# <CJK>
+0xAAA3	0x7092	# <CJK>
+0xAAA4	0x708A	# <CJK>
+0xAAA5	0x7099	# <CJK>
+0xAAA6	0x722C	# <CJK>
+0xAAA7	0x722D	# <CJK>
+0xAAA8	0x7238	# <CJK>
+0xAAA9	0x7248	# <CJK>
+0xAAAA	0x7267	# <CJK>
+0xAAAB	0x7269	# <CJK>
+0xAAAC	0x72C0	# <CJK>
+0xAAAD	0x72CE	# <CJK>
+0xAAAE	0x72D9	# <CJK>
+0xAAAF	0x72D7	# <CJK>
+0xAAB0	0x72D0	# <CJK>
+0xAAB1	0x73A9	# <CJK>
+0xAAB2	0x73A8	# <CJK>
+0xAAB3	0x739F	# <CJK>
+0xAAB4	0x73AB	# <CJK>
+0xAAB5	0x73A5	# <CJK>
+0xAAB6	0x753D	# <CJK>
+0xAAB7	0x759D	# <CJK>
+0xAAB8	0x7599	# <CJK>
+0xAAB9	0x759A	# <CJK>
+0xAABA	0x7684	# <CJK>
+0xAABB	0x76C2	# <CJK>
+0xAABC	0x76F2	# <CJK>
+0xAABD	0x76F4	# <CJK>
+0xAABE	0x77E5	# <CJK>
+0xAABF	0x77FD	# <CJK>
+0xAAC0	0x793E	# <CJK>
+0xAAC1	0x7940	# <CJK>
+0xAAC2	0x7941	# <CJK>
+0xAAC3	0x79C9	# <CJK>
+0xAAC4	0x79C8	# <CJK>
+0xAAC5	0x7A7A	# <CJK>
+0xAAC6	0x7A79	# <CJK>
+0xAAC7	0x7AFA	# <CJK>
+0xAAC8	0x7CFE	# <CJK>
+0xAAC9	0x7F54	# <CJK>
+0xAACA	0x7F8C	# <CJK>
+0xAACB	0x7F8B	# <CJK>
+0xAACC	0x8005	# <CJK>
+0xAACD	0x80BA	# <CJK>
+0xAACE	0x80A5	# <CJK>
+0xAACF	0x80A2	# <CJK>
+0xAAD0	0x80B1	# <CJK>
+0xAAD1	0x80A1	# <CJK>
+0xAAD2	0x80AB	# <CJK>
+0xAAD3	0x80A9	# <CJK>
+0xAAD4	0x80B4	# <CJK>
+0xAAD5	0x80AA	# <CJK>
+0xAAD6	0x80AF	# <CJK>
+0xAAD7	0x81E5	# <CJK>
+0xAAD8	0x81FE	# <CJK>
+0xAAD9	0x820D	# <CJK>
+0xAADA	0x82B3	# <CJK>
+0xAADB	0x829D	# <CJK>
+0xAADC	0x8299	# <CJK>
+0xAADD	0x82AD	# <CJK>
+0xAADE	0x82BD	# <CJK>
+0xAADF	0x829F	# <CJK>
+0xAAE0	0x82B9	# <CJK>
+0xAAE1	0x82B1	# <CJK>
+0xAAE2	0x82AC	# <CJK>
+0xAAE3	0x82A5	# <CJK>
+0xAAE4	0x82AF	# <CJK>
+0xAAE5	0x82B8	# <CJK>
+0xAAE6	0x82A3	# <CJK>
+0xAAE7	0x82B0	# <CJK>
+0xAAE8	0x82BE	# <CJK>
+0xAAE9	0x82B7	# <CJK>
+0xAAEA	0x864E	# <CJK>
+0xAAEB	0x8671	# <CJK>
+0xAAEC	0x521D	# <CJK>
+0xAAED	0x8868	# <CJK>
+0xAAEE	0x8ECB	# <CJK>
+0xAAEF	0x8FCE	# <CJK>
+0xAAF0	0x8FD4	# <CJK>
+0xAAF1	0x8FD1	# <CJK>
+0xAAF2	0x90B5	# <CJK>
+0xAAF3	0x90B8	# <CJK>
+0xAAF4	0x90B1	# <CJK>
+0xAAF5	0x90B6	# <CJK>
+0xAAF6	0x91C7	# <CJK>
+0xAAF7	0x91D1	# <CJK>
+0xAAF8	0x9577	# <CJK>
+0xAAF9	0x9580	# <CJK>
+0xAAFA	0x961C	# <CJK>
+0xAAFB	0x9640	# <CJK>
+0xAAFC	0x963F	# <CJK>
+0xAAFD	0x963B	# <CJK>
+0xAAFE	0x9644	# <CJK>
+0xAB40	0x9642	# <CJK>
+0xAB41	0x96B9	# <CJK>
+0xAB42	0x96E8	# <CJK>
+0xAB43	0x9752	# <CJK>
+0xAB44	0x975E	# <CJK>
+0xAB45	0x4E9F	# <CJK>
+0xAB46	0x4EAD	# <CJK>
+0xAB47	0x4EAE	# <CJK>
+0xAB48	0x4FE1	# <CJK>
+0xAB49	0x4FB5	# <CJK>
+0xAB4A	0x4FAF	# <CJK>
+0xAB4B	0x4FBF	# <CJK>
+0xAB4C	0x4FE0	# <CJK>
+0xAB4D	0x4FD1	# <CJK>
+0xAB4E	0x4FCF	# <CJK>
+0xAB4F	0x4FDD	# <CJK>
+0xAB50	0x4FC3	# <CJK>
+0xAB51	0x4FB6	# <CJK>
+0xAB52	0x4FD8	# <CJK>
+0xAB53	0x4FDF	# <CJK>
+0xAB54	0x4FCA	# <CJK>
+0xAB55	0x4FD7	# <CJK>
+0xAB56	0x4FAE	# <CJK>
+0xAB57	0x4FD0	# <CJK>
+0xAB58	0x4FC4	# <CJK>
+0xAB59	0x4FC2	# <CJK>
+0xAB5A	0x4FDA	# <CJK>
+0xAB5B	0x4FCE	# <CJK>
+0xAB5C	0x4FDE	# <CJK>
+0xAB5D	0x4FB7	# <CJK>
+0xAB5E	0x5157	# <CJK>
+0xAB5F	0x5192	# <CJK>
+0xAB60	0x5191	# <CJK>
+0xAB61	0x51A0	# <CJK>
+0xAB62	0x524E	# <CJK>
+0xAB63	0x5243	# <CJK>
+0xAB64	0x524A	# <CJK>
+0xAB65	0x524D	# <CJK>
+0xAB66	0x524C	# <CJK>
+0xAB67	0x524B	# <CJK>
+0xAB68	0x5247	# <CJK>
+0xAB69	0x52C7	# <CJK>
+0xAB6A	0x52C9	# <CJK>
+0xAB6B	0x52C3	# <CJK>
+0xAB6C	0x52C1	# <CJK>
+0xAB6D	0x530D	# <CJK>
+0xAB6E	0x5357	# <CJK>
+0xAB6F	0x537B	# <CJK>
+0xAB70	0x539A	# <CJK>
+0xAB71	0x53DB	# <CJK>
+0xAB72	0x54AC	# <CJK>
+0xAB73	0x54C0	# <CJK>
+0xAB74	0x54A8	# <CJK>
+0xAB75	0x54CE	# <CJK>
+0xAB76	0x54C9	# <CJK>
+0xAB77	0x54B8	# <CJK>
+0xAB78	0x54A6	# <CJK>
+0xAB79	0x54B3	# <CJK>
+0xAB7A	0x54C7	# <CJK>
+0xAB7B	0x54C2	# <CJK>
+0xAB7C	0x54BD	# <CJK>
+0xAB7D	0x54AA	# <CJK>
+0xAB7E	0x54C1	# <CJK>
+0xABA1	0x54C4	# <CJK>
+0xABA2	0x54C8	# <CJK>
+0xABA3	0x54AF	# <CJK>
+0xABA4	0x54AB	# <CJK>
+0xABA5	0x54B1	# <CJK>
+0xABA6	0x54BB	# <CJK>
+0xABA7	0x54A9	# <CJK>
+0xABA8	0x54A7	# <CJK>
+0xABA9	0x54BF	# <CJK>
+0xABAA	0x56FF	# <CJK>
+0xABAB	0x5782	# <CJK>
+0xABAC	0x578B	# <CJK>
+0xABAD	0x57A0	# <CJK>
+0xABAE	0x57A3	# <CJK>
+0xABAF	0x57A2	# <CJK>
+0xABB0	0x57CE	# <CJK>
+0xABB1	0x57AE	# <CJK>
+0xABB2	0x5793	# <CJK>
+0xABB3	0x5955	# <CJK>
+0xABB4	0x5951	# <CJK>
+0xABB5	0x594F	# <CJK>
+0xABB6	0x594E	# <CJK>
+0xABB7	0x5950	# <CJK>
+0xABB8	0x59DC	# <CJK>
+0xABB9	0x59D8	# <CJK>
+0xABBA	0x59FF	# <CJK>
+0xABBB	0x59E3	# <CJK>
+0xABBC	0x59E8	# <CJK>
+0xABBD	0x5A03	# <CJK>
+0xABBE	0x59E5	# <CJK>
+0xABBF	0x59EA	# <CJK>
+0xABC0	0x59DA	# <CJK>
+0xABC1	0x59E6	# <CJK>
+0xABC2	0x5A01	# <CJK>
+0xABC3	0x59FB	# <CJK>
+0xABC4	0x5B69	# <CJK>
+0xABC5	0x5BA3	# <CJK>
+0xABC6	0x5BA6	# <CJK>
+0xABC7	0x5BA4	# <CJK>
+0xABC8	0x5BA2	# <CJK>
+0xABC9	0x5BA5	# <CJK>
+0xABCA	0x5C01	# <CJK>
+0xABCB	0x5C4E	# <CJK>
+0xABCC	0x5C4F	# <CJK>
+0xABCD	0x5C4D	# <CJK>
+0xABCE	0x5C4B	# <CJK>
+0xABCF	0x5CD9	# <CJK>
+0xABD0	0x5CD2	# <CJK>
+0xABD1	0x5DF7	# <CJK>
+0xABD2	0x5E1D	# <CJK>
+0xABD3	0x5E25	# <CJK>
+0xABD4	0x5E1F	# <CJK>
+0xABD5	0x5E7D	# <CJK>
+0xABD6	0x5EA0	# <CJK>
+0xABD7	0x5EA6	# <CJK>
+0xABD8	0x5EFA	# <CJK>
+0xABD9	0x5F08	# <CJK>
+0xABDA	0x5F2D	# <CJK>
+0xABDB	0x5F65	# <CJK>
+0xABDC	0x5F88	# <CJK>
+0xABDD	0x5F85	# <CJK>
+0xABDE	0x5F8A	# <CJK>
+0xABDF	0x5F8B	# <CJK>
+0xABE0	0x5F87	# <CJK>
+0xABE1	0x5F8C	# <CJK>
+0xABE2	0x5F89	# <CJK>
+0xABE3	0x6012	# <CJK>
+0xABE4	0x601D	# <CJK>
+0xABE5	0x6020	# <CJK>
+0xABE6	0x6025	# <CJK>
+0xABE7	0x600E	# <CJK>
+0xABE8	0x6028	# <CJK>
+0xABE9	0x604D	# <CJK>
+0xABEA	0x6070	# <CJK>
+0xABEB	0x6068	# <CJK>
+0xABEC	0x6062	# <CJK>
+0xABED	0x6046	# <CJK>
+0xABEE	0x6043	# <CJK>
+0xABEF	0x606C	# <CJK>
+0xABF0	0x606B	# <CJK>
+0xABF1	0x606A	# <CJK>
+0xABF2	0x6064	# <CJK>
+0xABF3	0x6241	# <CJK>
+0xABF4	0x62DC	# <CJK>
+0xABF5	0x6316	# <CJK>
+0xABF6	0x6309	# <CJK>
+0xABF7	0x62FC	# <CJK>
+0xABF8	0x62ED	# <CJK>
+0xABF9	0x6301	# <CJK>
+0xABFA	0x62EE	# <CJK>
+0xABFB	0x62FD	# <CJK>
+0xABFC	0x6307	# <CJK>
+0xABFD	0x62F1	# <CJK>
+0xABFE	0x62F7	# <CJK>
+0xAC40	0x62EF	# <CJK>
+0xAC41	0x62EC	# <CJK>
+0xAC42	0x62FE	# <CJK>
+0xAC43	0x62F4	# <CJK>
+0xAC44	0x6311	# <CJK>
+0xAC45	0x6302	# <CJK>
+0xAC46	0x653F	# <CJK>
+0xAC47	0x6545	# <CJK>
+0xAC48	0x65AB	# <CJK>
+0xAC49	0x65BD	# <CJK>
+0xAC4A	0x65E2	# <CJK>
+0xAC4B	0x6625	# <CJK>
+0xAC4C	0x662D	# <CJK>
+0xAC4D	0x6620	# <CJK>
+0xAC4E	0x6627	# <CJK>
+0xAC4F	0x662F	# <CJK>
+0xAC50	0x661F	# <CJK>
+0xAC51	0x6628	# <CJK>
+0xAC52	0x6631	# <CJK>
+0xAC53	0x6624	# <CJK>
+0xAC54	0x66F7	# <CJK>
+0xAC55	0x67FF	# <CJK>
+0xAC56	0x67D3	# <CJK>
+0xAC57	0x67F1	# <CJK>
+0xAC58	0x67D4	# <CJK>
+0xAC59	0x67D0	# <CJK>
+0xAC5A	0x67EC	# <CJK>
+0xAC5B	0x67B6	# <CJK>
+0xAC5C	0x67AF	# <CJK>
+0xAC5D	0x67F5	# <CJK>
+0xAC5E	0x67E9	# <CJK>
+0xAC5F	0x67EF	# <CJK>
+0xAC60	0x67C4	# <CJK>
+0xAC61	0x67D1	# <CJK>
+0xAC62	0x67B4	# <CJK>
+0xAC63	0x67DA	# <CJK>
+0xAC64	0x67E5	# <CJK>
+0xAC65	0x67B8	# <CJK>
+0xAC66	0x67CF	# <CJK>
+0xAC67	0x67DE	# <CJK>
+0xAC68	0x67F3	# <CJK>
+0xAC69	0x67B0	# <CJK>
+0xAC6A	0x67D9	# <CJK>
+0xAC6B	0x67E2	# <CJK>
+0xAC6C	0x67DD	# <CJK>
+0xAC6D	0x67D2	# <CJK>
+0xAC6E	0x6B6A	# <CJK>
+0xAC6F	0x6B83	# <CJK>
+0xAC70	0x6B86	# <CJK>
+0xAC71	0x6BB5	# <CJK>
+0xAC72	0x6BD2	# <CJK>
+0xAC73	0x6BD7	# <CJK>
+0xAC74	0x6C1F	# <CJK>
+0xAC75	0x6CC9	# <CJK>
+0xAC76	0x6D0B	# <CJK>
+0xAC77	0x6D32	# <CJK>
+0xAC78	0x6D2A	# <CJK>
+0xAC79	0x6D41	# <CJK>
+0xAC7A	0x6D25	# <CJK>
+0xAC7B	0x6D0C	# <CJK>
+0xAC7C	0x6D31	# <CJK>
+0xAC7D	0x6D1E	# <CJK>
+0xAC7E	0x6D17	# <CJK>
+0xACA1	0x6D3B	# <CJK>
+0xACA2	0x6D3D	# <CJK>
+0xACA3	0x6D3E	# <CJK>
+0xACA4	0x6D36	# <CJK>
+0xACA5	0x6D1B	# <CJK>
+0xACA6	0x6CF5	# <CJK>
+0xACA7	0x6D39	# <CJK>
+0xACA8	0x6D27	# <CJK>
+0xACA9	0x6D38	# <CJK>
+0xACAA	0x6D29	# <CJK>
+0xACAB	0x6D2E	# <CJK>
+0xACAC	0x6D35	# <CJK>
+0xACAD	0x6D0E	# <CJK>
+0xACAE	0x6D2B	# <CJK>
+0xACAF	0x70AB	# <CJK>
+0xACB0	0x70BA	# <CJK>
+0xACB1	0x70B3	# <CJK>
+0xACB2	0x70AC	# <CJK>
+0xACB3	0x70AF	# <CJK>
+0xACB4	0x70AD	# <CJK>
+0xACB5	0x70B8	# <CJK>
+0xACB6	0x70AE	# <CJK>
+0xACB7	0x70A4	# <CJK>
+0xACB8	0x7230	# <CJK>
+0xACB9	0x7272	# <CJK>
+0xACBA	0x726F	# <CJK>
+0xACBB	0x7274	# <CJK>
+0xACBC	0x72E9	# <CJK>
+0xACBD	0x72E0	# <CJK>
+0xACBE	0x72E1	# <CJK>
+0xACBF	0x73B7	# <CJK>
+0xACC0	0x73CA	# <CJK>
+0xACC1	0x73BB	# <CJK>
+0xACC2	0x73B2	# <CJK>
+0xACC3	0x73CD	# <CJK>
+0xACC4	0x73C0	# <CJK>
+0xACC5	0x73B3	# <CJK>
+0xACC6	0x751A	# <CJK>
+0xACC7	0x752D	# <CJK>
+0xACC8	0x754F	# <CJK>
+0xACC9	0x754C	# <CJK>
+0xACCA	0x754E	# <CJK>
+0xACCB	0x754B	# <CJK>
+0xACCC	0x75AB	# <CJK>
+0xACCD	0x75A4	# <CJK>
+0xACCE	0x75A5	# <CJK>
+0xACCF	0x75A2	# <CJK>
+0xACD0	0x75A3	# <CJK>
+0xACD1	0x7678	# <CJK>
+0xACD2	0x7686	# <CJK>
+0xACD3	0x7687	# <CJK>
+0xACD4	0x7688	# <CJK>
+0xACD5	0x76C8	# <CJK>
+0xACD6	0x76C6	# <CJK>
+0xACD7	0x76C3	# <CJK>
+0xACD8	0x76C5	# <CJK>
+0xACD9	0x7701	# <CJK>
+0xACDA	0x76F9	# <CJK>
+0xACDB	0x76F8	# <CJK>
+0xACDC	0x7709	# <CJK>
+0xACDD	0x770B	# <CJK>
+0xACDE	0x76FE	# <CJK>
+0xACDF	0x76FC	# <CJK>
+0xACE0	0x7707	# <CJK>
+0xACE1	0x77DC	# <CJK>
+0xACE2	0x7802	# <CJK>
+0xACE3	0x7814	# <CJK>
+0xACE4	0x780C	# <CJK>
+0xACE5	0x780D	# <CJK>
+0xACE6	0x7946	# <CJK>
+0xACE7	0x7949	# <CJK>
+0xACE8	0x7948	# <CJK>
+0xACE9	0x7947	# <CJK>
+0xACEA	0x79B9	# <CJK>
+0xACEB	0x79BA	# <CJK>
+0xACEC	0x79D1	# <CJK>
+0xACED	0x79D2	# <CJK>
+0xACEE	0x79CB	# <CJK>
+0xACEF	0x7A7F	# <CJK>
+0xACF0	0x7A81	# <CJK>
+0xACF1	0x7AFF	# <CJK>
+0xACF2	0x7AFD	# <CJK>
+0xACF3	0x7C7D	# <CJK>
+0xACF4	0x7D02	# <CJK>
+0xACF5	0x7D05	# <CJK>
+0xACF6	0x7D00	# <CJK>
+0xACF7	0x7D09	# <CJK>
+0xACF8	0x7D07	# <CJK>
+0xACF9	0x7D04	# <CJK>
+0xACFA	0x7D06	# <CJK>
+0xACFB	0x7F38	# <CJK>
+0xACFC	0x7F8E	# <CJK>
+0xACFD	0x7FBF	# <CJK>
+0xACFE	0x8004	# <CJK>
+0xAD40	0x8010	# <CJK>
+0xAD41	0x800D	# <CJK>
+0xAD42	0x8011	# <CJK>
+0xAD43	0x8036	# <CJK>
+0xAD44	0x80D6	# <CJK>
+0xAD45	0x80E5	# <CJK>
+0xAD46	0x80DA	# <CJK>
+0xAD47	0x80C3	# <CJK>
+0xAD48	0x80C4	# <CJK>
+0xAD49	0x80CC	# <CJK>
+0xAD4A	0x80E1	# <CJK>
+0xAD4B	0x80DB	# <CJK>
+0xAD4C	0x80CE	# <CJK>
+0xAD4D	0x80DE	# <CJK>
+0xAD4E	0x80E4	# <CJK>
+0xAD4F	0x80DD	# <CJK>
+0xAD50	0x81F4	# <CJK>
+0xAD51	0x8222	# <CJK>
+0xAD52	0x82E7	# <CJK>
+0xAD53	0x8303	# <CJK>
+0xAD54	0x8305	# <CJK>
+0xAD55	0x82E3	# <CJK>
+0xAD56	0x82DB	# <CJK>
+0xAD57	0x82E6	# <CJK>
+0xAD58	0x8304	# <CJK>
+0xAD59	0x82E5	# <CJK>
+0xAD5A	0x8302	# <CJK>
+0xAD5B	0x8309	# <CJK>
+0xAD5C	0x82D2	# <CJK>
+0xAD5D	0x82D7	# <CJK>
+0xAD5E	0x82F1	# <CJK>
+0xAD5F	0x8301	# <CJK>
+0xAD60	0x82DC	# <CJK>
+0xAD61	0x82D4	# <CJK>
+0xAD62	0x82D1	# <CJK>
+0xAD63	0x82DE	# <CJK>
+0xAD64	0x82D3	# <CJK>
+0xAD65	0x82DF	# <CJK>
+0xAD66	0x82EF	# <CJK>
+0xAD67	0x8306	# <CJK>
+0xAD68	0x8650	# <CJK>
+0xAD69	0x8679	# <CJK>
+0xAD6A	0x867B	# <CJK>
+0xAD6B	0x867A	# <CJK>
+0xAD6C	0x884D	# <CJK>
+0xAD6D	0x886B	# <CJK>
+0xAD6E	0x8981	# <CJK>
+0xAD6F	0x89D4	# <CJK>
+0xAD70	0x8A08	# <CJK>
+0xAD71	0x8A02	# <CJK>
+0xAD72	0x8A03	# <CJK>
+0xAD73	0x8C9E	# <CJK>
+0xAD74	0x8CA0	# <CJK>
+0xAD75	0x8D74	# <CJK>
+0xAD76	0x8D73	# <CJK>
+0xAD77	0x8DB4	# <CJK>
+0xAD78	0x8ECD	# <CJK>
+0xAD79	0x8ECC	# <CJK>
+0xAD7A	0x8FF0	# <CJK>
+0xAD7B	0x8FE6	# <CJK>
+0xAD7C	0x8FE2	# <CJK>
+0xAD7D	0x8FEA	# <CJK>
+0xAD7E	0x8FE5	# <CJK>
+0xADA1	0x8FED	# <CJK>
+0xADA2	0x8FEB	# <CJK>
+0xADA3	0x8FE4	# <CJK>
+0xADA4	0x8FE8	# <CJK>
+0xADA5	0x90CA	# <CJK>
+0xADA6	0x90CE	# <CJK>
+0xADA7	0x90C1	# <CJK>
+0xADA8	0x90C3	# <CJK>
+0xADA9	0x914B	# <CJK>
+0xADAA	0x914A	# <CJK>
+0xADAB	0x91CD	# <CJK>
+0xADAC	0x9582	# <CJK>
+0xADAD	0x9650	# <CJK>
+0xADAE	0x964B	# <CJK>
+0xADAF	0x964C	# <CJK>
+0xADB0	0x964D	# <CJK>
+0xADB1	0x9762	# <CJK>
+0xADB2	0x9769	# <CJK>
+0xADB3	0x97CB	# <CJK>
+0xADB4	0x97ED	# <CJK>
+0xADB5	0x97F3	# <CJK>
+0xADB6	0x9801	# <CJK>
+0xADB7	0x98A8	# <CJK>
+0xADB8	0x98DB	# <CJK>
+0xADB9	0x98DF	# <CJK>
+0xADBA	0x9996	# <CJK>
+0xADBB	0x9999	# <CJK>
+0xADBC	0x4E58	# <CJK>
+0xADBD	0x4EB3	# <CJK>
+0xADBE	0x500C	# <CJK>
+0xADBF	0x500D	# <CJK>
+0xADC0	0x5023	# <CJK>
+0xADC1	0x4FEF	# <CJK>
+0xADC2	0x5026	# <CJK>
+0xADC3	0x5025	# <CJK>
+0xADC4	0x4FF8	# <CJK>
+0xADC5	0x5029	# <CJK>
+0xADC6	0x5016	# <CJK>
+0xADC7	0x5006	# <CJK>
+0xADC8	0x503C	# <CJK>
+0xADC9	0x501F	# <CJK>
+0xADCA	0x501A	# <CJK>
+0xADCB	0x5012	# <CJK>
+0xADCC	0x5011	# <CJK>
+0xADCD	0x4FFA	# <CJK>
+0xADCE	0x5000	# <CJK>
+0xADCF	0x5014	# <CJK>
+0xADD0	0x5028	# <CJK>
+0xADD1	0x4FF1	# <CJK>
+0xADD2	0x5021	# <CJK>
+0xADD3	0x500B	# <CJK>
+0xADD4	0x5019	# <CJK>
+0xADD5	0x5018	# <CJK>
+0xADD6	0x4FF3	# <CJK>
+0xADD7	0x4FEE	# <CJK>
+0xADD8	0x502D	# <CJK>
+0xADD9	0x502A	# <CJK>
+0xADDA	0x4FFE	# <CJK>
+0xADDB	0x502B	# <CJK>
+0xADDC	0x5009	# <CJK>
+0xADDD	0x517C	# <CJK>
+0xADDE	0x51A4	# <CJK>
+0xADDF	0x51A5	# <CJK>
+0xADE0	0x51A2	# <CJK>
+0xADE1	0x51CD	# <CJK>
+0xADE2	0x51CC	# <CJK>
+0xADE3	0x51C6	# <CJK>
+0xADE4	0x51CB	# <CJK>
+0xADE5	0x5256	# <CJK>
+0xADE6	0x525C	# <CJK>
+0xADE7	0x5254	# <CJK>
+0xADE8	0x525B	# <CJK>
+0xADE9	0x525D	# <CJK>
+0xADEA	0x532A	# <CJK>
+0xADEB	0x537F	# <CJK>
+0xADEC	0x539F	# <CJK>
+0xADED	0x539D	# <CJK>
+0xADEE	0x53DF	# <CJK>
+0xADEF	0x54E8	# <CJK>
+0xADF0	0x5510	# <CJK>
+0xADF1	0x5501	# <CJK>
+0xADF2	0x5537	# <CJK>
+0xADF3	0x54FC	# <CJK>
+0xADF4	0x54E5	# <CJK>
+0xADF5	0x54F2	# <CJK>
+0xADF6	0x5506	# <CJK>
+0xADF7	0x54FA	# <CJK>
+0xADF8	0x5514	# <CJK>
+0xADF9	0x54E9	# <CJK>
+0xADFA	0x54ED	# <CJK>
+0xADFB	0x54E1	# <CJK>
+0xADFC	0x5509	# <CJK>
+0xADFD	0x54EE	# <CJK>
+0xADFE	0x54EA	# <CJK>
+0xAE40	0x54E6	# <CJK>
+0xAE41	0x5527	# <CJK>
+0xAE42	0x5507	# <CJK>
+0xAE43	0x54FD	# <CJK>
+0xAE44	0x550F	# <CJK>
+0xAE45	0x5703	# <CJK>
+0xAE46	0x5704	# <CJK>
+0xAE47	0x57C2	# <CJK>
+0xAE48	0x57D4	# <CJK>
+0xAE49	0x57CB	# <CJK>
+0xAE4A	0x57C3	# <CJK>
+0xAE4B	0x5809	# <CJK>
+0xAE4C	0x590F	# <CJK>
+0xAE4D	0x5957	# <CJK>
+0xAE4E	0x5958	# <CJK>
+0xAE4F	0x595A	# <CJK>
+0xAE50	0x5A11	# <CJK>
+0xAE51	0x5A18	# <CJK>
+0xAE52	0x5A1C	# <CJK>
+0xAE53	0x5A1F	# <CJK>
+0xAE54	0x5A1B	# <CJK>
+0xAE55	0x5A13	# <CJK>
+0xAE56	0x59EC	# <CJK>
+0xAE57	0x5A20	# <CJK>
+0xAE58	0x5A23	# <CJK>
+0xAE59	0x5A29	# <CJK>
+0xAE5A	0x5A25	# <CJK>
+0xAE5B	0x5A0C	# <CJK>
+0xAE5C	0x5A09	# <CJK>
+0xAE5D	0x5B6B	# <CJK>
+0xAE5E	0x5C58	# <CJK>
+0xAE5F	0x5BB0	# <CJK>
+0xAE60	0x5BB3	# <CJK>
+0xAE61	0x5BB6	# <CJK>
+0xAE62	0x5BB4	# <CJK>
+0xAE63	0x5BAE	# <CJK>
+0xAE64	0x5BB5	# <CJK>
+0xAE65	0x5BB9	# <CJK>
+0xAE66	0x5BB8	# <CJK>
+0xAE67	0x5C04	# <CJK>
+0xAE68	0x5C51	# <CJK>
+0xAE69	0x5C55	# <CJK>
+0xAE6A	0x5C50	# <CJK>
+0xAE6B	0x5CED	# <CJK>
+0xAE6C	0x5CFD	# <CJK>
+0xAE6D	0x5CFB	# <CJK>
+0xAE6E	0x5CEA	# <CJK>
+0xAE6F	0x5CE8	# <CJK>
+0xAE70	0x5CF0	# <CJK>
+0xAE71	0x5CF6	# <CJK>
+0xAE72	0x5D01	# <CJK>
+0xAE73	0x5CF4	# <CJK>
+0xAE74	0x5DEE	# <CJK>
+0xAE75	0x5E2D	# <CJK>
+0xAE76	0x5E2B	# <CJK>
+0xAE77	0x5EAB	# <CJK>
+0xAE78	0x5EAD	# <CJK>
+0xAE79	0x5EA7	# <CJK>
+0xAE7A	0x5F31	# <CJK>
+0xAE7B	0x5F92	# <CJK>
+0xAE7C	0x5F91	# <CJK>
+0xAE7D	0x5F90	# <CJK>
+0xAE7E	0x6059	# <CJK>
+0xAEA1	0x6063	# <CJK>
+0xAEA2	0x6065	# <CJK>
+0xAEA3	0x6050	# <CJK>
+0xAEA4	0x6055	# <CJK>
+0xAEA5	0x606D	# <CJK>
+0xAEA6	0x6069	# <CJK>
+0xAEA7	0x606F	# <CJK>
+0xAEA8	0x6084	# <CJK>
+0xAEA9	0x609F	# <CJK>
+0xAEAA	0x609A	# <CJK>
+0xAEAB	0x608D	# <CJK>
+0xAEAC	0x6094	# <CJK>
+0xAEAD	0x608C	# <CJK>
+0xAEAE	0x6085	# <CJK>
+0xAEAF	0x6096	# <CJK>
+0xAEB0	0x6247	# <CJK>
+0xAEB1	0x62F3	# <CJK>
+0xAEB2	0x6308	# <CJK>
+0xAEB3	0x62FF	# <CJK>
+0xAEB4	0x634E	# <CJK>
+0xAEB5	0x633E	# <CJK>
+0xAEB6	0x632F	# <CJK>
+0xAEB7	0x6355	# <CJK>
+0xAEB8	0x6342	# <CJK>
+0xAEB9	0x6346	# <CJK>
+0xAEBA	0x634F	# <CJK>
+0xAEBB	0x6349	# <CJK>
+0xAEBC	0x633A	# <CJK>
+0xAEBD	0x6350	# <CJK>
+0xAEBE	0x633D	# <CJK>
+0xAEBF	0x632A	# <CJK>
+0xAEC0	0x632B	# <CJK>
+0xAEC1	0x6328	# <CJK>
+0xAEC2	0x634D	# <CJK>
+0xAEC3	0x634C	# <CJK>
+0xAEC4	0x6548	# <CJK>
+0xAEC5	0x6549	# <CJK>
+0xAEC6	0x6599	# <CJK>
+0xAEC7	0x65C1	# <CJK>
+0xAEC8	0x65C5	# <CJK>
+0xAEC9	0x6642	# <CJK>
+0xAECA	0x6649	# <CJK>
+0xAECB	0x664F	# <CJK>
+0xAECC	0x6643	# <CJK>
+0xAECD	0x6652	# <CJK>
+0xAECE	0x664C	# <CJK>
+0xAECF	0x6645	# <CJK>
+0xAED0	0x6641	# <CJK>
+0xAED1	0x66F8	# <CJK>
+0xAED2	0x6714	# <CJK>
+0xAED3	0x6715	# <CJK>
+0xAED4	0x6717	# <CJK>
+0xAED5	0x6821	# <CJK>
+0xAED6	0x6838	# <CJK>
+0xAED7	0x6848	# <CJK>
+0xAED8	0x6846	# <CJK>
+0xAED9	0x6853	# <CJK>
+0xAEDA	0x6839	# <CJK>
+0xAEDB	0x6842	# <CJK>
+0xAEDC	0x6854	# <CJK>
+0xAEDD	0x6829	# <CJK>
+0xAEDE	0x68B3	# <CJK>
+0xAEDF	0x6817	# <CJK>
+0xAEE0	0x684C	# <CJK>
+0xAEE1	0x6851	# <CJK>
+0xAEE2	0x683D	# <CJK>
+0xAEE3	0x67F4	# <CJK>
+0xAEE4	0x6850	# <CJK>
+0xAEE5	0x6840	# <CJK>
+0xAEE6	0x683C	# <CJK>
+0xAEE7	0x6843	# <CJK>
+0xAEE8	0x682A	# <CJK>
+0xAEE9	0x6845	# <CJK>
+0xAEEA	0x6813	# <CJK>
+0xAEEB	0x6818	# <CJK>
+0xAEEC	0x6841	# <CJK>
+0xAEED	0x6B8A	# <CJK>
+0xAEEE	0x6B89	# <CJK>
+0xAEEF	0x6BB7	# <CJK>
+0xAEF0	0x6C23	# <CJK>
+0xAEF1	0x6C27	# <CJK>
+0xAEF2	0x6C28	# <CJK>
+0xAEF3	0x6C26	# <CJK>
+0xAEF4	0x6C24	# <CJK>
+0xAEF5	0x6CF0	# <CJK>
+0xAEF6	0x6D6A	# <CJK>
+0xAEF7	0x6D95	# <CJK>
+0xAEF8	0x6D88	# <CJK>
+0xAEF9	0x6D87	# <CJK>
+0xAEFA	0x6D66	# <CJK>
+0xAEFB	0x6D78	# <CJK>
+0xAEFC	0x6D77	# <CJK>
+0xAEFD	0x6D59	# <CJK>
+0xAEFE	0x6D93	# <CJK>
+0xAF40	0x6D6C	# <CJK>
+0xAF41	0x6D89	# <CJK>
+0xAF42	0x6D6E	# <CJK>
+0xAF43	0x6D5A	# <CJK>
+0xAF44	0x6D74	# <CJK>
+0xAF45	0x6D69	# <CJK>
+0xAF46	0x6D8C	# <CJK>
+0xAF47	0x6D8A	# <CJK>
+0xAF48	0x6D79	# <CJK>
+0xAF49	0x6D85	# <CJK>
+0xAF4A	0x6D65	# <CJK>
+0xAF4B	0x6D94	# <CJK>
+0xAF4C	0x70CA	# <CJK>
+0xAF4D	0x70D8	# <CJK>
+0xAF4E	0x70E4	# <CJK>
+0xAF4F	0x70D9	# <CJK>
+0xAF50	0x70C8	# <CJK>
+0xAF51	0x70CF	# <CJK>
+0xAF52	0x7239	# <CJK>
+0xAF53	0x7279	# <CJK>
+0xAF54	0x72FC	# <CJK>
+0xAF55	0x72F9	# <CJK>
+0xAF56	0x72FD	# <CJK>
+0xAF57	0x72F8	# <CJK>
+0xAF58	0x72F7	# <CJK>
+0xAF59	0x7386	# <CJK>
+0xAF5A	0x73ED	# <CJK>
+0xAF5B	0x7409	# <CJK>
+0xAF5C	0x73EE	# <CJK>
+0xAF5D	0x73E0	# <CJK>
+0xAF5E	0x73EA	# <CJK>
+0xAF5F	0x73DE	# <CJK>
+0xAF60	0x7554	# <CJK>
+0xAF61	0x755D	# <CJK>
+0xAF62	0x755C	# <CJK>
+0xAF63	0x755A	# <CJK>
+0xAF64	0x7559	# <CJK>
+0xAF65	0x75BE	# <CJK>
+0xAF66	0x75C5	# <CJK>
+0xAF67	0x75C7	# <CJK>
+0xAF68	0x75B2	# <CJK>
+0xAF69	0x75B3	# <CJK>
+0xAF6A	0x75BD	# <CJK>
+0xAF6B	0x75BC	# <CJK>
+0xAF6C	0x75B9	# <CJK>
+0xAF6D	0x75C2	# <CJK>
+0xAF6E	0x75B8	# <CJK>
+0xAF6F	0x768B	# <CJK>
+0xAF70	0x76B0	# <CJK>
+0xAF71	0x76CA	# <CJK>
+0xAF72	0x76CD	# <CJK>
+0xAF73	0x76CE	# <CJK>
+0xAF74	0x7729	# <CJK>
+0xAF75	0x771F	# <CJK>
+0xAF76	0x7720	# <CJK>
+0xAF77	0x7728	# <CJK>
+0xAF78	0x77E9	# <CJK>
+0xAF79	0x7830	# <CJK>
+0xAF7A	0x7827	# <CJK>
+0xAF7B	0x7838	# <CJK>
+0xAF7C	0x781D	# <CJK>
+0xAF7D	0x7834	# <CJK>
+0xAF7E	0x7837	# <CJK>
+0xAFA1	0x7825	# <CJK>
+0xAFA2	0x782D	# <CJK>
+0xAFA3	0x7820	# <CJK>
+0xAFA4	0x781F	# <CJK>
+0xAFA5	0x7832	# <CJK>
+0xAFA6	0x7955	# <CJK>
+0xAFA7	0x7950	# <CJK>
+0xAFA8	0x7960	# <CJK>
+0xAFA9	0x795F	# <CJK>
+0xAFAA	0x7956	# <CJK>
+0xAFAB	0x795E	# <CJK>
+0xAFAC	0x795D	# <CJK>
+0xAFAD	0x7957	# <CJK>
+0xAFAE	0x795A	# <CJK>
+0xAFAF	0x79E4	# <CJK>
+0xAFB0	0x79E3	# <CJK>
+0xAFB1	0x79E7	# <CJK>
+0xAFB2	0x79DF	# <CJK>
+0xAFB3	0x79E6	# <CJK>
+0xAFB4	0x79E9	# <CJK>
+0xAFB5	0x79D8	# <CJK>
+0xAFB6	0x7A84	# <CJK>
+0xAFB7	0x7A88	# <CJK>
+0xAFB8	0x7AD9	# <CJK>
+0xAFB9	0x7B06	# <CJK>
+0xAFBA	0x7B11	# <CJK>
+0xAFBB	0x7C89	# <CJK>
+0xAFBC	0x7D21	# <CJK>
+0xAFBD	0x7D17	# <CJK>
+0xAFBE	0x7D0B	# <CJK>
+0xAFBF	0x7D0A	# <CJK>
+0xAFC0	0x7D20	# <CJK>
+0xAFC1	0x7D22	# <CJK>
+0xAFC2	0x7D14	# <CJK>
+0xAFC3	0x7D10	# <CJK>
+0xAFC4	0x7D15	# <CJK>
+0xAFC5	0x7D1A	# <CJK>
+0xAFC6	0x7D1C	# <CJK>
+0xAFC7	0x7D0D	# <CJK>
+0xAFC8	0x7D19	# <CJK>
+0xAFC9	0x7D1B	# <CJK>
+0xAFCA	0x7F3A	# <CJK>
+0xAFCB	0x7F5F	# <CJK>
+0xAFCC	0x7F94	# <CJK>
+0xAFCD	0x7FC5	# <CJK>
+0xAFCE	0x7FC1	# <CJK>
+0xAFCF	0x8006	# <CJK>
+0xAFD0	0x8018	# <CJK>
+0xAFD1	0x8015	# <CJK>
+0xAFD2	0x8019	# <CJK>
+0xAFD3	0x8017	# <CJK>
+0xAFD4	0x803D	# <CJK>
+0xAFD5	0x803F	# <CJK>
+0xAFD6	0x80F1	# <CJK>
+0xAFD7	0x8102	# <CJK>
+0xAFD8	0x80F0	# <CJK>
+0xAFD9	0x8105	# <CJK>
+0xAFDA	0x80ED	# <CJK>
+0xAFDB	0x80F4	# <CJK>
+0xAFDC	0x8106	# <CJK>
+0xAFDD	0x80F8	# <CJK>
+0xAFDE	0x80F3	# <CJK>
+0xAFDF	0x8108	# <CJK>
+0xAFE0	0x80FD	# <CJK>
+0xAFE1	0x810A	# <CJK>
+0xAFE2	0x80FC	# <CJK>
+0xAFE3	0x80EF	# <CJK>
+0xAFE4	0x81ED	# <CJK>
+0xAFE5	0x81EC	# <CJK>
+0xAFE6	0x8200	# <CJK>
+0xAFE7	0x8210	# <CJK>
+0xAFE8	0x822A	# <CJK>
+0xAFE9	0x822B	# <CJK>
+0xAFEA	0x8228	# <CJK>
+0xAFEB	0x822C	# <CJK>
+0xAFEC	0x82BB	# <CJK>
+0xAFED	0x832B	# <CJK>
+0xAFEE	0x8352	# <CJK>
+0xAFEF	0x8354	# <CJK>
+0xAFF0	0x834A	# <CJK>
+0xAFF1	0x8338	# <CJK>
+0xAFF2	0x8350	# <CJK>
+0xAFF3	0x8349	# <CJK>
+0xAFF4	0x8335	# <CJK>
+0xAFF5	0x8334	# <CJK>
+0xAFF6	0x834F	# <CJK>
+0xAFF7	0x8332	# <CJK>
+0xAFF8	0x8339	# <CJK>
+0xAFF9	0x8336	# <CJK>
+0xAFFA	0x8317	# <CJK>
+0xAFFB	0x8340	# <CJK>
+0xAFFC	0x8331	# <CJK>
+0xAFFD	0x8328	# <CJK>
+0xAFFE	0x8343	# <CJK>
+0xB040	0x8654	# <CJK>
+0xB041	0x868A	# <CJK>
+0xB042	0x86AA	# <CJK>
+0xB043	0x8693	# <CJK>
+0xB044	0x86A4	# <CJK>
+0xB045	0x86A9	# <CJK>
+0xB046	0x868C	# <CJK>
+0xB047	0x86A3	# <CJK>
+0xB048	0x869C	# <CJK>
+0xB049	0x8870	# <CJK>
+0xB04A	0x8877	# <CJK>
+0xB04B	0x8881	# <CJK>
+0xB04C	0x8882	# <CJK>
+0xB04D	0x887D	# <CJK>
+0xB04E	0x8879	# <CJK>
+0xB04F	0x8A18	# <CJK>
+0xB050	0x8A10	# <CJK>
+0xB051	0x8A0E	# <CJK>
+0xB052	0x8A0C	# <CJK>
+0xB053	0x8A15	# <CJK>
+0xB054	0x8A0A	# <CJK>
+0xB055	0x8A17	# <CJK>
+0xB056	0x8A13	# <CJK>
+0xB057	0x8A16	# <CJK>
+0xB058	0x8A0F	# <CJK>
+0xB059	0x8A11	# <CJK>
+0xB05A	0x8C48	# <CJK>
+0xB05B	0x8C7A	# <CJK>
+0xB05C	0x8C79	# <CJK>
+0xB05D	0x8CA1	# <CJK>
+0xB05E	0x8CA2	# <CJK>
+0xB05F	0x8D77	# <CJK>
+0xB060	0x8EAC	# <CJK>
+0xB061	0x8ED2	# <CJK>
+0xB062	0x8ED4	# <CJK>
+0xB063	0x8ECF	# <CJK>
+0xB064	0x8FB1	# <CJK>
+0xB065	0x9001	# <CJK>
+0xB066	0x9006	# <CJK>
+0xB067	0x8FF7	# <CJK>
+0xB068	0x9000	# <CJK>
+0xB069	0x8FFA	# <CJK>
+0xB06A	0x8FF4	# <CJK>
+0xB06B	0x9003	# <CJK>
+0xB06C	0x8FFD	# <CJK>
+0xB06D	0x9005	# <CJK>
+0xB06E	0x8FF8	# <CJK>
+0xB06F	0x9095	# <CJK>
+0xB070	0x90E1	# <CJK>
+0xB071	0x90DD	# <CJK>
+0xB072	0x90E2	# <CJK>
+0xB073	0x9152	# <CJK>
+0xB074	0x914D	# <CJK>
+0xB075	0x914C	# <CJK>
+0xB076	0x91D8	# <CJK>
+0xB077	0x91DD	# <CJK>
+0xB078	0x91D7	# <CJK>
+0xB079	0x91DC	# <CJK>
+0xB07A	0x91D9	# <CJK>
+0xB07B	0x9583	# <CJK>
+0xB07C	0x9662	# <CJK>
+0xB07D	0x9663	# <CJK>
+0xB07E	0x9661	# <CJK>
+0xB0A1	0x965B	# <CJK>
+0xB0A2	0x965D	# <CJK>
+0xB0A3	0x9664	# <CJK>
+0xB0A4	0x9658	# <CJK>
+0xB0A5	0x965E	# <CJK>
+0xB0A6	0x96BB	# <CJK>
+0xB0A7	0x98E2	# <CJK>
+0xB0A8	0x99AC	# <CJK>
+0xB0A9	0x9AA8	# <CJK>
+0xB0AA	0x9AD8	# <CJK>
+0xB0AB	0x9B25	# <CJK>
+0xB0AC	0x9B32	# <CJK>
+0xB0AD	0x9B3C	# <CJK>
+0xB0AE	0x4E7E	# <CJK>
+0xB0AF	0x507A	# <CJK>
+0xB0B0	0x507D	# <CJK>
+0xB0B1	0x505C	# <CJK>
+0xB0B2	0x5047	# <CJK>
+0xB0B3	0x5043	# <CJK>
+0xB0B4	0x504C	# <CJK>
+0xB0B5	0x505A	# <CJK>
+0xB0B6	0x5049	# <CJK>
+0xB0B7	0x5065	# <CJK>
+0xB0B8	0x5076	# <CJK>
+0xB0B9	0x504E	# <CJK>
+0xB0BA	0x5055	# <CJK>
+0xB0BB	0x5075	# <CJK>
+0xB0BC	0x5074	# <CJK>
+0xB0BD	0x5077	# <CJK>
+0xB0BE	0x504F	# <CJK>
+0xB0BF	0x500F	# <CJK>
+0xB0C0	0x506F	# <CJK>
+0xB0C1	0x506D	# <CJK>
+0xB0C2	0x515C	# <CJK>
+0xB0C3	0x5195	# <CJK>
+0xB0C4	0x51F0	# <CJK>
+0xB0C5	0x526A	# <CJK>
+0xB0C6	0x526F	# <CJK>
+0xB0C7	0x52D2	# <CJK>
+0xB0C8	0x52D9	# <CJK>
+0xB0C9	0x52D8	# <CJK>
+0xB0CA	0x52D5	# <CJK>
+0xB0CB	0x5310	# <CJK>
+0xB0CC	0x530F	# <CJK>
+0xB0CD	0x5319	# <CJK>
+0xB0CE	0x533F	# <CJK>
+0xB0CF	0x5340	# <CJK>
+0xB0D0	0x533E	# <CJK>
+0xB0D1	0x53C3	# <CJK>
+0xB0D2	0x66FC	# <CJK>
+0xB0D3	0x5546	# <CJK>
+0xB0D4	0x556A	# <CJK>
+0xB0D5	0x5566	# <CJK>
+0xB0D6	0x5544	# <CJK>
+0xB0D7	0x555E	# <CJK>
+0xB0D8	0x5561	# <CJK>
+0xB0D9	0x5543	# <CJK>
+0xB0DA	0x554A	# <CJK>
+0xB0DB	0x5531	# <CJK>
+0xB0DC	0x5556	# <CJK>
+0xB0DD	0x554F	# <CJK>
+0xB0DE	0x5555	# <CJK>
+0xB0DF	0x552F	# <CJK>
+0xB0E0	0x5564	# <CJK>
+0xB0E1	0x5538	# <CJK>
+0xB0E2	0x552E	# <CJK>
+0xB0E3	0x555C	# <CJK>
+0xB0E4	0x552C	# <CJK>
+0xB0E5	0x5563	# <CJK>
+0xB0E6	0x5533	# <CJK>
+0xB0E7	0x5541	# <CJK>
+0xB0E8	0x5557	# <CJK>
+0xB0E9	0x5708	# <CJK>
+0xB0EA	0x570B	# <CJK>
+0xB0EB	0x5709	# <CJK>
+0xB0EC	0x57DF	# <CJK>
+0xB0ED	0x5805	# <CJK>
+0xB0EE	0x580A	# <CJK>
+0xB0EF	0x5806	# <CJK>
+0xB0F0	0x57E0	# <CJK>
+0xB0F1	0x57E4	# <CJK>
+0xB0F2	0x57FA	# <CJK>
+0xB0F3	0x5802	# <CJK>
+0xB0F4	0x5835	# <CJK>
+0xB0F5	0x57F7	# <CJK>
+0xB0F6	0x57F9	# <CJK>
+0xB0F7	0x5920	# <CJK>
+0xB0F8	0x5962	# <CJK>
+0xB0F9	0x5A36	# <CJK>
+0xB0FA	0x5A41	# <CJK>
+0xB0FB	0x5A49	# <CJK>
+0xB0FC	0x5A66	# <CJK>
+0xB0FD	0x5A6A	# <CJK>
+0xB0FE	0x5A40	# <CJK>
+0xB140	0x5A3C	# <CJK>
+0xB141	0x5A62	# <CJK>
+0xB142	0x5A5A	# <CJK>
+0xB143	0x5A46	# <CJK>
+0xB144	0x5A4A	# <CJK>
+0xB145	0x5B70	# <CJK>
+0xB146	0x5BC7	# <CJK>
+0xB147	0x5BC5	# <CJK>
+0xB148	0x5BC4	# <CJK>
+0xB149	0x5BC2	# <CJK>
+0xB14A	0x5BBF	# <CJK>
+0xB14B	0x5BC6	# <CJK>
+0xB14C	0x5C09	# <CJK>
+0xB14D	0x5C08	# <CJK>
+0xB14E	0x5C07	# <CJK>
+0xB14F	0x5C60	# <CJK>
+0xB150	0x5C5C	# <CJK>
+0xB151	0x5C5D	# <CJK>
+0xB152	0x5D07	# <CJK>
+0xB153	0x5D06	# <CJK>
+0xB154	0x5D0E	# <CJK>
+0xB155	0x5D1B	# <CJK>
+0xB156	0x5D16	# <CJK>
+0xB157	0x5D22	# <CJK>
+0xB158	0x5D11	# <CJK>
+0xB159	0x5D29	# <CJK>
+0xB15A	0x5D14	# <CJK>
+0xB15B	0x5D19	# <CJK>
+0xB15C	0x5D24	# <CJK>
+0xB15D	0x5D27	# <CJK>
+0xB15E	0x5D17	# <CJK>
+0xB15F	0x5DE2	# <CJK>
+0xB160	0x5E38	# <CJK>
+0xB161	0x5E36	# <CJK>
+0xB162	0x5E33	# <CJK>
+0xB163	0x5E37	# <CJK>
+0xB164	0x5EB7	# <CJK>
+0xB165	0x5EB8	# <CJK>
+0xB166	0x5EB6	# <CJK>
+0xB167	0x5EB5	# <CJK>
+0xB168	0x5EBE	# <CJK>
+0xB169	0x5F35	# <CJK>
+0xB16A	0x5F37	# <CJK>
+0xB16B	0x5F57	# <CJK>
+0xB16C	0x5F6C	# <CJK>
+0xB16D	0x5F69	# <CJK>
+0xB16E	0x5F6B	# <CJK>
+0xB16F	0x5F97	# <CJK>
+0xB170	0x5F99	# <CJK>
+0xB171	0x5F9E	# <CJK>
+0xB172	0x5F98	# <CJK>
+0xB173	0x5FA1	# <CJK>
+0xB174	0x5FA0	# <CJK>
+0xB175	0x5F9C	# <CJK>
+0xB176	0x607F	# <CJK>
+0xB177	0x60A3	# <CJK>
+0xB178	0x6089	# <CJK>
+0xB179	0x60A0	# <CJK>
+0xB17A	0x60A8	# <CJK>
+0xB17B	0x60CB	# <CJK>
+0xB17C	0x60B4	# <CJK>
+0xB17D	0x60E6	# <CJK>
+0xB17E	0x60BD	# <CJK>
+0xB1A1	0x60C5	# <CJK>
+0xB1A2	0x60BB	# <CJK>
+0xB1A3	0x60B5	# <CJK>
+0xB1A4	0x60DC	# <CJK>
+0xB1A5	0x60BC	# <CJK>
+0xB1A6	0x60D8	# <CJK>
+0xB1A7	0x60D5	# <CJK>
+0xB1A8	0x60C6	# <CJK>
+0xB1A9	0x60DF	# <CJK>
+0xB1AA	0x60B8	# <CJK>
+0xB1AB	0x60DA	# <CJK>
+0xB1AC	0x60C7	# <CJK>
+0xB1AD	0x621A	# <CJK>
+0xB1AE	0x621B	# <CJK>
+0xB1AF	0x6248	# <CJK>
+0xB1B0	0x63A0	# <CJK>
+0xB1B1	0x63A7	# <CJK>
+0xB1B2	0x6372	# <CJK>
+0xB1B3	0x6396	# <CJK>
+0xB1B4	0x63A2	# <CJK>
+0xB1B5	0x63A5	# <CJK>
+0xB1B6	0x6377	# <CJK>
+0xB1B7	0x6367	# <CJK>
+0xB1B8	0x6398	# <CJK>
+0xB1B9	0x63AA	# <CJK>
+0xB1BA	0x6371	# <CJK>
+0xB1BB	0x63A9	# <CJK>
+0xB1BC	0x6389	# <CJK>
+0xB1BD	0x6383	# <CJK>
+0xB1BE	0x639B	# <CJK>
+0xB1BF	0x636B	# <CJK>
+0xB1C0	0x63A8	# <CJK>
+0xB1C1	0x6384	# <CJK>
+0xB1C2	0x6388	# <CJK>
+0xB1C3	0x6399	# <CJK>
+0xB1C4	0x63A1	# <CJK>
+0xB1C5	0x63AC	# <CJK>
+0xB1C6	0x6392	# <CJK>
+0xB1C7	0x638F	# <CJK>
+0xB1C8	0x6380	# <CJK>
+0xB1C9	0x637B	# <CJK>
+0xB1CA	0x6369	# <CJK>
+0xB1CB	0x6368	# <CJK>
+0xB1CC	0x637A	# <CJK>
+0xB1CD	0x655D	# <CJK>
+0xB1CE	0x6556	# <CJK>
+0xB1CF	0x6551	# <CJK>
+0xB1D0	0x6559	# <CJK>
+0xB1D1	0x6557	# <CJK>
+0xB1D2	0x555F	# <CJK>
+0xB1D3	0x654F	# <CJK>
+0xB1D4	0x6558	# <CJK>
+0xB1D5	0x6555	# <CJK>
+0xB1D6	0x6554	# <CJK>
+0xB1D7	0x659C	# <CJK>
+0xB1D8	0x659B	# <CJK>
+0xB1D9	0x65AC	# <CJK>
+0xB1DA	0x65CF	# <CJK>
+0xB1DB	0x65CB	# <CJK>
+0xB1DC	0x65CC	# <CJK>
+0xB1DD	0x65CE	# <CJK>
+0xB1DE	0x665D	# <CJK>
+0xB1DF	0x665A	# <CJK>
+0xB1E0	0x6664	# <CJK>
+0xB1E1	0x6668	# <CJK>
+0xB1E2	0x6666	# <CJK>
+0xB1E3	0x665E	# <CJK>
+0xB1E4	0x66F9	# <CJK>
+0xB1E5	0x52D7	# <CJK>
+0xB1E6	0x671B	# <CJK>
+0xB1E7	0x6881	# <CJK>
+0xB1E8	0x68AF	# <CJK>
+0xB1E9	0x68A2	# <CJK>
+0xB1EA	0x6893	# <CJK>
+0xB1EB	0x68B5	# <CJK>
+0xB1EC	0x687F	# <CJK>
+0xB1ED	0x6876	# <CJK>
+0xB1EE	0x68B1	# <CJK>
+0xB1EF	0x68A7	# <CJK>
+0xB1F0	0x6897	# <CJK>
+0xB1F1	0x68B0	# <CJK>
+0xB1F2	0x6883	# <CJK>
+0xB1F3	0x68C4	# <CJK>
+0xB1F4	0x68AD	# <CJK>
+0xB1F5	0x6886	# <CJK>
+0xB1F6	0x6885	# <CJK>
+0xB1F7	0x6894	# <CJK>
+0xB1F8	0x689D	# <CJK>
+0xB1F9	0x68A8	# <CJK>
+0xB1FA	0x689F	# <CJK>
+0xB1FB	0x68A1	# <CJK>
+0xB1FC	0x6882	# <CJK>
+0xB1FD	0x6B32	# <CJK>
+0xB1FE	0x6BBA	# <CJK>
+0xB240	0x6BEB	# <CJK>
+0xB241	0x6BEC	# <CJK>
+0xB242	0x6C2B	# <CJK>
+0xB243	0x6D8E	# <CJK>
+0xB244	0x6DBC	# <CJK>
+0xB245	0x6DF3	# <CJK>
+0xB246	0x6DD9	# <CJK>
+0xB247	0x6DB2	# <CJK>
+0xB248	0x6DE1	# <CJK>
+0xB249	0x6DCC	# <CJK>
+0xB24A	0x6DE4	# <CJK>
+0xB24B	0x6DFB	# <CJK>
+0xB24C	0x6DFA	# <CJK>
+0xB24D	0x6E05	# <CJK>
+0xB24E	0x6DC7	# <CJK>
+0xB24F	0x6DCB	# <CJK>
+0xB250	0x6DAF	# <CJK>
+0xB251	0x6DD1	# <CJK>
+0xB252	0x6DAE	# <CJK>
+0xB253	0x6DDE	# <CJK>
+0xB254	0x6DF9	# <CJK>
+0xB255	0x6DB8	# <CJK>
+0xB256	0x6DF7	# <CJK>
+0xB257	0x6DF5	# <CJK>
+0xB258	0x6DC5	# <CJK>
+0xB259	0x6DD2	# <CJK>
+0xB25A	0x6E1A	# <CJK>
+0xB25B	0x6DB5	# <CJK>
+0xB25C	0x6DDA	# <CJK>
+0xB25D	0x6DEB	# <CJK>
+0xB25E	0x6DD8	# <CJK>
+0xB25F	0x6DEA	# <CJK>
+0xB260	0x6DF1	# <CJK>
+0xB261	0x6DEE	# <CJK>
+0xB262	0x6DE8	# <CJK>
+0xB263	0x6DC6	# <CJK>
+0xB264	0x6DC4	# <CJK>
+0xB265	0x6DAA	# <CJK>
+0xB266	0x6DEC	# <CJK>
+0xB267	0x6DBF	# <CJK>
+0xB268	0x6DE6	# <CJK>
+0xB269	0x70F9	# <CJK>
+0xB26A	0x7109	# <CJK>
+0xB26B	0x710A	# <CJK>
+0xB26C	0x70FD	# <CJK>
+0xB26D	0x70EF	# <CJK>
+0xB26E	0x723D	# <CJK>
+0xB26F	0x727D	# <CJK>
+0xB270	0x7281	# <CJK>
+0xB271	0x731C	# <CJK>
+0xB272	0x731B	# <CJK>
+0xB273	0x7316	# <CJK>
+0xB274	0x7313	# <CJK>
+0xB275	0x7319	# <CJK>
+0xB276	0x7387	# <CJK>
+0xB277	0x7405	# <CJK>
+0xB278	0x740A	# <CJK>
+0xB279	0x7403	# <CJK>
+0xB27A	0x7406	# <CJK>
+0xB27B	0x73FE	# <CJK>
+0xB27C	0x740D	# <CJK>
+0xB27D	0x74E0	# <CJK>
+0xB27E	0x74F6	# <CJK>
+0xB2A1	0x74F7	# <CJK>
+0xB2A2	0x751C	# <CJK>
+0xB2A3	0x7522	# <CJK>
+0xB2A4	0x7565	# <CJK>
+0xB2A5	0x7566	# <CJK>
+0xB2A6	0x7562	# <CJK>
+0xB2A7	0x7570	# <CJK>
+0xB2A8	0x758F	# <CJK>
+0xB2A9	0x75D4	# <CJK>
+0xB2AA	0x75D5	# <CJK>
+0xB2AB	0x75B5	# <CJK>
+0xB2AC	0x75CA	# <CJK>
+0xB2AD	0x75CD	# <CJK>
+0xB2AE	0x768E	# <CJK>
+0xB2AF	0x76D4	# <CJK>
+0xB2B0	0x76D2	# <CJK>
+0xB2B1	0x76DB	# <CJK>
+0xB2B2	0x7737	# <CJK>
+0xB2B3	0x773E	# <CJK>
+0xB2B4	0x773C	# <CJK>
+0xB2B5	0x7736	# <CJK>
+0xB2B6	0x7738	# <CJK>
+0xB2B7	0x773A	# <CJK>
+0xB2B8	0x786B	# <CJK>
+0xB2B9	0x7843	# <CJK>
+0xB2BA	0x784E	# <CJK>
+0xB2BB	0x7965	# <CJK>
+0xB2BC	0x7968	# <CJK>
+0xB2BD	0x796D	# <CJK>
+0xB2BE	0x79FB	# <CJK>
+0xB2BF	0x7A92	# <CJK>
+0xB2C0	0x7A95	# <CJK>
+0xB2C1	0x7B20	# <CJK>
+0xB2C2	0x7B28	# <CJK>
+0xB2C3	0x7B1B	# <CJK>
+0xB2C4	0x7B2C	# <CJK>
+0xB2C5	0x7B26	# <CJK>
+0xB2C6	0x7B19	# <CJK>
+0xB2C7	0x7B1E	# <CJK>
+0xB2C8	0x7B2E	# <CJK>
+0xB2C9	0x7C92	# <CJK>
+0xB2CA	0x7C97	# <CJK>
+0xB2CB	0x7C95	# <CJK>
+0xB2CC	0x7D46	# <CJK>
+0xB2CD	0x7D43	# <CJK>
+0xB2CE	0x7D71	# <CJK>
+0xB2CF	0x7D2E	# <CJK>
+0xB2D0	0x7D39	# <CJK>
+0xB2D1	0x7D3C	# <CJK>
+0xB2D2	0x7D40	# <CJK>
+0xB2D3	0x7D30	# <CJK>
+0xB2D4	0x7D33	# <CJK>
+0xB2D5	0x7D44	# <CJK>
+0xB2D6	0x7D2F	# <CJK>
+0xB2D7	0x7D42	# <CJK>
+0xB2D8	0x7D32	# <CJK>
+0xB2D9	0x7D31	# <CJK>
+0xB2DA	0x7F3D	# <CJK>
+0xB2DB	0x7F9E	# <CJK>
+0xB2DC	0x7F9A	# <CJK>
+0xB2DD	0x7FCC	# <CJK>
+0xB2DE	0x7FCE	# <CJK>
+0xB2DF	0x7FD2	# <CJK>
+0xB2E0	0x801C	# <CJK>
+0xB2E1	0x804A	# <CJK>
+0xB2E2	0x8046	# <CJK>
+0xB2E3	0x812F	# <CJK>
+0xB2E4	0x8116	# <CJK>
+0xB2E5	0x8123	# <CJK>
+0xB2E6	0x812B	# <CJK>
+0xB2E7	0x8129	# <CJK>
+0xB2E8	0x8130	# <CJK>
+0xB2E9	0x8124	# <CJK>
+0xB2EA	0x8202	# <CJK>
+0xB2EB	0x8235	# <CJK>
+0xB2EC	0x8237	# <CJK>
+0xB2ED	0x8236	# <CJK>
+0xB2EE	0x8239	# <CJK>
+0xB2EF	0x838E	# <CJK>
+0xB2F0	0x839E	# <CJK>
+0xB2F1	0x8398	# <CJK>
+0xB2F2	0x8378	# <CJK>
+0xB2F3	0x83A2	# <CJK>
+0xB2F4	0x8396	# <CJK>
+0xB2F5	0x83BD	# <CJK>
+0xB2F6	0x83AB	# <CJK>
+0xB2F7	0x8392	# <CJK>
+0xB2F8	0x838A	# <CJK>
+0xB2F9	0x8393	# <CJK>
+0xB2FA	0x8389	# <CJK>
+0xB2FB	0x83A0	# <CJK>
+0xB2FC	0x8377	# <CJK>
+0xB2FD	0x837B	# <CJK>
+0xB2FE	0x837C	# <CJK>
+0xB340	0x8386	# <CJK>
+0xB341	0x83A7	# <CJK>
+0xB342	0x8655	# <CJK>
+0xB343	0x5F6A	# <CJK>
+0xB344	0x86C7	# <CJK>
+0xB345	0x86C0	# <CJK>
+0xB346	0x86B6	# <CJK>
+0xB347	0x86C4	# <CJK>
+0xB348	0x86B5	# <CJK>
+0xB349	0x86C6	# <CJK>
+0xB34A	0x86CB	# <CJK>
+0xB34B	0x86B1	# <CJK>
+0xB34C	0x86AF	# <CJK>
+0xB34D	0x86C9	# <CJK>
+0xB34E	0x8853	# <CJK>
+0xB34F	0x889E	# <CJK>
+0xB350	0x8888	# <CJK>
+0xB351	0x88AB	# <CJK>
+0xB352	0x8892	# <CJK>
+0xB353	0x8896	# <CJK>
+0xB354	0x888D	# <CJK>
+0xB355	0x888B	# <CJK>
+0xB356	0x8993	# <CJK>
+0xB357	0x898F	# <CJK>
+0xB358	0x8A2A	# <CJK>
+0xB359	0x8A1D	# <CJK>
+0xB35A	0x8A23	# <CJK>
+0xB35B	0x8A25	# <CJK>
+0xB35C	0x8A31	# <CJK>
+0xB35D	0x8A2D	# <CJK>
+0xB35E	0x8A1F	# <CJK>
+0xB35F	0x8A1B	# <CJK>
+0xB360	0x8A22	# <CJK>
+0xB361	0x8C49	# <CJK>
+0xB362	0x8C5A	# <CJK>
+0xB363	0x8CA9	# <CJK>
+0xB364	0x8CAC	# <CJK>
+0xB365	0x8CAB	# <CJK>
+0xB366	0x8CA8	# <CJK>
+0xB367	0x8CAA	# <CJK>
+0xB368	0x8CA7	# <CJK>
+0xB369	0x8D67	# <CJK>
+0xB36A	0x8D66	# <CJK>
+0xB36B	0x8DBE	# <CJK>
+0xB36C	0x8DBA	# <CJK>
+0xB36D	0x8EDB	# <CJK>
+0xB36E	0x8EDF	# <CJK>
+0xB36F	0x9019	# <CJK>
+0xB370	0x900D	# <CJK>
+0xB371	0x901A	# <CJK>
+0xB372	0x9017	# <CJK>
+0xB373	0x9023	# <CJK>
+0xB374	0x901F	# <CJK>
+0xB375	0x901D	# <CJK>
+0xB376	0x9010	# <CJK>
+0xB377	0x9015	# <CJK>
+0xB378	0x901E	# <CJK>
+0xB379	0x9020	# <CJK>
+0xB37A	0x900F	# <CJK>
+0xB37B	0x9022	# <CJK>
+0xB37C	0x9016	# <CJK>
+0xB37D	0x901B	# <CJK>
+0xB37E	0x9014	# <CJK>
+0xB3A1	0x90E8	# <CJK>
+0xB3A2	0x90ED	# <CJK>
+0xB3A3	0x90FD	# <CJK>
+0xB3A4	0x9157	# <CJK>
+0xB3A5	0x91CE	# <CJK>
+0xB3A6	0x91F5	# <CJK>
+0xB3A7	0x91E6	# <CJK>
+0xB3A8	0x91E3	# <CJK>
+0xB3A9	0x91E7	# <CJK>
+0xB3AA	0x91ED	# <CJK>
+0xB3AB	0x91E9	# <CJK>
+0xB3AC	0x9589	# <CJK>
+0xB3AD	0x966A	# <CJK>
+0xB3AE	0x9675	# <CJK>
+0xB3AF	0x9673	# <CJK>
+0xB3B0	0x9678	# <CJK>
+0xB3B1	0x9670	# <CJK>
+0xB3B2	0x9674	# <CJK>
+0xB3B3	0x9676	# <CJK>
+0xB3B4	0x9677	# <CJK>
+0xB3B5	0x966C	# <CJK>
+0xB3B6	0x96C0	# <CJK>
+0xB3B7	0x96EA	# <CJK>
+0xB3B8	0x96E9	# <CJK>
+0xB3B9	0x7AE0	# <CJK>
+0xB3BA	0x7ADF	# <CJK>
+0xB3BB	0x9802	# <CJK>
+0xB3BC	0x9803	# <CJK>
+0xB3BD	0x9B5A	# <CJK>
+0xB3BE	0x9CE5	# <CJK>
+0xB3BF	0x9E75	# <CJK>
+0xB3C0	0x9E7F	# <CJK>
+0xB3C1	0x9EA5	# <CJK>
+0xB3C2	0x9EBB	# <CJK>
+0xB3C3	0x50A2	# <CJK>
+0xB3C4	0x508D	# <CJK>
+0xB3C5	0x5085	# <CJK>
+0xB3C6	0x5099	# <CJK>
+0xB3C7	0x5091	# <CJK>
+0xB3C8	0x5080	# <CJK>
+0xB3C9	0x5096	# <CJK>
+0xB3CA	0x5098	# <CJK>
+0xB3CB	0x509A	# <CJK>
+0xB3CC	0x6700	# <CJK>
+0xB3CD	0x51F1	# <CJK>
+0xB3CE	0x5272	# <CJK>
+0xB3CF	0x5274	# <CJK>
+0xB3D0	0x5275	# <CJK>
+0xB3D1	0x5269	# <CJK>
+0xB3D2	0x52DE	# <CJK>
+0xB3D3	0x52DD	# <CJK>
+0xB3D4	0x52DB	# <CJK>
+0xB3D5	0x535A	# <CJK>
+0xB3D6	0x53A5	# <CJK>
+0xB3D7	0x557B	# <CJK>
+0xB3D8	0x5580	# <CJK>
+0xB3D9	0x55A7	# <CJK>
+0xB3DA	0x557C	# <CJK>
+0xB3DB	0x558A	# <CJK>
+0xB3DC	0x559D	# <CJK>
+0xB3DD	0x5598	# <CJK>
+0xB3DE	0x5582	# <CJK>
+0xB3DF	0x559C	# <CJK>
+0xB3E0	0x55AA	# <CJK>
+0xB3E1	0x5594	# <CJK>
+0xB3E2	0x5587	# <CJK>
+0xB3E3	0x558B	# <CJK>
+0xB3E4	0x5583	# <CJK>
+0xB3E5	0x55B3	# <CJK>
+0xB3E6	0x55AE	# <CJK>
+0xB3E7	0x559F	# <CJK>
+0xB3E8	0x553E	# <CJK>
+0xB3E9	0x55B2	# <CJK>
+0xB3EA	0x559A	# <CJK>
+0xB3EB	0x55BB	# <CJK>
+0xB3EC	0x55AC	# <CJK>
+0xB3ED	0x55B1	# <CJK>
+0xB3EE	0x557E	# <CJK>
+0xB3EF	0x5589	# <CJK>
+0xB3F0	0x55AB	# <CJK>
+0xB3F1	0x5599	# <CJK>
+0xB3F2	0x570D	# <CJK>
+0xB3F3	0x582F	# <CJK>
+0xB3F4	0x582A	# <CJK>
+0xB3F5	0x5834	# <CJK>
+0xB3F6	0x5824	# <CJK>
+0xB3F7	0x5830	# <CJK>
+0xB3F8	0x5831	# <CJK>
+0xB3F9	0x5821	# <CJK>
+0xB3FA	0x581D	# <CJK>
+0xB3FB	0x5820	# <CJK>
+0xB3FC	0x58F9	# <CJK>
+0xB3FD	0x58FA	# <CJK>
+0xB3FE	0x5960	# <CJK>
+0xB440	0x5A77	# <CJK>
+0xB441	0x5A9A	# <CJK>
+0xB442	0x5A7F	# <CJK>
+0xB443	0x5A92	# <CJK>
+0xB444	0x5A9B	# <CJK>
+0xB445	0x5AA7	# <CJK>
+0xB446	0x5B73	# <CJK>
+0xB447	0x5B71	# <CJK>
+0xB448	0x5BD2	# <CJK>
+0xB449	0x5BCC	# <CJK>
+0xB44A	0x5BD3	# <CJK>
+0xB44B	0x5BD0	# <CJK>
+0xB44C	0x5C0A	# <CJK>
+0xB44D	0x5C0B	# <CJK>
+0xB44E	0x5C31	# <CJK>
+0xB44F	0x5D4C	# <CJK>
+0xB450	0x5D50	# <CJK>
+0xB451	0x5D34	# <CJK>
+0xB452	0x5D47	# <CJK>
+0xB453	0x5DFD	# <CJK>
+0xB454	0x5E45	# <CJK>
+0xB455	0x5E3D	# <CJK>
+0xB456	0x5E40	# <CJK>
+0xB457	0x5E43	# <CJK>
+0xB458	0x5E7E	# <CJK>
+0xB459	0x5ECA	# <CJK>
+0xB45A	0x5EC1	# <CJK>
+0xB45B	0x5EC2	# <CJK>
+0xB45C	0x5EC4	# <CJK>
+0xB45D	0x5F3C	# <CJK>
+0xB45E	0x5F6D	# <CJK>
+0xB45F	0x5FA9	# <CJK>
+0xB460	0x5FAA	# <CJK>
+0xB461	0x5FA8	# <CJK>
+0xB462	0x60D1	# <CJK>
+0xB463	0x60E1	# <CJK>
+0xB464	0x60B2	# <CJK>
+0xB465	0x60B6	# <CJK>
+0xB466	0x60E0	# <CJK>
+0xB467	0x611C	# <CJK>
+0xB468	0x6123	# <CJK>
+0xB469	0x60FA	# <CJK>
+0xB46A	0x6115	# <CJK>
+0xB46B	0x60F0	# <CJK>
+0xB46C	0x60FB	# <CJK>
+0xB46D	0x60F4	# <CJK>
+0xB46E	0x6168	# <CJK>
+0xB46F	0x60F1	# <CJK>
+0xB470	0x610E	# <CJK>
+0xB471	0x60F6	# <CJK>
+0xB472	0x6109	# <CJK>
+0xB473	0x6100	# <CJK>
+0xB474	0x6112	# <CJK>
+0xB475	0x621F	# <CJK>
+0xB476	0x6249	# <CJK>
+0xB477	0x63A3	# <CJK>
+0xB478	0x638C	# <CJK>
+0xB479	0x63CF	# <CJK>
+0xB47A	0x63C0	# <CJK>
+0xB47B	0x63E9	# <CJK>
+0xB47C	0x63C9	# <CJK>
+0xB47D	0x63C6	# <CJK>
+0xB47E	0x63CD	# <CJK>
+0xB4A1	0x63D2	# <CJK>
+0xB4A2	0x63E3	# <CJK>
+0xB4A3	0x63D0	# <CJK>
+0xB4A4	0x63E1	# <CJK>
+0xB4A5	0x63D6	# <CJK>
+0xB4A6	0x63ED	# <CJK>
+0xB4A7	0x63EE	# <CJK>
+0xB4A8	0x6376	# <CJK>
+0xB4A9	0x63F4	# <CJK>
+0xB4AA	0x63EA	# <CJK>
+0xB4AB	0x63DB	# <CJK>
+0xB4AC	0x6452	# <CJK>
+0xB4AD	0x63DA	# <CJK>
+0xB4AE	0x63F9	# <CJK>
+0xB4AF	0x655E	# <CJK>
+0xB4B0	0x6566	# <CJK>
+0xB4B1	0x6562	# <CJK>
+0xB4B2	0x6563	# <CJK>
+0xB4B3	0x6591	# <CJK>
+0xB4B4	0x6590	# <CJK>
+0xB4B5	0x65AF	# <CJK>
+0xB4B6	0x666E	# <CJK>
+0xB4B7	0x6670	# <CJK>
+0xB4B8	0x6674	# <CJK>
+0xB4B9	0x6676	# <CJK>
+0xB4BA	0x666F	# <CJK>
+0xB4BB	0x6691	# <CJK>
+0xB4BC	0x667A	# <CJK>
+0xB4BD	0x667E	# <CJK>
+0xB4BE	0x6677	# <CJK>
+0xB4BF	0x66FE	# <CJK>
+0xB4C0	0x66FF	# <CJK>
+0xB4C1	0x671F	# <CJK>
+0xB4C2	0x671D	# <CJK>
+0xB4C3	0x68FA	# <CJK>
+0xB4C4	0x68D5	# <CJK>
+0xB4C5	0x68E0	# <CJK>
+0xB4C6	0x68D8	# <CJK>
+0xB4C7	0x68D7	# <CJK>
+0xB4C8	0x6905	# <CJK>
+0xB4C9	0x68DF	# <CJK>
+0xB4CA	0x68F5	# <CJK>
+0xB4CB	0x68EE	# <CJK>
+0xB4CC	0x68E7	# <CJK>
+0xB4CD	0x68F9	# <CJK>
+0xB4CE	0x68D2	# <CJK>
+0xB4CF	0x68F2	# <CJK>
+0xB4D0	0x68E3	# <CJK>
+0xB4D1	0x68CB	# <CJK>
+0xB4D2	0x68CD	# <CJK>
+0xB4D3	0x690D	# <CJK>
+0xB4D4	0x6912	# <CJK>
+0xB4D5	0x690E	# <CJK>
+0xB4D6	0x68C9	# <CJK>
+0xB4D7	0x68DA	# <CJK>
+0xB4D8	0x696E	# <CJK>
+0xB4D9	0x68FB	# <CJK>
+0xB4DA	0x6B3E	# <CJK>
+0xB4DB	0x6B3A	# <CJK>
+0xB4DC	0x6B3D	# <CJK>
+0xB4DD	0x6B98	# <CJK>
+0xB4DE	0x6B96	# <CJK>
+0xB4DF	0x6BBC	# <CJK>
+0xB4E0	0x6BEF	# <CJK>
+0xB4E1	0x6C2E	# <CJK>
+0xB4E2	0x6C2F	# <CJK>
+0xB4E3	0x6C2C	# <CJK>
+0xB4E4	0x6E2F	# <CJK>
+0xB4E5	0x6E38	# <CJK>
+0xB4E6	0x6E54	# <CJK>
+0xB4E7	0x6E21	# <CJK>
+0xB4E8	0x6E32	# <CJK>
+0xB4E9	0x6E67	# <CJK>
+0xB4EA	0x6E4A	# <CJK>
+0xB4EB	0x6E20	# <CJK>
+0xB4EC	0x6E25	# <CJK>
+0xB4ED	0x6E23	# <CJK>
+0xB4EE	0x6E1B	# <CJK>
+0xB4EF	0x6E5B	# <CJK>
+0xB4F0	0x6E58	# <CJK>
+0xB4F1	0x6E24	# <CJK>
+0xB4F2	0x6E56	# <CJK>
+0xB4F3	0x6E6E	# <CJK>
+0xB4F4	0x6E2D	# <CJK>
+0xB4F5	0x6E26	# <CJK>
+0xB4F6	0x6E6F	# <CJK>
+0xB4F7	0x6E34	# <CJK>
+0xB4F8	0x6E4D	# <CJK>
+0xB4F9	0x6E3A	# <CJK>
+0xB4FA	0x6E2C	# <CJK>
+0xB4FB	0x6E43	# <CJK>
+0xB4FC	0x6E1D	# <CJK>
+0xB4FD	0x6E3E	# <CJK>
+0xB4FE	0x6ECB	# <CJK>
+0xB540	0x6E89	# <CJK>
+0xB541	0x6E19	# <CJK>
+0xB542	0x6E4E	# <CJK>
+0xB543	0x6E63	# <CJK>
+0xB544	0x6E44	# <CJK>
+0xB545	0x6E72	# <CJK>
+0xB546	0x6E69	# <CJK>
+0xB547	0x6E5F	# <CJK>
+0xB548	0x7119	# <CJK>
+0xB549	0x711A	# <CJK>
+0xB54A	0x7126	# <CJK>
+0xB54B	0x7130	# <CJK>
+0xB54C	0x7121	# <CJK>
+0xB54D	0x7136	# <CJK>
+0xB54E	0x716E	# <CJK>
+0xB54F	0x711C	# <CJK>
+0xB550	0x724C	# <CJK>
+0xB551	0x7284	# <CJK>
+0xB552	0x7280	# <CJK>
+0xB553	0x7336	# <CJK>
+0xB554	0x7325	# <CJK>
+0xB555	0x7334	# <CJK>
+0xB556	0x7329	# <CJK>
+0xB557	0x743A	# <CJK>
+0xB558	0x742A	# <CJK>
+0xB559	0x7433	# <CJK>
+0xB55A	0x7422	# <CJK>
+0xB55B	0x7425	# <CJK>
+0xB55C	0x7435	# <CJK>
+0xB55D	0x7436	# <CJK>
+0xB55E	0x7434	# <CJK>
+0xB55F	0x742F	# <CJK>
+0xB560	0x741B	# <CJK>
+0xB561	0x7426	# <CJK>
+0xB562	0x7428	# <CJK>
+0xB563	0x7525	# <CJK>
+0xB564	0x7526	# <CJK>
+0xB565	0x756B	# <CJK>
+0xB566	0x756A	# <CJK>
+0xB567	0x75E2	# <CJK>
+0xB568	0x75DB	# <CJK>
+0xB569	0x75E3	# <CJK>
+0xB56A	0x75D9	# <CJK>
+0xB56B	0x75D8	# <CJK>
+0xB56C	0x75DE	# <CJK>
+0xB56D	0x75E0	# <CJK>
+0xB56E	0x767B	# <CJK>
+0xB56F	0x767C	# <CJK>
+0xB570	0x7696	# <CJK>
+0xB571	0x7693	# <CJK>
+0xB572	0x76B4	# <CJK>
+0xB573	0x76DC	# <CJK>
+0xB574	0x774F	# <CJK>
+0xB575	0x77ED	# <CJK>
+0xB576	0x785D	# <CJK>
+0xB577	0x786C	# <CJK>
+0xB578	0x786F	# <CJK>
+0xB579	0x7A0D	# <CJK>
+0xB57A	0x7A08	# <CJK>
+0xB57B	0x7A0B	# <CJK>
+0xB57C	0x7A05	# <CJK>
+0xB57D	0x7A00	# <CJK>
+0xB57E	0x7A98	# <CJK>
+0xB5A1	0x7A97	# <CJK>
+0xB5A2	0x7A96	# <CJK>
+0xB5A3	0x7AE5	# <CJK>
+0xB5A4	0x7AE3	# <CJK>
+0xB5A5	0x7B49	# <CJK>
+0xB5A6	0x7B56	# <CJK>
+0xB5A7	0x7B46	# <CJK>
+0xB5A8	0x7B50	# <CJK>
+0xB5A9	0x7B52	# <CJK>
+0xB5AA	0x7B54	# <CJK>
+0xB5AB	0x7B4D	# <CJK>
+0xB5AC	0x7B4B	# <CJK>
+0xB5AD	0x7B4F	# <CJK>
+0xB5AE	0x7B51	# <CJK>
+0xB5AF	0x7C9F	# <CJK>
+0xB5B0	0x7CA5	# <CJK>
+0xB5B1	0x7D5E	# <CJK>
+0xB5B2	0x7D50	# <CJK>
+0xB5B3	0x7D68	# <CJK>
+0xB5B4	0x7D55	# <CJK>
+0xB5B5	0x7D2B	# <CJK>
+0xB5B6	0x7D6E	# <CJK>
+0xB5B7	0x7D72	# <CJK>
+0xB5B8	0x7D61	# <CJK>
+0xB5B9	0x7D66	# <CJK>
+0xB5BA	0x7D62	# <CJK>
+0xB5BB	0x7D70	# <CJK>
+0xB5BC	0x7D73	# <CJK>
+0xB5BD	0x5584	# <CJK>
+0xB5BE	0x7FD4	# <CJK>
+0xB5BF	0x7FD5	# <CJK>
+0xB5C0	0x800B	# <CJK>
+0xB5C1	0x8052	# <CJK>
+0xB5C2	0x8085	# <CJK>
+0xB5C3	0x8155	# <CJK>
+0xB5C4	0x8154	# <CJK>
+0xB5C5	0x814B	# <CJK>
+0xB5C6	0x8151	# <CJK>
+0xB5C7	0x814E	# <CJK>
+0xB5C8	0x8139	# <CJK>
+0xB5C9	0x8146	# <CJK>
+0xB5CA	0x813E	# <CJK>
+0xB5CB	0x814C	# <CJK>
+0xB5CC	0x8153	# <CJK>
+0xB5CD	0x8174	# <CJK>
+0xB5CE	0x8212	# <CJK>
+0xB5CF	0x821C	# <CJK>
+0xB5D0	0x83E9	# <CJK>
+0xB5D1	0x8403	# <CJK>
+0xB5D2	0x83F8	# <CJK>
+0xB5D3	0x840D	# <CJK>
+0xB5D4	0x83E0	# <CJK>
+0xB5D5	0x83C5	# <CJK>
+0xB5D6	0x840B	# <CJK>
+0xB5D7	0x83C1	# <CJK>
+0xB5D8	0x83EF	# <CJK>
+0xB5D9	0x83F1	# <CJK>
+0xB5DA	0x83F4	# <CJK>
+0xB5DB	0x8457	# <CJK>
+0xB5DC	0x840A	# <CJK>
+0xB5DD	0x83F0	# <CJK>
+0xB5DE	0x840C	# <CJK>
+0xB5DF	0x83CC	# <CJK>
+0xB5E0	0x83FD	# <CJK>
+0xB5E1	0x83F2	# <CJK>
+0xB5E2	0x83CA	# <CJK>
+0xB5E3	0x8438	# <CJK>
+0xB5E4	0x840E	# <CJK>
+0xB5E5	0x8404	# <CJK>
+0xB5E6	0x83DC	# <CJK>
+0xB5E7	0x8407	# <CJK>
+0xB5E8	0x83D4	# <CJK>
+0xB5E9	0x83DF	# <CJK>
+0xB5EA	0x865B	# <CJK>
+0xB5EB	0x86DF	# <CJK>
+0xB5EC	0x86D9	# <CJK>
+0xB5ED	0x86ED	# <CJK>
+0xB5EE	0x86D4	# <CJK>
+0xB5EF	0x86DB	# <CJK>
+0xB5F0	0x86E4	# <CJK>
+0xB5F1	0x86D0	# <CJK>
+0xB5F2	0x86DE	# <CJK>
+0xB5F3	0x8857	# <CJK>
+0xB5F4	0x88C1	# <CJK>
+0xB5F5	0x88C2	# <CJK>
+0xB5F6	0x88B1	# <CJK>
+0xB5F7	0x8983	# <CJK>
+0xB5F8	0x8996	# <CJK>
+0xB5F9	0x8A3B	# <CJK>
+0xB5FA	0x8A60	# <CJK>
+0xB5FB	0x8A55	# <CJK>
+0xB5FC	0x8A5E	# <CJK>
+0xB5FD	0x8A3C	# <CJK>
+0xB5FE	0x8A41	# <CJK>
+0xB640	0x8A54	# <CJK>
+0xB641	0x8A5B	# <CJK>
+0xB642	0x8A50	# <CJK>
+0xB643	0x8A46	# <CJK>
+0xB644	0x8A34	# <CJK>
+0xB645	0x8A3A	# <CJK>
+0xB646	0x8A36	# <CJK>
+0xB647	0x8A56	# <CJK>
+0xB648	0x8C61	# <CJK>
+0xB649	0x8C82	# <CJK>
+0xB64A	0x8CAF	# <CJK>
+0xB64B	0x8CBC	# <CJK>
+0xB64C	0x8CB3	# <CJK>
+0xB64D	0x8CBD	# <CJK>
+0xB64E	0x8CC1	# <CJK>
+0xB64F	0x8CBB	# <CJK>
+0xB650	0x8CC0	# <CJK>
+0xB651	0x8CB4	# <CJK>
+0xB652	0x8CB7	# <CJK>
+0xB653	0x8CB6	# <CJK>
+0xB654	0x8CBF	# <CJK>
+0xB655	0x8CB8	# <CJK>
+0xB656	0x8D8A	# <CJK>
+0xB657	0x8D85	# <CJK>
+0xB658	0x8D81	# <CJK>
+0xB659	0x8DCE	# <CJK>
+0xB65A	0x8DDD	# <CJK>
+0xB65B	0x8DCB	# <CJK>
+0xB65C	0x8DDA	# <CJK>
+0xB65D	0x8DD1	# <CJK>
+0xB65E	0x8DCC	# <CJK>
+0xB65F	0x8DDB	# <CJK>
+0xB660	0x8DC6	# <CJK>
+0xB661	0x8EFB	# <CJK>
+0xB662	0x8EF8	# <CJK>
+0xB663	0x8EFC	# <CJK>
+0xB664	0x8F9C	# <CJK>
+0xB665	0x902E	# <CJK>
+0xB666	0x9035	# <CJK>
+0xB667	0x9031	# <CJK>
+0xB668	0x9038	# <CJK>
+0xB669	0x9032	# <CJK>
+0xB66A	0x9036	# <CJK>
+0xB66B	0x9102	# <CJK>
+0xB66C	0x90F5	# <CJK>
+0xB66D	0x9109	# <CJK>
+0xB66E	0x90FE	# <CJK>
+0xB66F	0x9163	# <CJK>
+0xB670	0x9165	# <CJK>
+0xB671	0x91CF	# <CJK>
+0xB672	0x9214	# <CJK>
+0xB673	0x9215	# <CJK>
+0xB674	0x9223	# <CJK>
+0xB675	0x9209	# <CJK>
+0xB676	0x921E	# <CJK>
+0xB677	0x920D	# <CJK>
+0xB678	0x9210	# <CJK>
+0xB679	0x9207	# <CJK>
+0xB67A	0x9211	# <CJK>
+0xB67B	0x9594	# <CJK>
+0xB67C	0x958F	# <CJK>
+0xB67D	0x958B	# <CJK>
+0xB67E	0x9591	# <CJK>
+0xB6A1	0x9593	# <CJK>
+0xB6A2	0x9592	# <CJK>
+0xB6A3	0x958E	# <CJK>
+0xB6A4	0x968A	# <CJK>
+0xB6A5	0x968E	# <CJK>
+0xB6A6	0x968B	# <CJK>
+0xB6A7	0x967D	# <CJK>
+0xB6A8	0x9685	# <CJK>
+0xB6A9	0x9686	# <CJK>
+0xB6AA	0x968D	# <CJK>
+0xB6AB	0x9672	# <CJK>
+0xB6AC	0x9684	# <CJK>
+0xB6AD	0x96C1	# <CJK>
+0xB6AE	0x96C5	# <CJK>
+0xB6AF	0x96C4	# <CJK>
+0xB6B0	0x96C6	# <CJK>
+0xB6B1	0x96C7	# <CJK>
+0xB6B2	0x96EF	# <CJK>
+0xB6B3	0x96F2	# <CJK>
+0xB6B4	0x97CC	# <CJK>
+0xB6B5	0x9805	# <CJK>
+0xB6B6	0x9806	# <CJK>
+0xB6B7	0x9808	# <CJK>
+0xB6B8	0x98E7	# <CJK>
+0xB6B9	0x98EA	# <CJK>
+0xB6BA	0x98EF	# <CJK>
+0xB6BB	0x98E9	# <CJK>
+0xB6BC	0x98F2	# <CJK>
+0xB6BD	0x98ED	# <CJK>
+0xB6BE	0x99AE	# <CJK>
+0xB6BF	0x99AD	# <CJK>
+0xB6C0	0x9EC3	# <CJK>
+0xB6C1	0x9ECD	# <CJK>
+0xB6C2	0x9ED1	# <CJK>
+0xB6C3	0x4E82	# <CJK>
+0xB6C4	0x50AD	# <CJK>
+0xB6C5	0x50B5	# <CJK>
+0xB6C6	0x50B2	# <CJK>
+0xB6C7	0x50B3	# <CJK>
+0xB6C8	0x50C5	# <CJK>
+0xB6C9	0x50BE	# <CJK>
+0xB6CA	0x50AC	# <CJK>
+0xB6CB	0x50B7	# <CJK>
+0xB6CC	0x50BB	# <CJK>
+0xB6CD	0x50AF	# <CJK>
+0xB6CE	0x50C7	# <CJK>
+0xB6CF	0x527F	# <CJK>
+0xB6D0	0x5277	# <CJK>
+0xB6D1	0x527D	# <CJK>
+0xB6D2	0x52DF	# <CJK>
+0xB6D3	0x52E6	# <CJK>
+0xB6D4	0x52E4	# <CJK>
+0xB6D5	0x52E2	# <CJK>
+0xB6D6	0x52E3	# <CJK>
+0xB6D7	0x532F	# <CJK>
+0xB6D8	0x55DF	# <CJK>
+0xB6D9	0x55E8	# <CJK>
+0xB6DA	0x55D3	# <CJK>
+0xB6DB	0x55E6	# <CJK>
+0xB6DC	0x55CE	# <CJK>
+0xB6DD	0x55DC	# <CJK>
+0xB6DE	0x55C7	# <CJK>
+0xB6DF	0x55D1	# <CJK>
+0xB6E0	0x55E3	# <CJK>
+0xB6E1	0x55E4	# <CJK>
+0xB6E2	0x55EF	# <CJK>
+0xB6E3	0x55DA	# <CJK>
+0xB6E4	0x55E1	# <CJK>
+0xB6E5	0x55C5	# <CJK>
+0xB6E6	0x55C6	# <CJK>
+0xB6E7	0x55E5	# <CJK>
+0xB6E8	0x55C9	# <CJK>
+0xB6E9	0x5712	# <CJK>
+0xB6EA	0x5713	# <CJK>
+0xB6EB	0x585E	# <CJK>
+0xB6EC	0x5851	# <CJK>
+0xB6ED	0x5858	# <CJK>
+0xB6EE	0x5857	# <CJK>
+0xB6EF	0x585A	# <CJK>
+0xB6F0	0x5854	# <CJK>
+0xB6F1	0x586B	# <CJK>
+0xB6F2	0x584C	# <CJK>
+0xB6F3	0x586D	# <CJK>
+0xB6F4	0x584A	# <CJK>
+0xB6F5	0x5862	# <CJK>
+0xB6F6	0x5852	# <CJK>
+0xB6F7	0x584B	# <CJK>
+0xB6F8	0x5967	# <CJK>
+0xB6F9	0x5AC1	# <CJK>
+0xB6FA	0x5AC9	# <CJK>
+0xB6FB	0x5ACC	# <CJK>
+0xB6FC	0x5ABE	# <CJK>
+0xB6FD	0x5ABD	# <CJK>
+0xB6FE	0x5ABC	# <CJK>
+0xB740	0x5AB3	# <CJK>
+0xB741	0x5AC2	# <CJK>
+0xB742	0x5AB2	# <CJK>
+0xB743	0x5D69	# <CJK>
+0xB744	0x5D6F	# <CJK>
+0xB745	0x5E4C	# <CJK>
+0xB746	0x5E79	# <CJK>
+0xB747	0x5EC9	# <CJK>
+0xB748	0x5EC8	# <CJK>
+0xB749	0x5F12	# <CJK>
+0xB74A	0x5F59	# <CJK>
+0xB74B	0x5FAC	# <CJK>
+0xB74C	0x5FAE	# <CJK>
+0xB74D	0x611A	# <CJK>
+0xB74E	0x610F	# <CJK>
+0xB74F	0x6148	# <CJK>
+0xB750	0x611F	# <CJK>
+0xB751	0x60F3	# <CJK>
+0xB752	0x611B	# <CJK>
+0xB753	0x60F9	# <CJK>
+0xB754	0x6101	# <CJK>
+0xB755	0x6108	# <CJK>
+0xB756	0x614E	# <CJK>
+0xB757	0x614C	# <CJK>
+0xB758	0x6144	# <CJK>
+0xB759	0x614D	# <CJK>
+0xB75A	0x613E	# <CJK>
+0xB75B	0x6134	# <CJK>
+0xB75C	0x6127	# <CJK>
+0xB75D	0x610D	# <CJK>
+0xB75E	0x6106	# <CJK>
+0xB75F	0x6137	# <CJK>
+0xB760	0x6221	# <CJK>
+0xB761	0x6222	# <CJK>
+0xB762	0x6413	# <CJK>
+0xB763	0x643E	# <CJK>
+0xB764	0x641E	# <CJK>
+0xB765	0x642A	# <CJK>
+0xB766	0x642D	# <CJK>
+0xB767	0x643D	# <CJK>
+0xB768	0x642C	# <CJK>
+0xB769	0x640F	# <CJK>
+0xB76A	0x641C	# <CJK>
+0xB76B	0x6414	# <CJK>
+0xB76C	0x640D	# <CJK>
+0xB76D	0x6436	# <CJK>
+0xB76E	0x6416	# <CJK>
+0xB76F	0x6417	# <CJK>
+0xB770	0x6406	# <CJK>
+0xB771	0x656C	# <CJK>
+0xB772	0x659F	# <CJK>
+0xB773	0x65B0	# <CJK>
+0xB774	0x6697	# <CJK>
+0xB775	0x6689	# <CJK>
+0xB776	0x6687	# <CJK>
+0xB777	0x6688	# <CJK>
+0xB778	0x6696	# <CJK>
+0xB779	0x6684	# <CJK>
+0xB77A	0x6698	# <CJK>
+0xB77B	0x668D	# <CJK>
+0xB77C	0x6703	# <CJK>
+0xB77D	0x6994	# <CJK>
+0xB77E	0x696D	# <CJK>
+0xB7A1	0x695A	# <CJK>
+0xB7A2	0x6977	# <CJK>
+0xB7A3	0x6960	# <CJK>
+0xB7A4	0x6954	# <CJK>
+0xB7A5	0x6975	# <CJK>
+0xB7A6	0x6930	# <CJK>
+0xB7A7	0x6982	# <CJK>
+0xB7A8	0x694A	# <CJK>
+0xB7A9	0x6968	# <CJK>
+0xB7AA	0x696B	# <CJK>
+0xB7AB	0x695E	# <CJK>
+0xB7AC	0x6953	# <CJK>
+0xB7AD	0x6979	# <CJK>
+0xB7AE	0x6986	# <CJK>
+0xB7AF	0x695D	# <CJK>
+0xB7B0	0x6963	# <CJK>
+0xB7B1	0x695B	# <CJK>
+0xB7B2	0x6B47	# <CJK>
+0xB7B3	0x6B72	# <CJK>
+0xB7B4	0x6BC0	# <CJK>
+0xB7B5	0x6BBF	# <CJK>
+0xB7B6	0x6BD3	# <CJK>
+0xB7B7	0x6BFD	# <CJK>
+0xB7B8	0x6EA2	# <CJK>
+0xB7B9	0x6EAF	# <CJK>
+0xB7BA	0x6ED3	# <CJK>
+0xB7BB	0x6EB6	# <CJK>
+0xB7BC	0x6EC2	# <CJK>
+0xB7BD	0x6E90	# <CJK>
+0xB7BE	0x6E9D	# <CJK>
+0xB7BF	0x6EC7	# <CJK>
+0xB7C0	0x6EC5	# <CJK>
+0xB7C1	0x6EA5	# <CJK>
+0xB7C2	0x6E98	# <CJK>
+0xB7C3	0x6EBC	# <CJK>
+0xB7C4	0x6EBA	# <CJK>
+0xB7C5	0x6EAB	# <CJK>
+0xB7C6	0x6ED1	# <CJK>
+0xB7C7	0x6E96	# <CJK>
+0xB7C8	0x6E9C	# <CJK>
+0xB7C9	0x6EC4	# <CJK>
+0xB7CA	0x6ED4	# <CJK>
+0xB7CB	0x6EAA	# <CJK>
+0xB7CC	0x6EA7	# <CJK>
+0xB7CD	0x6EB4	# <CJK>
+0xB7CE	0x714E	# <CJK>
+0xB7CF	0x7159	# <CJK>
+0xB7D0	0x7169	# <CJK>
+0xB7D1	0x7164	# <CJK>
+0xB7D2	0x7149	# <CJK>
+0xB7D3	0x7167	# <CJK>
+0xB7D4	0x715C	# <CJK>
+0xB7D5	0x716C	# <CJK>
+0xB7D6	0x7166	# <CJK>
+0xB7D7	0x714C	# <CJK>
+0xB7D8	0x7165	# <CJK>
+0xB7D9	0x715E	# <CJK>
+0xB7DA	0x7146	# <CJK>
+0xB7DB	0x7168	# <CJK>
+0xB7DC	0x7156	# <CJK>
+0xB7DD	0x723A	# <CJK>
+0xB7DE	0x7252	# <CJK>
+0xB7DF	0x7337	# <CJK>
+0xB7E0	0x7345	# <CJK>
+0xB7E1	0x733F	# <CJK>
+0xB7E2	0x733E	# <CJK>
+0xB7E3	0x746F	# <CJK>
+0xB7E4	0x745A	# <CJK>
+0xB7E5	0x7455	# <CJK>
+0xB7E6	0x745F	# <CJK>
+0xB7E7	0x745E	# <CJK>
+0xB7E8	0x7441	# <CJK>
+0xB7E9	0x743F	# <CJK>
+0xB7EA	0x7459	# <CJK>
+0xB7EB	0x745B	# <CJK>
+0xB7EC	0x745C	# <CJK>
+0xB7ED	0x7576	# <CJK>
+0xB7EE	0x7578	# <CJK>
+0xB7EF	0x7600	# <CJK>
+0xB7F0	0x75F0	# <CJK>
+0xB7F1	0x7601	# <CJK>
+0xB7F2	0x75F2	# <CJK>
+0xB7F3	0x75F1	# <CJK>
+0xB7F4	0x75FA	# <CJK>
+0xB7F5	0x75FF	# <CJK>
+0xB7F6	0x75F4	# <CJK>
+0xB7F7	0x75F3	# <CJK>
+0xB7F8	0x76DE	# <CJK>
+0xB7F9	0x76DF	# <CJK>
+0xB7FA	0x775B	# <CJK>
+0xB7FB	0x776B	# <CJK>
+0xB7FC	0x7766	# <CJK>
+0xB7FD	0x775E	# <CJK>
+0xB7FE	0x7763	# <CJK>
+0xB840	0x7779	# <CJK>
+0xB841	0x776A	# <CJK>
+0xB842	0x776C	# <CJK>
+0xB843	0x775C	# <CJK>
+0xB844	0x7765	# <CJK>
+0xB845	0x7768	# <CJK>
+0xB846	0x7762	# <CJK>
+0xB847	0x77EE	# <CJK>
+0xB848	0x788E	# <CJK>
+0xB849	0x78B0	# <CJK>
+0xB84A	0x7897	# <CJK>
+0xB84B	0x7898	# <CJK>
+0xB84C	0x788C	# <CJK>
+0xB84D	0x7889	# <CJK>
+0xB84E	0x787C	# <CJK>
+0xB84F	0x7891	# <CJK>
+0xB850	0x7893	# <CJK>
+0xB851	0x787F	# <CJK>
+0xB852	0x797A	# <CJK>
+0xB853	0x797F	# <CJK>
+0xB854	0x7981	# <CJK>
+0xB855	0x842C	# <CJK>
+0xB856	0x79BD	# <CJK>
+0xB857	0x7A1C	# <CJK>
+0xB858	0x7A1A	# <CJK>
+0xB859	0x7A20	# <CJK>
+0xB85A	0x7A14	# <CJK>
+0xB85B	0x7A1F	# <CJK>
+0xB85C	0x7A1E	# <CJK>
+0xB85D	0x7A9F	# <CJK>
+0xB85E	0x7AA0	# <CJK>
+0xB85F	0x7B77	# <CJK>
+0xB860	0x7BC0	# <CJK>
+0xB861	0x7B60	# <CJK>
+0xB862	0x7B6E	# <CJK>
+0xB863	0x7B67	# <CJK>
+0xB864	0x7CB1	# <CJK>
+0xB865	0x7CB3	# <CJK>
+0xB866	0x7CB5	# <CJK>
+0xB867	0x7D93	# <CJK>
+0xB868	0x7D79	# <CJK>
+0xB869	0x7D91	# <CJK>
+0xB86A	0x7D81	# <CJK>
+0xB86B	0x7D8F	# <CJK>
+0xB86C	0x7D5B	# <CJK>
+0xB86D	0x7F6E	# <CJK>
+0xB86E	0x7F69	# <CJK>
+0xB86F	0x7F6A	# <CJK>
+0xB870	0x7F72	# <CJK>
+0xB871	0x7FA9	# <CJK>
+0xB872	0x7FA8	# <CJK>
+0xB873	0x7FA4	# <CJK>
+0xB874	0x8056	# <CJK>
+0xB875	0x8058	# <CJK>
+0xB876	0x8086	# <CJK>
+0xB877	0x8084	# <CJK>
+0xB878	0x8171	# <CJK>
+0xB879	0x8170	# <CJK>
+0xB87A	0x8178	# <CJK>
+0xB87B	0x8165	# <CJK>
+0xB87C	0x816E	# <CJK>
+0xB87D	0x8173	# <CJK>
+0xB87E	0x816B	# <CJK>
+0xB8A1	0x8179	# <CJK>
+0xB8A2	0x817A	# <CJK>
+0xB8A3	0x8166	# <CJK>
+0xB8A4	0x8205	# <CJK>
+0xB8A5	0x8247	# <CJK>
+0xB8A6	0x8482	# <CJK>
+0xB8A7	0x8477	# <CJK>
+0xB8A8	0x843D	# <CJK>
+0xB8A9	0x8431	# <CJK>
+0xB8AA	0x8475	# <CJK>
+0xB8AB	0x8466	# <CJK>
+0xB8AC	0x846B	# <CJK>
+0xB8AD	0x8449	# <CJK>
+0xB8AE	0x846C	# <CJK>
+0xB8AF	0x845B	# <CJK>
+0xB8B0	0x843C	# <CJK>
+0xB8B1	0x8435	# <CJK>
+0xB8B2	0x8461	# <CJK>
+0xB8B3	0x8463	# <CJK>
+0xB8B4	0x8469	# <CJK>
+0xB8B5	0x846D	# <CJK>
+0xB8B6	0x8446	# <CJK>
+0xB8B7	0x865E	# <CJK>
+0xB8B8	0x865C	# <CJK>
+0xB8B9	0x865F	# <CJK>
+0xB8BA	0x86F9	# <CJK>
+0xB8BB	0x8713	# <CJK>
+0xB8BC	0x8708	# <CJK>
+0xB8BD	0x8707	# <CJK>
+0xB8BE	0x8700	# <CJK>
+0xB8BF	0x86FE	# <CJK>
+0xB8C0	0x86FB	# <CJK>
+0xB8C1	0x8702	# <CJK>
+0xB8C2	0x8703	# <CJK>
+0xB8C3	0x8706	# <CJK>
+0xB8C4	0x870A	# <CJK>
+0xB8C5	0x8859	# <CJK>
+0xB8C6	0x88DF	# <CJK>
+0xB8C7	0x88D4	# <CJK>
+0xB8C8	0x88D9	# <CJK>
+0xB8C9	0x88DC	# <CJK>
+0xB8CA	0x88D8	# <CJK>
+0xB8CB	0x88DD	# <CJK>
+0xB8CC	0x88E1	# <CJK>
+0xB8CD	0x88CA	# <CJK>
+0xB8CE	0x88D5	# <CJK>
+0xB8CF	0x88D2	# <CJK>
+0xB8D0	0x899C	# <CJK>
+0xB8D1	0x89E3	# <CJK>
+0xB8D2	0x8A6B	# <CJK>
+0xB8D3	0x8A72	# <CJK>
+0xB8D4	0x8A73	# <CJK>
+0xB8D5	0x8A66	# <CJK>
+0xB8D6	0x8A69	# <CJK>
+0xB8D7	0x8A70	# <CJK>
+0xB8D8	0x8A87	# <CJK>
+0xB8D9	0x8A7C	# <CJK>
+0xB8DA	0x8A63	# <CJK>
+0xB8DB	0x8AA0	# <CJK>
+0xB8DC	0x8A71	# <CJK>
+0xB8DD	0x8A85	# <CJK>
+0xB8DE	0x8A6D	# <CJK>
+0xB8DF	0x8A62	# <CJK>
+0xB8E0	0x8A6E	# <CJK>
+0xB8E1	0x8A6C	# <CJK>
+0xB8E2	0x8A79	# <CJK>
+0xB8E3	0x8A7B	# <CJK>
+0xB8E4	0x8A3E	# <CJK>
+0xB8E5	0x8A68	# <CJK>
+0xB8E6	0x8C62	# <CJK>
+0xB8E7	0x8C8A	# <CJK>
+0xB8E8	0x8C89	# <CJK>
+0xB8E9	0x8CCA	# <CJK>
+0xB8EA	0x8CC7	# <CJK>
+0xB8EB	0x8CC8	# <CJK>
+0xB8EC	0x8CC4	# <CJK>
+0xB8ED	0x8CB2	# <CJK>
+0xB8EE	0x8CC3	# <CJK>
+0xB8EF	0x8CC2	# <CJK>
+0xB8F0	0x8CC5	# <CJK>
+0xB8F1	0x8DE1	# <CJK>
+0xB8F2	0x8DDF	# <CJK>
+0xB8F3	0x8DE8	# <CJK>
+0xB8F4	0x8DEF	# <CJK>
+0xB8F5	0x8DF3	# <CJK>
+0xB8F6	0x8DFA	# <CJK>
+0xB8F7	0x8DEA	# <CJK>
+0xB8F8	0x8DE4	# <CJK>
+0xB8F9	0x8DE6	# <CJK>
+0xB8FA	0x8EB2	# <CJK>
+0xB8FB	0x8F03	# <CJK>
+0xB8FC	0x8F09	# <CJK>
+0xB8FD	0x8EFE	# <CJK>
+0xB8FE	0x8F0A	# <CJK>
+0xB940	0x8F9F	# <CJK>
+0xB941	0x8FB2	# <CJK>
+0xB942	0x904B	# <CJK>
+0xB943	0x904A	# <CJK>
+0xB944	0x9053	# <CJK>
+0xB945	0x9042	# <CJK>
+0xB946	0x9054	# <CJK>
+0xB947	0x903C	# <CJK>
+0xB948	0x9055	# <CJK>
+0xB949	0x9050	# <CJK>
+0xB94A	0x9047	# <CJK>
+0xB94B	0x904F	# <CJK>
+0xB94C	0x904E	# <CJK>
+0xB94D	0x904D	# <CJK>
+0xB94E	0x9051	# <CJK>
+0xB94F	0x903E	# <CJK>
+0xB950	0x9041	# <CJK>
+0xB951	0x9112	# <CJK>
+0xB952	0x9117	# <CJK>
+0xB953	0x916C	# <CJK>
+0xB954	0x916A	# <CJK>
+0xB955	0x9169	# <CJK>
+0xB956	0x91C9	# <CJK>
+0xB957	0x9237	# <CJK>
+0xB958	0x9257	# <CJK>
+0xB959	0x9238	# <CJK>
+0xB95A	0x923D	# <CJK>
+0xB95B	0x9240	# <CJK>
+0xB95C	0x923E	# <CJK>
+0xB95D	0x925B	# <CJK>
+0xB95E	0x924B	# <CJK>
+0xB95F	0x9264	# <CJK>
+0xB960	0x9251	# <CJK>
+0xB961	0x9234	# <CJK>
+0xB962	0x9249	# <CJK>
+0xB963	0x924D	# <CJK>
+0xB964	0x9245	# <CJK>
+0xB965	0x9239	# <CJK>
+0xB966	0x923F	# <CJK>
+0xB967	0x925A	# <CJK>
+0xB968	0x9598	# <CJK>
+0xB969	0x9698	# <CJK>
+0xB96A	0x9694	# <CJK>
+0xB96B	0x9695	# <CJK>
+0xB96C	0x96CD	# <CJK>
+0xB96D	0x96CB	# <CJK>
+0xB96E	0x96C9	# <CJK>
+0xB96F	0x96CA	# <CJK>
+0xB970	0x96F7	# <CJK>
+0xB971	0x96FB	# <CJK>
+0xB972	0x96F9	# <CJK>
+0xB973	0x96F6	# <CJK>
+0xB974	0x9756	# <CJK>
+0xB975	0x9774	# <CJK>
+0xB976	0x9776	# <CJK>
+0xB977	0x9810	# <CJK>
+0xB978	0x9811	# <CJK>
+0xB979	0x9813	# <CJK>
+0xB97A	0x980A	# <CJK>
+0xB97B	0x9812	# <CJK>
+0xB97C	0x980C	# <CJK>
+0xB97D	0x98FC	# <CJK>
+0xB97E	0x98F4	# <CJK>
+0xB9A1	0x98FD	# <CJK>
+0xB9A2	0x98FE	# <CJK>
+0xB9A3	0x99B3	# <CJK>
+0xB9A4	0x99B1	# <CJK>
+0xB9A5	0x99B4	# <CJK>
+0xB9A6	0x9AE1	# <CJK>
+0xB9A7	0x9CE9	# <CJK>
+0xB9A8	0x9E82	# <CJK>
+0xB9A9	0x9F0E	# <CJK>
+0xB9AA	0x9F13	# <CJK>
+0xB9AB	0x9F20	# <CJK>
+0xB9AC	0x50E7	# <CJK>
+0xB9AD	0x50EE	# <CJK>
+0xB9AE	0x50E5	# <CJK>
+0xB9AF	0x50D6	# <CJK>
+0xB9B0	0x50ED	# <CJK>
+0xB9B1	0x50DA	# <CJK>
+0xB9B2	0x50D5	# <CJK>
+0xB9B3	0x50CF	# <CJK>
+0xB9B4	0x50D1	# <CJK>
+0xB9B5	0x50F1	# <CJK>
+0xB9B6	0x50CE	# <CJK>
+0xB9B7	0x50E9	# <CJK>
+0xB9B8	0x5162	# <CJK>
+0xB9B9	0x51F3	# <CJK>
+0xB9BA	0x5283	# <CJK>
+0xB9BB	0x5282	# <CJK>
+0xB9BC	0x5331	# <CJK>
+0xB9BD	0x53AD	# <CJK>
+0xB9BE	0x55FE	# <CJK>
+0xB9BF	0x5600	# <CJK>
+0xB9C0	0x561B	# <CJK>
+0xB9C1	0x5617	# <CJK>
+0xB9C2	0x55FD	# <CJK>
+0xB9C3	0x5614	# <CJK>
+0xB9C4	0x5606	# <CJK>
+0xB9C5	0x5609	# <CJK>
+0xB9C6	0x560D	# <CJK>
+0xB9C7	0x560E	# <CJK>
+0xB9C8	0x55F7	# <CJK>
+0xB9C9	0x5616	# <CJK>
+0xB9CA	0x561F	# <CJK>
+0xB9CB	0x5608	# <CJK>
+0xB9CC	0x5610	# <CJK>
+0xB9CD	0x55F6	# <CJK>
+0xB9CE	0x5718	# <CJK>
+0xB9CF	0x5716	# <CJK>
+0xB9D0	0x5875	# <CJK>
+0xB9D1	0x587E	# <CJK>
+0xB9D2	0x5883	# <CJK>
+0xB9D3	0x5893	# <CJK>
+0xB9D4	0x588A	# <CJK>
+0xB9D5	0x5879	# <CJK>
+0xB9D6	0x5885	# <CJK>
+0xB9D7	0x587D	# <CJK>
+0xB9D8	0x58FD	# <CJK>
+0xB9D9	0x5925	# <CJK>
+0xB9DA	0x5922	# <CJK>
+0xB9DB	0x5924	# <CJK>
+0xB9DC	0x596A	# <CJK>
+0xB9DD	0x5969	# <CJK>
+0xB9DE	0x5AE1	# <CJK>
+0xB9DF	0x5AE6	# <CJK>
+0xB9E0	0x5AE9	# <CJK>
+0xB9E1	0x5AD7	# <CJK>
+0xB9E2	0x5AD6	# <CJK>
+0xB9E3	0x5AD8	# <CJK>
+0xB9E4	0x5AE3	# <CJK>
+0xB9E5	0x5B75	# <CJK>
+0xB9E6	0x5BDE	# <CJK>
+0xB9E7	0x5BE7	# <CJK>
+0xB9E8	0x5BE1	# <CJK>
+0xB9E9	0x5BE5	# <CJK>
+0xB9EA	0x5BE6	# <CJK>
+0xB9EB	0x5BE8	# <CJK>
+0xB9EC	0x5BE2	# <CJK>
+0xB9ED	0x5BE4	# <CJK>
+0xB9EE	0x5BDF	# <CJK>
+0xB9EF	0x5C0D	# <CJK>
+0xB9F0	0x5C62	# <CJK>
+0xB9F1	0x5D84	# <CJK>
+0xB9F2	0x5D87	# <CJK>
+0xB9F3	0x5E5B	# <CJK>
+0xB9F4	0x5E63	# <CJK>
+0xB9F5	0x5E55	# <CJK>
+0xB9F6	0x5E57	# <CJK>
+0xB9F7	0x5E54	# <CJK>
+0xB9F8	0x5ED3	# <CJK>
+0xB9F9	0x5ED6	# <CJK>
+0xB9FA	0x5F0A	# <CJK>
+0xB9FB	0x5F46	# <CJK>
+0xB9FC	0x5F70	# <CJK>
+0xB9FD	0x5FB9	# <CJK>
+0xB9FE	0x6147	# <CJK>
+0xBA40	0x613F	# <CJK>
+0xBA41	0x614B	# <CJK>
+0xBA42	0x6177	# <CJK>
+0xBA43	0x6162	# <CJK>
+0xBA44	0x6163	# <CJK>
+0xBA45	0x615F	# <CJK>
+0xBA46	0x615A	# <CJK>
+0xBA47	0x6158	# <CJK>
+0xBA48	0x6175	# <CJK>
+0xBA49	0x622A	# <CJK>
+0xBA4A	0x6487	# <CJK>
+0xBA4B	0x6458	# <CJK>
+0xBA4C	0x6454	# <CJK>
+0xBA4D	0x64A4	# <CJK>
+0xBA4E	0x6478	# <CJK>
+0xBA4F	0x645F	# <CJK>
+0xBA50	0x647A	# <CJK>
+0xBA51	0x6451	# <CJK>
+0xBA52	0x6467	# <CJK>
+0xBA53	0x6434	# <CJK>
+0xBA54	0x646D	# <CJK>
+0xBA55	0x647B	# <CJK>
+0xBA56	0x6572	# <CJK>
+0xBA57	0x65A1	# <CJK>
+0xBA58	0x65D7	# <CJK>
+0xBA59	0x65D6	# <CJK>
+0xBA5A	0x66A2	# <CJK>
+0xBA5B	0x66A8	# <CJK>
+0xBA5C	0x669D	# <CJK>
+0xBA5D	0x699C	# <CJK>
+0xBA5E	0x69A8	# <CJK>
+0xBA5F	0x6995	# <CJK>
+0xBA60	0x69C1	# <CJK>
+0xBA61	0x69AE	# <CJK>
+0xBA62	0x69D3	# <CJK>
+0xBA63	0x69CB	# <CJK>
+0xBA64	0x699B	# <CJK>
+0xBA65	0x69B7	# <CJK>
+0xBA66	0x69BB	# <CJK>
+0xBA67	0x69AB	# <CJK>
+0xBA68	0x69B4	# <CJK>
+0xBA69	0x69D0	# <CJK>
+0xBA6A	0x69CD	# <CJK>
+0xBA6B	0x69AD	# <CJK>
+0xBA6C	0x69CC	# <CJK>
+0xBA6D	0x69A6	# <CJK>
+0xBA6E	0x69C3	# <CJK>
+0xBA6F	0x69A3	# <CJK>
+0xBA70	0x6B49	# <CJK>
+0xBA71	0x6B4C	# <CJK>
+0xBA72	0x6C33	# <CJK>
+0xBA73	0x6F33	# <CJK>
+0xBA74	0x6F14	# <CJK>
+0xBA75	0x6EFE	# <CJK>
+0xBA76	0x6F13	# <CJK>
+0xBA77	0x6EF4	# <CJK>
+0xBA78	0x6F29	# <CJK>
+0xBA79	0x6F3E	# <CJK>
+0xBA7A	0x6F20	# <CJK>
+0xBA7B	0x6F2C	# <CJK>
+0xBA7C	0x6F0F	# <CJK>
+0xBA7D	0x6F02	# <CJK>
+0xBA7E	0x6F22	# <CJK>
+0xBAA1	0x6EFF	# <CJK>
+0xBAA2	0x6EEF	# <CJK>
+0xBAA3	0x6F06	# <CJK>
+0xBAA4	0x6F31	# <CJK>
+0xBAA5	0x6F38	# <CJK>
+0xBAA6	0x6F32	# <CJK>
+0xBAA7	0x6F23	# <CJK>
+0xBAA8	0x6F15	# <CJK>
+0xBAA9	0x6F2B	# <CJK>
+0xBAAA	0x6F2F	# <CJK>
+0xBAAB	0x6F88	# <CJK>
+0xBAAC	0x6F2A	# <CJK>
+0xBAAD	0x6EEC	# <CJK>
+0xBAAE	0x6F01	# <CJK>
+0xBAAF	0x6EF2	# <CJK>
+0xBAB0	0x6ECC	# <CJK>
+0xBAB1	0x6EF7	# <CJK>
+0xBAB2	0x7194	# <CJK>
+0xBAB3	0x7199	# <CJK>
+0xBAB4	0x717D	# <CJK>
+0xBAB5	0x718A	# <CJK>
+0xBAB6	0x7184	# <CJK>
+0xBAB7	0x7192	# <CJK>
+0xBAB8	0x723E	# <CJK>
+0xBAB9	0x7292	# <CJK>
+0xBABA	0x7296	# <CJK>
+0xBABB	0x7344	# <CJK>
+0xBABC	0x7350	# <CJK>
+0xBABD	0x7464	# <CJK>
+0xBABE	0x7463	# <CJK>
+0xBABF	0x746A	# <CJK>
+0xBAC0	0x7470	# <CJK>
+0xBAC1	0x746D	# <CJK>
+0xBAC2	0x7504	# <CJK>
+0xBAC3	0x7591	# <CJK>
+0xBAC4	0x7627	# <CJK>
+0xBAC5	0x760D	# <CJK>
+0xBAC6	0x760B	# <CJK>
+0xBAC7	0x7609	# <CJK>
+0xBAC8	0x7613	# <CJK>
+0xBAC9	0x76E1	# <CJK>
+0xBACA	0x76E3	# <CJK>
+0xBACB	0x7784	# <CJK>
+0xBACC	0x777D	# <CJK>
+0xBACD	0x777F	# <CJK>
+0xBACE	0x7761	# <CJK>
+0xBACF	0x78C1	# <CJK>
+0xBAD0	0x789F	# <CJK>
+0xBAD1	0x78A7	# <CJK>
+0xBAD2	0x78B3	# <CJK>
+0xBAD3	0x78A9	# <CJK>
+0xBAD4	0x78A3	# <CJK>
+0xBAD5	0x798E	# <CJK>
+0xBAD6	0x798F	# <CJK>
+0xBAD7	0x798D	# <CJK>
+0xBAD8	0x7A2E	# <CJK>
+0xBAD9	0x7A31	# <CJK>
+0xBADA	0x7AAA	# <CJK>
+0xBADB	0x7AA9	# <CJK>
+0xBADC	0x7AED	# <CJK>
+0xBADD	0x7AEF	# <CJK>
+0xBADE	0x7BA1	# <CJK>
+0xBADF	0x7B95	# <CJK>
+0xBAE0	0x7B8B	# <CJK>
+0xBAE1	0x7B75	# <CJK>
+0xBAE2	0x7B97	# <CJK>
+0xBAE3	0x7B9D	# <CJK>
+0xBAE4	0x7B94	# <CJK>
+0xBAE5	0x7B8F	# <CJK>
+0xBAE6	0x7BB8	# <CJK>
+0xBAE7	0x7B87	# <CJK>
+0xBAE8	0x7B84	# <CJK>
+0xBAE9	0x7CB9	# <CJK>
+0xBAEA	0x7CBD	# <CJK>
+0xBAEB	0x7CBE	# <CJK>
+0xBAEC	0x7DBB	# <CJK>
+0xBAED	0x7DB0	# <CJK>
+0xBAEE	0x7D9C	# <CJK>
+0xBAEF	0x7DBD	# <CJK>
+0xBAF0	0x7DBE	# <CJK>
+0xBAF1	0x7DA0	# <CJK>
+0xBAF2	0x7DCA	# <CJK>
+0xBAF3	0x7DB4	# <CJK>
+0xBAF4	0x7DB2	# <CJK>
+0xBAF5	0x7DB1	# <CJK>
+0xBAF6	0x7DBA	# <CJK>
+0xBAF7	0x7DA2	# <CJK>
+0xBAF8	0x7DBF	# <CJK>
+0xBAF9	0x7DB5	# <CJK>
+0xBAFA	0x7DB8	# <CJK>
+0xBAFB	0x7DAD	# <CJK>
+0xBAFC	0x7DD2	# <CJK>
+0xBAFD	0x7DC7	# <CJK>
+0xBAFE	0x7DAC	# <CJK>
+0xBB40	0x7F70	# <CJK>
+0xBB41	0x7FE0	# <CJK>
+0xBB42	0x7FE1	# <CJK>
+0xBB43	0x7FDF	# <CJK>
+0xBB44	0x805E	# <CJK>
+0xBB45	0x805A	# <CJK>
+0xBB46	0x8087	# <CJK>
+0xBB47	0x8150	# <CJK>
+0xBB48	0x8180	# <CJK>
+0xBB49	0x818F	# <CJK>
+0xBB4A	0x8188	# <CJK>
+0xBB4B	0x818A	# <CJK>
+0xBB4C	0x817F	# <CJK>
+0xBB4D	0x8182	# <CJK>
+0xBB4E	0x81E7	# <CJK>
+0xBB4F	0x81FA	# <CJK>
+0xBB50	0x8207	# <CJK>
+0xBB51	0x8214	# <CJK>
+0xBB52	0x821E	# <CJK>
+0xBB53	0x824B	# <CJK>
+0xBB54	0x84C9	# <CJK>
+0xBB55	0x84BF	# <CJK>
+0xBB56	0x84C6	# <CJK>
+0xBB57	0x84C4	# <CJK>
+0xBB58	0x8499	# <CJK>
+0xBB59	0x849E	# <CJK>
+0xBB5A	0x84B2	# <CJK>
+0xBB5B	0x849C	# <CJK>
+0xBB5C	0x84CB	# <CJK>
+0xBB5D	0x84B8	# <CJK>
+0xBB5E	0x84C0	# <CJK>
+0xBB5F	0x84D3	# <CJK>
+0xBB60	0x8490	# <CJK>
+0xBB61	0x84BC	# <CJK>
+0xBB62	0x84D1	# <CJK>
+0xBB63	0x84CA	# <CJK>
+0xBB64	0x873F	# <CJK>
+0xBB65	0x871C	# <CJK>
+0xBB66	0x873B	# <CJK>
+0xBB67	0x8722	# <CJK>
+0xBB68	0x8725	# <CJK>
+0xBB69	0x8734	# <CJK>
+0xBB6A	0x8718	# <CJK>
+0xBB6B	0x8755	# <CJK>
+0xBB6C	0x8737	# <CJK>
+0xBB6D	0x8729	# <CJK>
+0xBB6E	0x88F3	# <CJK>
+0xBB6F	0x8902	# <CJK>
+0xBB70	0x88F4	# <CJK>
+0xBB71	0x88F9	# <CJK>
+0xBB72	0x88F8	# <CJK>
+0xBB73	0x88FD	# <CJK>
+0xBB74	0x88E8	# <CJK>
+0xBB75	0x891A	# <CJK>
+0xBB76	0x88EF	# <CJK>
+0xBB77	0x8AA6	# <CJK>
+0xBB78	0x8A8C	# <CJK>
+0xBB79	0x8A9E	# <CJK>
+0xBB7A	0x8AA3	# <CJK>
+0xBB7B	0x8A8D	# <CJK>
+0xBB7C	0x8AA1	# <CJK>
+0xBB7D	0x8A93	# <CJK>
+0xBB7E	0x8AA4	# <CJK>
+0xBBA1	0x8AAA	# <CJK>
+0xBBA2	0x8AA5	# <CJK>
+0xBBA3	0x8AA8	# <CJK>
+0xBBA4	0x8A98	# <CJK>
+0xBBA5	0x8A91	# <CJK>
+0xBBA6	0x8A9A	# <CJK>
+0xBBA7	0x8AA7	# <CJK>
+0xBBA8	0x8C6A	# <CJK>
+0xBBA9	0x8C8D	# <CJK>
+0xBBAA	0x8C8C	# <CJK>
+0xBBAB	0x8CD3	# <CJK>
+0xBBAC	0x8CD1	# <CJK>
+0xBBAD	0x8CD2	# <CJK>
+0xBBAE	0x8D6B	# <CJK>
+0xBBAF	0x8D99	# <CJK>
+0xBBB0	0x8D95	# <CJK>
+0xBBB1	0x8DFC	# <CJK>
+0xBBB2	0x8F14	# <CJK>
+0xBBB3	0x8F12	# <CJK>
+0xBBB4	0x8F15	# <CJK>
+0xBBB5	0x8F13	# <CJK>
+0xBBB6	0x8FA3	# <CJK>
+0xBBB7	0x9060	# <CJK>
+0xBBB8	0x9058	# <CJK>
+0xBBB9	0x905C	# <CJK>
+0xBBBA	0x9063	# <CJK>
+0xBBBB	0x9059	# <CJK>
+0xBBBC	0x905E	# <CJK>
+0xBBBD	0x9062	# <CJK>
+0xBBBE	0x905D	# <CJK>
+0xBBBF	0x905B	# <CJK>
+0xBBC0	0x9119	# <CJK>
+0xBBC1	0x9118	# <CJK>
+0xBBC2	0x911E	# <CJK>
+0xBBC3	0x9175	# <CJK>
+0xBBC4	0x9178	# <CJK>
+0xBBC5	0x9177	# <CJK>
+0xBBC6	0x9174	# <CJK>
+0xBBC7	0x9278	# <CJK>
+0xBBC8	0x9280	# <CJK>
+0xBBC9	0x9285	# <CJK>
+0xBBCA	0x9298	# <CJK>
+0xBBCB	0x9296	# <CJK>
+0xBBCC	0x927B	# <CJK>
+0xBBCD	0x9293	# <CJK>
+0xBBCE	0x929C	# <CJK>
+0xBBCF	0x92A8	# <CJK>
+0xBBD0	0x927C	# <CJK>
+0xBBD1	0x9291	# <CJK>
+0xBBD2	0x95A1	# <CJK>
+0xBBD3	0x95A8	# <CJK>
+0xBBD4	0x95A9	# <CJK>
+0xBBD5	0x95A3	# <CJK>
+0xBBD6	0x95A5	# <CJK>
+0xBBD7	0x95A4	# <CJK>
+0xBBD8	0x9699	# <CJK>
+0xBBD9	0x969C	# <CJK>
+0xBBDA	0x969B	# <CJK>
+0xBBDB	0x96CC	# <CJK>
+0xBBDC	0x96D2	# <CJK>
+0xBBDD	0x9700	# <CJK>
+0xBBDE	0x977C	# <CJK>
+0xBBDF	0x9785	# <CJK>
+0xBBE0	0x97F6	# <CJK>
+0xBBE1	0x9817	# <CJK>
+0xBBE2	0x9818	# <CJK>
+0xBBE3	0x98AF	# <CJK>
+0xBBE4	0x98B1	# <CJK>
+0xBBE5	0x9903	# <CJK>
+0xBBE6	0x9905	# <CJK>
+0xBBE7	0x990C	# <CJK>
+0xBBE8	0x9909	# <CJK>
+0xBBE9	0x99C1	# <CJK>
+0xBBEA	0x9AAF	# <CJK>
+0xBBEB	0x9AB0	# <CJK>
+0xBBEC	0x9AE6	# <CJK>
+0xBBED	0x9B41	# <CJK>
+0xBBEE	0x9B42	# <CJK>
+0xBBEF	0x9CF4	# <CJK>
+0xBBF0	0x9CF6	# <CJK>
+0xBBF1	0x9CF3	# <CJK>
+0xBBF2	0x9EBC	# <CJK>
+0xBBF3	0x9F3B	# <CJK>
+0xBBF4	0x9F4A	# <CJK>
+0xBBF5	0x5104	# <CJK>
+0xBBF6	0x5100	# <CJK>
+0xBBF7	0x50FB	# <CJK>
+0xBBF8	0x50F5	# <CJK>
+0xBBF9	0x50F9	# <CJK>
+0xBBFA	0x5102	# <CJK>
+0xBBFB	0x5108	# <CJK>
+0xBBFC	0x5109	# <CJK>
+0xBBFD	0x5105	# <CJK>
+0xBBFE	0x51DC	# <CJK>
+0xBC40	0x5287	# <CJK>
+0xBC41	0x5288	# <CJK>
+0xBC42	0x5289	# <CJK>
+0xBC43	0x528D	# <CJK>
+0xBC44	0x528A	# <CJK>
+0xBC45	0x52F0	# <CJK>
+0xBC46	0x53B2	# <CJK>
+0xBC47	0x562E	# <CJK>
+0xBC48	0x563B	# <CJK>
+0xBC49	0x5639	# <CJK>
+0xBC4A	0x5632	# <CJK>
+0xBC4B	0x563F	# <CJK>
+0xBC4C	0x5634	# <CJK>
+0xBC4D	0x5629	# <CJK>
+0xBC4E	0x5653	# <CJK>
+0xBC4F	0x564E	# <CJK>
+0xBC50	0x5657	# <CJK>
+0xBC51	0x5674	# <CJK>
+0xBC52	0x5636	# <CJK>
+0xBC53	0x562F	# <CJK>
+0xBC54	0x5630	# <CJK>
+0xBC55	0x5880	# <CJK>
+0xBC56	0x589F	# <CJK>
+0xBC57	0x589E	# <CJK>
+0xBC58	0x58B3	# <CJK>
+0xBC59	0x589C	# <CJK>
+0xBC5A	0x58AE	# <CJK>
+0xBC5B	0x58A9	# <CJK>
+0xBC5C	0x58A6	# <CJK>
+0xBC5D	0x596D	# <CJK>
+0xBC5E	0x5B09	# <CJK>
+0xBC5F	0x5AFB	# <CJK>
+0xBC60	0x5B0B	# <CJK>
+0xBC61	0x5AF5	# <CJK>
+0xBC62	0x5B0C	# <CJK>
+0xBC63	0x5B08	# <CJK>
+0xBC64	0x5BEE	# <CJK>
+0xBC65	0x5BEC	# <CJK>
+0xBC66	0x5BE9	# <CJK>
+0xBC67	0x5BEB	# <CJK>
+0xBC68	0x5C64	# <CJK>
+0xBC69	0x5C65	# <CJK>
+0xBC6A	0x5D9D	# <CJK>
+0xBC6B	0x5D94	# <CJK>
+0xBC6C	0x5E62	# <CJK>
+0xBC6D	0x5E5F	# <CJK>
+0xBC6E	0x5E61	# <CJK>
+0xBC6F	0x5EE2	# <CJK>
+0xBC70	0x5EDA	# <CJK>
+0xBC71	0x5EDF	# <CJK>
+0xBC72	0x5EDD	# <CJK>
+0xBC73	0x5EE3	# <CJK>
+0xBC74	0x5EE0	# <CJK>
+0xBC75	0x5F48	# <CJK>
+0xBC76	0x5F71	# <CJK>
+0xBC77	0x5FB7	# <CJK>
+0xBC78	0x5FB5	# <CJK>
+0xBC79	0x6176	# <CJK>
+0xBC7A	0x6167	# <CJK>
+0xBC7B	0x616E	# <CJK>
+0xBC7C	0x615D	# <CJK>
+0xBC7D	0x6155	# <CJK>
+0xBC7E	0x6182	# <CJK>
+0xBCA1	0x617C	# <CJK>
+0xBCA2	0x6170	# <CJK>
+0xBCA3	0x616B	# <CJK>
+0xBCA4	0x617E	# <CJK>
+0xBCA5	0x61A7	# <CJK>
+0xBCA6	0x6190	# <CJK>
+0xBCA7	0x61AB	# <CJK>
+0xBCA8	0x618E	# <CJK>
+0xBCA9	0x61AC	# <CJK>
+0xBCAA	0x619A	# <CJK>
+0xBCAB	0x61A4	# <CJK>
+0xBCAC	0x6194	# <CJK>
+0xBCAD	0x61AE	# <CJK>
+0xBCAE	0x622E	# <CJK>
+0xBCAF	0x6469	# <CJK>
+0xBCB0	0x646F	# <CJK>
+0xBCB1	0x6479	# <CJK>
+0xBCB2	0x649E	# <CJK>
+0xBCB3	0x64B2	# <CJK>
+0xBCB4	0x6488	# <CJK>
+0xBCB5	0x6490	# <CJK>
+0xBCB6	0x64B0	# <CJK>
+0xBCB7	0x64A5	# <CJK>
+0xBCB8	0x6493	# <CJK>
+0xBCB9	0x6495	# <CJK>
+0xBCBA	0x64A9	# <CJK>
+0xBCBB	0x6492	# <CJK>
+0xBCBC	0x64AE	# <CJK>
+0xBCBD	0x64AD	# <CJK>
+0xBCBE	0x64AB	# <CJK>
+0xBCBF	0x649A	# <CJK>
+0xBCC0	0x64AC	# <CJK>
+0xBCC1	0x6499	# <CJK>
+0xBCC2	0x64A2	# <CJK>
+0xBCC3	0x64B3	# <CJK>
+0xBCC4	0x6575	# <CJK>
+0xBCC5	0x6577	# <CJK>
+0xBCC6	0x6578	# <CJK>
+0xBCC7	0x66AE	# <CJK>
+0xBCC8	0x66AB	# <CJK>
+0xBCC9	0x66B4	# <CJK>
+0xBCCA	0x66B1	# <CJK>
+0xBCCB	0x6A23	# <CJK>
+0xBCCC	0x6A1F	# <CJK>
+0xBCCD	0x69E8	# <CJK>
+0xBCCE	0x6A01	# <CJK>
+0xBCCF	0x6A1E	# <CJK>
+0xBCD0	0x6A19	# <CJK>
+0xBCD1	0x69FD	# <CJK>
+0xBCD2	0x6A21	# <CJK>
+0xBCD3	0x6A13	# <CJK>
+0xBCD4	0x6A0A	# <CJK>
+0xBCD5	0x69F3	# <CJK>
+0xBCD6	0x6A02	# <CJK>
+0xBCD7	0x6A05	# <CJK>
+0xBCD8	0x69ED	# <CJK>
+0xBCD9	0x6A11	# <CJK>
+0xBCDA	0x6B50	# <CJK>
+0xBCDB	0x6B4E	# <CJK>
+0xBCDC	0x6BA4	# <CJK>
+0xBCDD	0x6BC5	# <CJK>
+0xBCDE	0x6BC6	# <CJK>
+0xBCDF	0x6F3F	# <CJK>
+0xBCE0	0x6F7C	# <CJK>
+0xBCE1	0x6F84	# <CJK>
+0xBCE2	0x6F51	# <CJK>
+0xBCE3	0x6F66	# <CJK>
+0xBCE4	0x6F54	# <CJK>
+0xBCE5	0x6F86	# <CJK>
+0xBCE6	0x6F6D	# <CJK>
+0xBCE7	0x6F5B	# <CJK>
+0xBCE8	0x6F78	# <CJK>
+0xBCE9	0x6F6E	# <CJK>
+0xBCEA	0x6F8E	# <CJK>
+0xBCEB	0x6F7A	# <CJK>
+0xBCEC	0x6F70	# <CJK>
+0xBCED	0x6F64	# <CJK>
+0xBCEE	0x6F97	# <CJK>
+0xBCEF	0x6F58	# <CJK>
+0xBCF0	0x6ED5	# <CJK>
+0xBCF1	0x6F6F	# <CJK>
+0xBCF2	0x6F60	# <CJK>
+0xBCF3	0x6F5F	# <CJK>
+0xBCF4	0x719F	# <CJK>
+0xBCF5	0x71AC	# <CJK>
+0xBCF6	0x71B1	# <CJK>
+0xBCF7	0x71A8	# <CJK>
+0xBCF8	0x7256	# <CJK>
+0xBCF9	0x729B	# <CJK>
+0xBCFA	0x734E	# <CJK>
+0xBCFB	0x7357	# <CJK>
+0xBCFC	0x7469	# <CJK>
+0xBCFD	0x748B	# <CJK>
+0xBCFE	0x7483	# <CJK>
+0xBD40	0x747E	# <CJK>
+0xBD41	0x7480	# <CJK>
+0xBD42	0x757F	# <CJK>
+0xBD43	0x7620	# <CJK>
+0xBD44	0x7629	# <CJK>
+0xBD45	0x761F	# <CJK>
+0xBD46	0x7624	# <CJK>
+0xBD47	0x7626	# <CJK>
+0xBD48	0x7621	# <CJK>
+0xBD49	0x7622	# <CJK>
+0xBD4A	0x769A	# <CJK>
+0xBD4B	0x76BA	# <CJK>
+0xBD4C	0x76E4	# <CJK>
+0xBD4D	0x778E	# <CJK>
+0xBD4E	0x7787	# <CJK>
+0xBD4F	0x778C	# <CJK>
+0xBD50	0x7791	# <CJK>
+0xBD51	0x778B	# <CJK>
+0xBD52	0x78CB	# <CJK>
+0xBD53	0x78C5	# <CJK>
+0xBD54	0x78BA	# <CJK>
+0xBD55	0x78CA	# <CJK>
+0xBD56	0x78BE	# <CJK>
+0xBD57	0x78D5	# <CJK>
+0xBD58	0x78BC	# <CJK>
+0xBD59	0x78D0	# <CJK>
+0xBD5A	0x7A3F	# <CJK>
+0xBD5B	0x7A3C	# <CJK>
+0xBD5C	0x7A40	# <CJK>
+0xBD5D	0x7A3D	# <CJK>
+0xBD5E	0x7A37	# <CJK>
+0xBD5F	0x7A3B	# <CJK>
+0xBD60	0x7AAF	# <CJK>
+0xBD61	0x7AAE	# <CJK>
+0xBD62	0x7BAD	# <CJK>
+0xBD63	0x7BB1	# <CJK>
+0xBD64	0x7BC4	# <CJK>
+0xBD65	0x7BB4	# <CJK>
+0xBD66	0x7BC6	# <CJK>
+0xBD67	0x7BC7	# <CJK>
+0xBD68	0x7BC1	# <CJK>
+0xBD69	0x7BA0	# <CJK>
+0xBD6A	0x7BCC	# <CJK>
+0xBD6B	0x7CCA	# <CJK>
+0xBD6C	0x7DE0	# <CJK>
+0xBD6D	0x7DF4	# <CJK>
+0xBD6E	0x7DEF	# <CJK>
+0xBD6F	0x7DFB	# <CJK>
+0xBD70	0x7DD8	# <CJK>
+0xBD71	0x7DEC	# <CJK>
+0xBD72	0x7DDD	# <CJK>
+0xBD73	0x7DE8	# <CJK>
+0xBD74	0x7DE3	# <CJK>
+0xBD75	0x7DDA	# <CJK>
+0xBD76	0x7DDE	# <CJK>
+0xBD77	0x7DE9	# <CJK>
+0xBD78	0x7D9E	# <CJK>
+0xBD79	0x7DD9	# <CJK>
+0xBD7A	0x7DF2	# <CJK>
+0xBD7B	0x7DF9	# <CJK>
+0xBD7C	0x7F75	# <CJK>
+0xBD7D	0x7F77	# <CJK>
+0xBD7E	0x7FAF	# <CJK>
+0xBDA1	0x7FE9	# <CJK>
+0xBDA2	0x8026	# <CJK>
+0xBDA3	0x819B	# <CJK>
+0xBDA4	0x819C	# <CJK>
+0xBDA5	0x819D	# <CJK>
+0xBDA6	0x81A0	# <CJK>
+0xBDA7	0x819A	# <CJK>
+0xBDA8	0x8198	# <CJK>
+0xBDA9	0x8517	# <CJK>
+0xBDAA	0x853D	# <CJK>
+0xBDAB	0x851A	# <CJK>
+0xBDAC	0x84EE	# <CJK>
+0xBDAD	0x852C	# <CJK>
+0xBDAE	0x852D	# <CJK>
+0xBDAF	0x8513	# <CJK>
+0xBDB0	0x8511	# <CJK>
+0xBDB1	0x8523	# <CJK>
+0xBDB2	0x8521	# <CJK>
+0xBDB3	0x8514	# <CJK>
+0xBDB4	0x84EC	# <CJK>
+0xBDB5	0x8525	# <CJK>
+0xBDB6	0x84FF	# <CJK>
+0xBDB7	0x8506	# <CJK>
+0xBDB8	0x8782	# <CJK>
+0xBDB9	0x8774	# <CJK>
+0xBDBA	0x8776	# <CJK>
+0xBDBB	0x8760	# <CJK>
+0xBDBC	0x8766	# <CJK>
+0xBDBD	0x8778	# <CJK>
+0xBDBE	0x8768	# <CJK>
+0xBDBF	0x8759	# <CJK>
+0xBDC0	0x8757	# <CJK>
+0xBDC1	0x874C	# <CJK>
+0xBDC2	0x8753	# <CJK>
+0xBDC3	0x885B	# <CJK>
+0xBDC4	0x885D	# <CJK>
+0xBDC5	0x8910	# <CJK>
+0xBDC6	0x8907	# <CJK>
+0xBDC7	0x8912	# <CJK>
+0xBDC8	0x8913	# <CJK>
+0xBDC9	0x8915	# <CJK>
+0xBDCA	0x890A	# <CJK>
+0xBDCB	0x8ABC	# <CJK>
+0xBDCC	0x8AD2	# <CJK>
+0xBDCD	0x8AC7	# <CJK>
+0xBDCE	0x8AC4	# <CJK>
+0xBDCF	0x8A95	# <CJK>
+0xBDD0	0x8ACB	# <CJK>
+0xBDD1	0x8AF8	# <CJK>
+0xBDD2	0x8AB2	# <CJK>
+0xBDD3	0x8AC9	# <CJK>
+0xBDD4	0x8AC2	# <CJK>
+0xBDD5	0x8ABF	# <CJK>
+0xBDD6	0x8AB0	# <CJK>
+0xBDD7	0x8AD6	# <CJK>
+0xBDD8	0x8ACD	# <CJK>
+0xBDD9	0x8AB6	# <CJK>
+0xBDDA	0x8AB9	# <CJK>
+0xBDDB	0x8ADB	# <CJK>
+0xBDDC	0x8C4C	# <CJK>
+0xBDDD	0x8C4E	# <CJK>
+0xBDDE	0x8C6C	# <CJK>
+0xBDDF	0x8CE0	# <CJK>
+0xBDE0	0x8CDE	# <CJK>
+0xBDE1	0x8CE6	# <CJK>
+0xBDE2	0x8CE4	# <CJK>
+0xBDE3	0x8CEC	# <CJK>
+0xBDE4	0x8CED	# <CJK>
+0xBDE5	0x8CE2	# <CJK>
+0xBDE6	0x8CE3	# <CJK>
+0xBDE7	0x8CDC	# <CJK>
+0xBDE8	0x8CEA	# <CJK>
+0xBDE9	0x8CE1	# <CJK>
+0xBDEA	0x8D6D	# <CJK>
+0xBDEB	0x8D9F	# <CJK>
+0xBDEC	0x8DA3	# <CJK>
+0xBDED	0x8E2B	# <CJK>
+0xBDEE	0x8E10	# <CJK>
+0xBDEF	0x8E1D	# <CJK>
+0xBDF0	0x8E22	# <CJK>
+0xBDF1	0x8E0F	# <CJK>
+0xBDF2	0x8E29	# <CJK>
+0xBDF3	0x8E1F	# <CJK>
+0xBDF4	0x8E21	# <CJK>
+0xBDF5	0x8E1E	# <CJK>
+0xBDF6	0x8EBA	# <CJK>
+0xBDF7	0x8F1D	# <CJK>
+0xBDF8	0x8F1B	# <CJK>
+0xBDF9	0x8F1F	# <CJK>
+0xBDFA	0x8F29	# <CJK>
+0xBDFB	0x8F26	# <CJK>
+0xBDFC	0x8F2A	# <CJK>
+0xBDFD	0x8F1C	# <CJK>
+0xBDFE	0x8F1E	# <CJK>
+0xBE40	0x8F25	# <CJK>
+0xBE41	0x9069	# <CJK>
+0xBE42	0x906E	# <CJK>
+0xBE43	0x9068	# <CJK>
+0xBE44	0x906D	# <CJK>
+0xBE45	0x9077	# <CJK>
+0xBE46	0x9130	# <CJK>
+0xBE47	0x912D	# <CJK>
+0xBE48	0x9127	# <CJK>
+0xBE49	0x9131	# <CJK>
+0xBE4A	0x9187	# <CJK>
+0xBE4B	0x9189	# <CJK>
+0xBE4C	0x918B	# <CJK>
+0xBE4D	0x9183	# <CJK>
+0xBE4E	0x92C5	# <CJK>
+0xBE4F	0x92BB	# <CJK>
+0xBE50	0x92B7	# <CJK>
+0xBE51	0x92EA	# <CJK>
+0xBE52	0x92AC	# <CJK>
+0xBE53	0x92E4	# <CJK>
+0xBE54	0x92C1	# <CJK>
+0xBE55	0x92B3	# <CJK>
+0xBE56	0x92BC	# <CJK>
+0xBE57	0x92D2	# <CJK>
+0xBE58	0x92C7	# <CJK>
+0xBE59	0x92F0	# <CJK>
+0xBE5A	0x92B2	# <CJK>
+0xBE5B	0x95AD	# <CJK>
+0xBE5C	0x95B1	# <CJK>
+0xBE5D	0x9704	# <CJK>
+0xBE5E	0x9706	# <CJK>
+0xBE5F	0x9707	# <CJK>
+0xBE60	0x9709	# <CJK>
+0xBE61	0x9760	# <CJK>
+0xBE62	0x978D	# <CJK>
+0xBE63	0x978B	# <CJK>
+0xBE64	0x978F	# <CJK>
+0xBE65	0x9821	# <CJK>
+0xBE66	0x982B	# <CJK>
+0xBE67	0x981C	# <CJK>
+0xBE68	0x98B3	# <CJK>
+0xBE69	0x990A	# <CJK>
+0xBE6A	0x9913	# <CJK>
+0xBE6B	0x9912	# <CJK>
+0xBE6C	0x9918	# <CJK>
+0xBE6D	0x99DD	# <CJK>
+0xBE6E	0x99D0	# <CJK>
+0xBE6F	0x99DF	# <CJK>
+0xBE70	0x99DB	# <CJK>
+0xBE71	0x99D1	# <CJK>
+0xBE72	0x99D5	# <CJK>
+0xBE73	0x99D2	# <CJK>
+0xBE74	0x99D9	# <CJK>
+0xBE75	0x9AB7	# <CJK>
+0xBE76	0x9AEE	# <CJK>
+0xBE77	0x9AEF	# <CJK>
+0xBE78	0x9B27	# <CJK>
+0xBE79	0x9B45	# <CJK>
+0xBE7A	0x9B44	# <CJK>
+0xBE7B	0x9B77	# <CJK>
+0xBE7C	0x9B6F	# <CJK>
+0xBE7D	0x9D06	# <CJK>
+0xBE7E	0x9D09	# <CJK>
+0xBEA1	0x9D03	# <CJK>
+0xBEA2	0x9EA9	# <CJK>
+0xBEA3	0x9EBE	# <CJK>
+0xBEA4	0x9ECE	# <CJK>
+0xBEA5	0x58A8	# <CJK>
+0xBEA6	0x9F52	# <CJK>
+0xBEA7	0x5112	# <CJK>
+0xBEA8	0x5118	# <CJK>
+0xBEA9	0x5114	# <CJK>
+0xBEAA	0x5110	# <CJK>
+0xBEAB	0x5115	# <CJK>
+0xBEAC	0x5180	# <CJK>
+0xBEAD	0x51AA	# <CJK>
+0xBEAE	0x51DD	# <CJK>
+0xBEAF	0x5291	# <CJK>
+0xBEB0	0x5293	# <CJK>
+0xBEB1	0x52F3	# <CJK>
+0xBEB2	0x5659	# <CJK>
+0xBEB3	0x566B	# <CJK>
+0xBEB4	0x5679	# <CJK>
+0xBEB5	0x5669	# <CJK>
+0xBEB6	0x5664	# <CJK>
+0xBEB7	0x5678	# <CJK>
+0xBEB8	0x566A	# <CJK>
+0xBEB9	0x5668	# <CJK>
+0xBEBA	0x5665	# <CJK>
+0xBEBB	0x5671	# <CJK>
+0xBEBC	0x566F	# <CJK>
+0xBEBD	0x566C	# <CJK>
+0xBEBE	0x5662	# <CJK>
+0xBEBF	0x5676	# <CJK>
+0xBEC0	0x58C1	# <CJK>
+0xBEC1	0x58BE	# <CJK>
+0xBEC2	0x58C7	# <CJK>
+0xBEC3	0x58C5	# <CJK>
+0xBEC4	0x596E	# <CJK>
+0xBEC5	0x5B1D	# <CJK>
+0xBEC6	0x5B34	# <CJK>
+0xBEC7	0x5B78	# <CJK>
+0xBEC8	0x5BF0	# <CJK>
+0xBEC9	0x5C0E	# <CJK>
+0xBECA	0x5F4A	# <CJK>
+0xBECB	0x61B2	# <CJK>
+0xBECC	0x6191	# <CJK>
+0xBECD	0x61A9	# <CJK>
+0xBECE	0x618A	# <CJK>
+0xBECF	0x61CD	# <CJK>
+0xBED0	0x61B6	# <CJK>
+0xBED1	0x61BE	# <CJK>
+0xBED2	0x61CA	# <CJK>
+0xBED3	0x61C8	# <CJK>
+0xBED4	0x6230	# <CJK>
+0xBED5	0x64C5	# <CJK>
+0xBED6	0x64C1	# <CJK>
+0xBED7	0x64CB	# <CJK>
+0xBED8	0x64BB	# <CJK>
+0xBED9	0x64BC	# <CJK>
+0xBEDA	0x64DA	# <CJK>
+0xBEDB	0x64C4	# <CJK>
+0xBEDC	0x64C7	# <CJK>
+0xBEDD	0x64C2	# <CJK>
+0xBEDE	0x64CD	# <CJK>
+0xBEDF	0x64BF	# <CJK>
+0xBEE0	0x64D2	# <CJK>
+0xBEE1	0x64D4	# <CJK>
+0xBEE2	0x64BE	# <CJK>
+0xBEE3	0x6574	# <CJK>
+0xBEE4	0x66C6	# <CJK>
+0xBEE5	0x66C9	# <CJK>
+0xBEE6	0x66B9	# <CJK>
+0xBEE7	0x66C4	# <CJK>
+0xBEE8	0x66C7	# <CJK>
+0xBEE9	0x66B8	# <CJK>
+0xBEEA	0x6A3D	# <CJK>
+0xBEEB	0x6A38	# <CJK>
+0xBEEC	0x6A3A	# <CJK>
+0xBEED	0x6A59	# <CJK>
+0xBEEE	0x6A6B	# <CJK>
+0xBEEF	0x6A58	# <CJK>
+0xBEF0	0x6A39	# <CJK>
+0xBEF1	0x6A44	# <CJK>
+0xBEF2	0x6A62	# <CJK>
+0xBEF3	0x6A61	# <CJK>
+0xBEF4	0x6A4B	# <CJK>
+0xBEF5	0x6A47	# <CJK>
+0xBEF6	0x6A35	# <CJK>
+0xBEF7	0x6A5F	# <CJK>
+0xBEF8	0x6A48	# <CJK>
+0xBEF9	0x6B59	# <CJK>
+0xBEFA	0x6B77	# <CJK>
+0xBEFB	0x6C05	# <CJK>
+0xBEFC	0x6FC2	# <CJK>
+0xBEFD	0x6FB1	# <CJK>
+0xBEFE	0x6FA1	# <CJK>
+0xBF40	0x6FC3	# <CJK>
+0xBF41	0x6FA4	# <CJK>
+0xBF42	0x6FC1	# <CJK>
+0xBF43	0x6FA7	# <CJK>
+0xBF44	0x6FB3	# <CJK>
+0xBF45	0x6FC0	# <CJK>
+0xBF46	0x6FB9	# <CJK>
+0xBF47	0x6FB6	# <CJK>
+0xBF48	0x6FA6	# <CJK>
+0xBF49	0x6FA0	# <CJK>
+0xBF4A	0x6FB4	# <CJK>
+0xBF4B	0x71BE	# <CJK>
+0xBF4C	0x71C9	# <CJK>
+0xBF4D	0x71D0	# <CJK>
+0xBF4E	0x71D2	# <CJK>
+0xBF4F	0x71C8	# <CJK>
+0xBF50	0x71D5	# <CJK>
+0xBF51	0x71B9	# <CJK>
+0xBF52	0x71CE	# <CJK>
+0xBF53	0x71D9	# <CJK>
+0xBF54	0x71DC	# <CJK>
+0xBF55	0x71C3	# <CJK>
+0xBF56	0x71C4	# <CJK>
+0xBF57	0x7368	# <CJK>
+0xBF58	0x749C	# <CJK>
+0xBF59	0x74A3	# <CJK>
+0xBF5A	0x7498	# <CJK>
+0xBF5B	0x749F	# <CJK>
+0xBF5C	0x749E	# <CJK>
+0xBF5D	0x74E2	# <CJK>
+0xBF5E	0x750C	# <CJK>
+0xBF5F	0x750D	# <CJK>
+0xBF60	0x7634	# <CJK>
+0xBF61	0x7638	# <CJK>
+0xBF62	0x763A	# <CJK>
+0xBF63	0x76E7	# <CJK>
+0xBF64	0x76E5	# <CJK>
+0xBF65	0x77A0	# <CJK>
+0xBF66	0x779E	# <CJK>
+0xBF67	0x779F	# <CJK>
+0xBF68	0x77A5	# <CJK>
+0xBF69	0x78E8	# <CJK>
+0xBF6A	0x78DA	# <CJK>
+0xBF6B	0x78EC	# <CJK>
+0xBF6C	0x78E7	# <CJK>
+0xBF6D	0x79A6	# <CJK>
+0xBF6E	0x7A4D	# <CJK>
+0xBF6F	0x7A4E	# <CJK>
+0xBF70	0x7A46	# <CJK>
+0xBF71	0x7A4C	# <CJK>
+0xBF72	0x7A4B	# <CJK>
+0xBF73	0x7ABA	# <CJK>
+0xBF74	0x7BD9	# <CJK>
+0xBF75	0x7C11	# <CJK>
+0xBF76	0x7BC9	# <CJK>
+0xBF77	0x7BE4	# <CJK>
+0xBF78	0x7BDB	# <CJK>
+0xBF79	0x7BE1	# <CJK>
+0xBF7A	0x7BE9	# <CJK>
+0xBF7B	0x7BE6	# <CJK>
+0xBF7C	0x7CD5	# <CJK>
+0xBF7D	0x7CD6	# <CJK>
+0xBF7E	0x7E0A	# <CJK>
+0xBFA1	0x7E11	# <CJK>
+0xBFA2	0x7E08	# <CJK>
+0xBFA3	0x7E1B	# <CJK>
+0xBFA4	0x7E23	# <CJK>
+0xBFA5	0x7E1E	# <CJK>
+0xBFA6	0x7E1D	# <CJK>
+0xBFA7	0x7E09	# <CJK>
+0xBFA8	0x7E10	# <CJK>
+0xBFA9	0x7F79	# <CJK>
+0xBFAA	0x7FB2	# <CJK>
+0xBFAB	0x7FF0	# <CJK>
+0xBFAC	0x7FF1	# <CJK>
+0xBFAD	0x7FEE	# <CJK>
+0xBFAE	0x8028	# <CJK>
+0xBFAF	0x81B3	# <CJK>
+0xBFB0	0x81A9	# <CJK>
+0xBFB1	0x81A8	# <CJK>
+0xBFB2	0x81FB	# <CJK>
+0xBFB3	0x8208	# <CJK>
+0xBFB4	0x8258	# <CJK>
+0xBFB5	0x8259	# <CJK>
+0xBFB6	0x854A	# <CJK>
+0xBFB7	0x8559	# <CJK>
+0xBFB8	0x8548	# <CJK>
+0xBFB9	0x8568	# <CJK>
+0xBFBA	0x8569	# <CJK>
+0xBFBB	0x8543	# <CJK>
+0xBFBC	0x8549	# <CJK>
+0xBFBD	0x856D	# <CJK>
+0xBFBE	0x856A	# <CJK>
+0xBFBF	0x855E	# <CJK>
+0xBFC0	0x8783	# <CJK>
+0xBFC1	0x879F	# <CJK>
+0xBFC2	0x879E	# <CJK>
+0xBFC3	0x87A2	# <CJK>
+0xBFC4	0x878D	# <CJK>
+0xBFC5	0x8861	# <CJK>
+0xBFC6	0x892A	# <CJK>
+0xBFC7	0x8932	# <CJK>
+0xBFC8	0x8925	# <CJK>
+0xBFC9	0x892B	# <CJK>
+0xBFCA	0x8921	# <CJK>
+0xBFCB	0x89AA	# <CJK>
+0xBFCC	0x89A6	# <CJK>
+0xBFCD	0x8AE6	# <CJK>
+0xBFCE	0x8AFA	# <CJK>
+0xBFCF	0x8AEB	# <CJK>
+0xBFD0	0x8AF1	# <CJK>
+0xBFD1	0x8B00	# <CJK>
+0xBFD2	0x8ADC	# <CJK>
+0xBFD3	0x8AE7	# <CJK>
+0xBFD4	0x8AEE	# <CJK>
+0xBFD5	0x8AFE	# <CJK>
+0xBFD6	0x8B01	# <CJK>
+0xBFD7	0x8B02	# <CJK>
+0xBFD8	0x8AF7	# <CJK>
+0xBFD9	0x8AED	# <CJK>
+0xBFDA	0x8AF3	# <CJK>
+0xBFDB	0x8AF6	# <CJK>
+0xBFDC	0x8AFC	# <CJK>
+0xBFDD	0x8C6B	# <CJK>
+0xBFDE	0x8C6D	# <CJK>
+0xBFDF	0x8C93	# <CJK>
+0xBFE0	0x8CF4	# <CJK>
+0xBFE1	0x8E44	# <CJK>
+0xBFE2	0x8E31	# <CJK>
+0xBFE3	0x8E34	# <CJK>
+0xBFE4	0x8E42	# <CJK>
+0xBFE5	0x8E39	# <CJK>
+0xBFE6	0x8E35	# <CJK>
+0xBFE7	0x8F3B	# <CJK>
+0xBFE8	0x8F2F	# <CJK>
+0xBFE9	0x8F38	# <CJK>
+0xBFEA	0x8F33	# <CJK>
+0xBFEB	0x8FA8	# <CJK>
+0xBFEC	0x8FA6	# <CJK>
+0xBFED	0x9075	# <CJK>
+0xBFEE	0x9074	# <CJK>
+0xBFEF	0x9078	# <CJK>
+0xBFF0	0x9072	# <CJK>
+0xBFF1	0x907C	# <CJK>
+0xBFF2	0x907A	# <CJK>
+0xBFF3	0x9134	# <CJK>
+0xBFF4	0x9192	# <CJK>
+0xBFF5	0x9320	# <CJK>
+0xBFF6	0x9336	# <CJK>
+0xBFF7	0x92F8	# <CJK>
+0xBFF8	0x9333	# <CJK>
+0xBFF9	0x932F	# <CJK>
+0xBFFA	0x9322	# <CJK>
+0xBFFB	0x92FC	# <CJK>
+0xBFFC	0x932B	# <CJK>
+0xBFFD	0x9304	# <CJK>
+0xBFFE	0x931A	# <CJK>
+0xC040	0x9310	# <CJK>
+0xC041	0x9326	# <CJK>
+0xC042	0x9321	# <CJK>
+0xC043	0x9315	# <CJK>
+0xC044	0x932E	# <CJK>
+0xC045	0x9319	# <CJK>
+0xC046	0x95BB	# <CJK>
+0xC047	0x96A7	# <CJK>
+0xC048	0x96A8	# <CJK>
+0xC049	0x96AA	# <CJK>
+0xC04A	0x96D5	# <CJK>
+0xC04B	0x970E	# <CJK>
+0xC04C	0x9711	# <CJK>
+0xC04D	0x9716	# <CJK>
+0xC04E	0x970D	# <CJK>
+0xC04F	0x9713	# <CJK>
+0xC050	0x970F	# <CJK>
+0xC051	0x975B	# <CJK>
+0xC052	0x975C	# <CJK>
+0xC053	0x9766	# <CJK>
+0xC054	0x9798	# <CJK>
+0xC055	0x9830	# <CJK>
+0xC056	0x9838	# <CJK>
+0xC057	0x983B	# <CJK>
+0xC058	0x9837	# <CJK>
+0xC059	0x982D	# <CJK>
+0xC05A	0x9839	# <CJK>
+0xC05B	0x9824	# <CJK>
+0xC05C	0x9910	# <CJK>
+0xC05D	0x9928	# <CJK>
+0xC05E	0x991E	# <CJK>
+0xC05F	0x991B	# <CJK>
+0xC060	0x9921	# <CJK>
+0xC061	0x991A	# <CJK>
+0xC062	0x99ED	# <CJK>
+0xC063	0x99E2	# <CJK>
+0xC064	0x99F1	# <CJK>
+0xC065	0x9AB8	# <CJK>
+0xC066	0x9ABC	# <CJK>
+0xC067	0x9AFB	# <CJK>
+0xC068	0x9AED	# <CJK>
+0xC069	0x9B28	# <CJK>
+0xC06A	0x9B91	# <CJK>
+0xC06B	0x9D15	# <CJK>
+0xC06C	0x9D23	# <CJK>
+0xC06D	0x9D26	# <CJK>
+0xC06E	0x9D28	# <CJK>
+0xC06F	0x9D12	# <CJK>
+0xC070	0x9D1B	# <CJK>
+0xC071	0x9ED8	# <CJK>
+0xC072	0x9ED4	# <CJK>
+0xC073	0x9F8D	# <CJK>
+0xC074	0x9F9C	# <CJK>
+0xC075	0x512A	# <CJK>
+0xC076	0x511F	# <CJK>
+0xC077	0x5121	# <CJK>
+0xC078	0x5132	# <CJK>
+0xC079	0x52F5	# <CJK>
+0xC07A	0x568E	# <CJK>
+0xC07B	0x5680	# <CJK>
+0xC07C	0x5690	# <CJK>
+0xC07D	0x5685	# <CJK>
+0xC07E	0x5687	# <CJK>
+0xC0A1	0x568F	# <CJK>
+0xC0A2	0x58D5	# <CJK>
+0xC0A3	0x58D3	# <CJK>
+0xC0A4	0x58D1	# <CJK>
+0xC0A5	0x58CE	# <CJK>
+0xC0A6	0x5B30	# <CJK>
+0xC0A7	0x5B2A	# <CJK>
+0xC0A8	0x5B24	# <CJK>
+0xC0A9	0x5B7A	# <CJK>
+0xC0AA	0x5C37	# <CJK>
+0xC0AB	0x5C68	# <CJK>
+0xC0AC	0x5DBC	# <CJK>
+0xC0AD	0x5DBA	# <CJK>
+0xC0AE	0x5DBD	# <CJK>
+0xC0AF	0x5DB8	# <CJK>
+0xC0B0	0x5E6B	# <CJK>
+0xC0B1	0x5F4C	# <CJK>
+0xC0B2	0x5FBD	# <CJK>
+0xC0B3	0x61C9	# <CJK>
+0xC0B4	0x61C2	# <CJK>
+0xC0B5	0x61C7	# <CJK>
+0xC0B6	0x61E6	# <CJK>
+0xC0B7	0x61CB	# <CJK>
+0xC0B8	0x6232	# <CJK>
+0xC0B9	0x6234	# <CJK>
+0xC0BA	0x64CE	# <CJK>
+0xC0BB	0x64CA	# <CJK>
+0xC0BC	0x64D8	# <CJK>
+0xC0BD	0x64E0	# <CJK>
+0xC0BE	0x64F0	# <CJK>
+0xC0BF	0x64E6	# <CJK>
+0xC0C0	0x64EC	# <CJK>
+0xC0C1	0x64F1	# <CJK>
+0xC0C2	0x64E2	# <CJK>
+0xC0C3	0x64ED	# <CJK>
+0xC0C4	0x6582	# <CJK>
+0xC0C5	0x6583	# <CJK>
+0xC0C6	0x66D9	# <CJK>
+0xC0C7	0x66D6	# <CJK>
+0xC0C8	0x6A80	# <CJK>
+0xC0C9	0x6A94	# <CJK>
+0xC0CA	0x6A84	# <CJK>
+0xC0CB	0x6AA2	# <CJK>
+0xC0CC	0x6A9C	# <CJK>
+0xC0CD	0x6ADB	# <CJK>
+0xC0CE	0x6AA3	# <CJK>
+0xC0CF	0x6A7E	# <CJK>
+0xC0D0	0x6A97	# <CJK>
+0xC0D1	0x6A90	# <CJK>
+0xC0D2	0x6AA0	# <CJK>
+0xC0D3	0x6B5C	# <CJK>
+0xC0D4	0x6BAE	# <CJK>
+0xC0D5	0x6BDA	# <CJK>
+0xC0D6	0x6C08	# <CJK>
+0xC0D7	0x6FD8	# <CJK>
+0xC0D8	0x6FF1	# <CJK>
+0xC0D9	0x6FDF	# <CJK>
+0xC0DA	0x6FE0	# <CJK>
+0xC0DB	0x6FDB	# <CJK>
+0xC0DC	0x6FE4	# <CJK>
+0xC0DD	0x6FEB	# <CJK>
+0xC0DE	0x6FEF	# <CJK>
+0xC0DF	0x6F80	# <CJK>
+0xC0E0	0x6FEC	# <CJK>
+0xC0E1	0x6FE1	# <CJK>
+0xC0E2	0x6FE9	# <CJK>
+0xC0E3	0x6FD5	# <CJK>
+0xC0E4	0x6FEE	# <CJK>
+0xC0E5	0x6FF0	# <CJK>
+0xC0E6	0x71E7	# <CJK>
+0xC0E7	0x71DF	# <CJK>
+0xC0E8	0x71EE	# <CJK>
+0xC0E9	0x71E6	# <CJK>
+0xC0EA	0x71E5	# <CJK>
+0xC0EB	0x71ED	# <CJK>
+0xC0EC	0x71EC	# <CJK>
+0xC0ED	0x71F4	# <CJK>
+0xC0EE	0x71E0	# <CJK>
+0xC0EF	0x7235	# <CJK>
+0xC0F0	0x7246	# <CJK>
+0xC0F1	0x7370	# <CJK>
+0xC0F2	0x7372	# <CJK>
+0xC0F3	0x74A9	# <CJK>
+0xC0F4	0x74B0	# <CJK>
+0xC0F5	0x74A6	# <CJK>
+0xC0F6	0x74A8	# <CJK>
+0xC0F7	0x7646	# <CJK>
+0xC0F8	0x7642	# <CJK>
+0xC0F9	0x764C	# <CJK>
+0xC0FA	0x76EA	# <CJK>
+0xC0FB	0x77B3	# <CJK>
+0xC0FC	0x77AA	# <CJK>
+0xC0FD	0x77B0	# <CJK>
+0xC0FE	0x77AC	# <CJK>
+0xC140	0x77A7	# <CJK>
+0xC141	0x77AD	# <CJK>
+0xC142	0x77EF	# <CJK>
+0xC143	0x78F7	# <CJK>
+0xC144	0x78FA	# <CJK>
+0xC145	0x78F4	# <CJK>
+0xC146	0x78EF	# <CJK>
+0xC147	0x7901	# <CJK>
+0xC148	0x79A7	# <CJK>
+0xC149	0x79AA	# <CJK>
+0xC14A	0x7A57	# <CJK>
+0xC14B	0x7ABF	# <CJK>
+0xC14C	0x7C07	# <CJK>
+0xC14D	0x7C0D	# <CJK>
+0xC14E	0x7BFE	# <CJK>
+0xC14F	0x7BF7	# <CJK>
+0xC150	0x7C0C	# <CJK>
+0xC151	0x7BE0	# <CJK>
+0xC152	0x7CE0	# <CJK>
+0xC153	0x7CDC	# <CJK>
+0xC154	0x7CDE	# <CJK>
+0xC155	0x7CE2	# <CJK>
+0xC156	0x7CDF	# <CJK>
+0xC157	0x7CD9	# <CJK>
+0xC158	0x7CDD	# <CJK>
+0xC159	0x7E2E	# <CJK>
+0xC15A	0x7E3E	# <CJK>
+0xC15B	0x7E46	# <CJK>
+0xC15C	0x7E37	# <CJK>
+0xC15D	0x7E32	# <CJK>
+0xC15E	0x7E43	# <CJK>
+0xC15F	0x7E2B	# <CJK>
+0xC160	0x7E3D	# <CJK>
+0xC161	0x7E31	# <CJK>
+0xC162	0x7E45	# <CJK>
+0xC163	0x7E41	# <CJK>
+0xC164	0x7E34	# <CJK>
+0xC165	0x7E39	# <CJK>
+0xC166	0x7E48	# <CJK>
+0xC167	0x7E35	# <CJK>
+0xC168	0x7E3F	# <CJK>
+0xC169	0x7E2F	# <CJK>
+0xC16A	0x7F44	# <CJK>
+0xC16B	0x7FF3	# <CJK>
+0xC16C	0x7FFC	# <CJK>
+0xC16D	0x8071	# <CJK>
+0xC16E	0x8072	# <CJK>
+0xC16F	0x8070	# <CJK>
+0xC170	0x806F	# <CJK>
+0xC171	0x8073	# <CJK>
+0xC172	0x81C6	# <CJK>
+0xC173	0x81C3	# <CJK>
+0xC174	0x81BA	# <CJK>
+0xC175	0x81C2	# <CJK>
+0xC176	0x81C0	# <CJK>
+0xC177	0x81BF	# <CJK>
+0xC178	0x81BD	# <CJK>
+0xC179	0x81C9	# <CJK>
+0xC17A	0x81BE	# <CJK>
+0xC17B	0x81E8	# <CJK>
+0xC17C	0x8209	# <CJK>
+0xC17D	0x8271	# <CJK>
+0xC17E	0x85AA	# <CJK>
+0xC1A1	0x8584	# <CJK>
+0xC1A2	0x857E	# <CJK>
+0xC1A3	0x859C	# <CJK>
+0xC1A4	0x8591	# <CJK>
+0xC1A5	0x8594	# <CJK>
+0xC1A6	0x85AF	# <CJK>
+0xC1A7	0x859B	# <CJK>
+0xC1A8	0x8587	# <CJK>
+0xC1A9	0x85A8	# <CJK>
+0xC1AA	0x858A	# <CJK>
+0xC1AB	0x8667	# <CJK>
+0xC1AC	0x87C0	# <CJK>
+0xC1AD	0x87D1	# <CJK>
+0xC1AE	0x87B3	# <CJK>
+0xC1AF	0x87D2	# <CJK>
+0xC1B0	0x87C6	# <CJK>
+0xC1B1	0x87AB	# <CJK>
+0xC1B2	0x87BB	# <CJK>
+0xC1B3	0x87BA	# <CJK>
+0xC1B4	0x87C8	# <CJK>
+0xC1B5	0x87CB	# <CJK>
+0xC1B6	0x893B	# <CJK>
+0xC1B7	0x8936	# <CJK>
+0xC1B8	0x8944	# <CJK>
+0xC1B9	0x8938	# <CJK>
+0xC1BA	0x893D	# <CJK>
+0xC1BB	0x89AC	# <CJK>
+0xC1BC	0x8B0E	# <CJK>
+0xC1BD	0x8B17	# <CJK>
+0xC1BE	0x8B19	# <CJK>
+0xC1BF	0x8B1B	# <CJK>
+0xC1C0	0x8B0A	# <CJK>
+0xC1C1	0x8B20	# <CJK>
+0xC1C2	0x8B1D	# <CJK>
+0xC1C3	0x8B04	# <CJK>
+0xC1C4	0x8B10	# <CJK>
+0xC1C5	0x8C41	# <CJK>
+0xC1C6	0x8C3F	# <CJK>
+0xC1C7	0x8C73	# <CJK>
+0xC1C8	0x8CFA	# <CJK>
+0xC1C9	0x8CFD	# <CJK>
+0xC1CA	0x8CFC	# <CJK>
+0xC1CB	0x8CF8	# <CJK>
+0xC1CC	0x8CFB	# <CJK>
+0xC1CD	0x8DA8	# <CJK>
+0xC1CE	0x8E49	# <CJK>
+0xC1CF	0x8E4B	# <CJK>
+0xC1D0	0x8E48	# <CJK>
+0xC1D1	0x8E4A	# <CJK>
+0xC1D2	0x8F44	# <CJK>
+0xC1D3	0x8F3E	# <CJK>
+0xC1D4	0x8F42	# <CJK>
+0xC1D5	0x8F45	# <CJK>
+0xC1D6	0x8F3F	# <CJK>
+0xC1D7	0x907F	# <CJK>
+0xC1D8	0x907D	# <CJK>
+0xC1D9	0x9084	# <CJK>
+0xC1DA	0x9081	# <CJK>
+0xC1DB	0x9082	# <CJK>
+0xC1DC	0x9080	# <CJK>
+0xC1DD	0x9139	# <CJK>
+0xC1DE	0x91A3	# <CJK>
+0xC1DF	0x919E	# <CJK>
+0xC1E0	0x919C	# <CJK>
+0xC1E1	0x934D	# <CJK>
+0xC1E2	0x9382	# <CJK>
+0xC1E3	0x9328	# <CJK>
+0xC1E4	0x9375	# <CJK>
+0xC1E5	0x934A	# <CJK>
+0xC1E6	0x9365	# <CJK>
+0xC1E7	0x934B	# <CJK>
+0xC1E8	0x9318	# <CJK>
+0xC1E9	0x937E	# <CJK>
+0xC1EA	0x936C	# <CJK>
+0xC1EB	0x935B	# <CJK>
+0xC1EC	0x9370	# <CJK>
+0xC1ED	0x935A	# <CJK>
+0xC1EE	0x9354	# <CJK>
+0xC1EF	0x95CA	# <CJK>
+0xC1F0	0x95CB	# <CJK>
+0xC1F1	0x95CC	# <CJK>
+0xC1F2	0x95C8	# <CJK>
+0xC1F3	0x95C6	# <CJK>
+0xC1F4	0x96B1	# <CJK>
+0xC1F5	0x96B8	# <CJK>
+0xC1F6	0x96D6	# <CJK>
+0xC1F7	0x971C	# <CJK>
+0xC1F8	0x971E	# <CJK>
+0xC1F9	0x97A0	# <CJK>
+0xC1FA	0x97D3	# <CJK>
+0xC1FB	0x9846	# <CJK>
+0xC1FC	0x98B6	# <CJK>
+0xC1FD	0x9935	# <CJK>
+0xC1FE	0x9A01	# <CJK>
+0xC240	0x99FF	# <CJK>
+0xC241	0x9BAE	# <CJK>
+0xC242	0x9BAB	# <CJK>
+0xC243	0x9BAA	# <CJK>
+0xC244	0x9BAD	# <CJK>
+0xC245	0x9D3B	# <CJK>
+0xC246	0x9D3F	# <CJK>
+0xC247	0x9E8B	# <CJK>
+0xC248	0x9ECF	# <CJK>
+0xC249	0x9EDE	# <CJK>
+0xC24A	0x9EDC	# <CJK>
+0xC24B	0x9EDD	# <CJK>
+0xC24C	0x9EDB	# <CJK>
+0xC24D	0x9F3E	# <CJK>
+0xC24E	0x9F4B	# <CJK>
+0xC24F	0x53E2	# <CJK>
+0xC250	0x5695	# <CJK>
+0xC251	0x56AE	# <CJK>
+0xC252	0x58D9	# <CJK>
+0xC253	0x58D8	# <CJK>
+0xC254	0x5B38	# <CJK>
+0xC255	0x5F5D	# <CJK>
+0xC256	0x61E3	# <CJK>
+0xC257	0x6233	# <CJK>
+0xC258	0x64F4	# <CJK>
+0xC259	0x64F2	# <CJK>
+0xC25A	0x64FE	# <CJK>
+0xC25B	0x6506	# <CJK>
+0xC25C	0x64FA	# <CJK>
+0xC25D	0x64FB	# <CJK>
+0xC25E	0x64F7	# <CJK>
+0xC25F	0x65B7	# <CJK>
+0xC260	0x66DC	# <CJK>
+0xC261	0x6726	# <CJK>
+0xC262	0x6AB3	# <CJK>
+0xC263	0x6AAC	# <CJK>
+0xC264	0x6AC3	# <CJK>
+0xC265	0x6ABB	# <CJK>
+0xC266	0x6AB8	# <CJK>
+0xC267	0x6AC2	# <CJK>
+0xC268	0x6AAE	# <CJK>
+0xC269	0x6AAF	# <CJK>
+0xC26A	0x6B5F	# <CJK>
+0xC26B	0x6B78	# <CJK>
+0xC26C	0x6BAF	# <CJK>
+0xC26D	0x7009	# <CJK>
+0xC26E	0x700B	# <CJK>
+0xC26F	0x6FFE	# <CJK>
+0xC270	0x7006	# <CJK>
+0xC271	0x6FFA	# <CJK>
+0xC272	0x7011	# <CJK>
+0xC273	0x700F	# <CJK>
+0xC274	0x71FB	# <CJK>
+0xC275	0x71FC	# <CJK>
+0xC276	0x71FE	# <CJK>
+0xC277	0x71F8	# <CJK>
+0xC278	0x7377	# <CJK>
+0xC279	0x7375	# <CJK>
+0xC27A	0x74A7	# <CJK>
+0xC27B	0x74BF	# <CJK>
+0xC27C	0x7515	# <CJK>
+0xC27D	0x7656	# <CJK>
+0xC27E	0x7658	# <CJK>
+0xC2A1	0x7652	# <CJK>
+0xC2A2	0x77BD	# <CJK>
+0xC2A3	0x77BF	# <CJK>
+0xC2A4	0x77BB	# <CJK>
+0xC2A5	0x77BC	# <CJK>
+0xC2A6	0x790E	# <CJK>
+0xC2A7	0x79AE	# <CJK>
+0xC2A8	0x7A61	# <CJK>
+0xC2A9	0x7A62	# <CJK>
+0xC2AA	0x7A60	# <CJK>
+0xC2AB	0x7AC4	# <CJK>
+0xC2AC	0x7AC5	# <CJK>
+0xC2AD	0x7C2B	# <CJK>
+0xC2AE	0x7C27	# <CJK>
+0xC2AF	0x7C2A	# <CJK>
+0xC2B0	0x7C1E	# <CJK>
+0xC2B1	0x7C23	# <CJK>
+0xC2B2	0x7C21	# <CJK>
+0xC2B3	0x7CE7	# <CJK>
+0xC2B4	0x7E54	# <CJK>
+0xC2B5	0x7E55	# <CJK>
+0xC2B6	0x7E5E	# <CJK>
+0xC2B7	0x7E5A	# <CJK>
+0xC2B8	0x7E61	# <CJK>
+0xC2B9	0x7E52	# <CJK>
+0xC2BA	0x7E59	# <CJK>
+0xC2BB	0x7F48	# <CJK>
+0xC2BC	0x7FF9	# <CJK>
+0xC2BD	0x7FFB	# <CJK>
+0xC2BE	0x8077	# <CJK>
+0xC2BF	0x8076	# <CJK>
+0xC2C0	0x81CD	# <CJK>
+0xC2C1	0x81CF	# <CJK>
+0xC2C2	0x820A	# <CJK>
+0xC2C3	0x85CF	# <CJK>
+0xC2C4	0x85A9	# <CJK>
+0xC2C5	0x85CD	# <CJK>
+0xC2C6	0x85D0	# <CJK>
+0xC2C7	0x85C9	# <CJK>
+0xC2C8	0x85B0	# <CJK>
+0xC2C9	0x85BA	# <CJK>
+0xC2CA	0x85B9	# <CJK>
+0xC2CB	0x85A6	# <CJK>
+0xC2CC	0x87EF	# <CJK>
+0xC2CD	0x87EC	# <CJK>
+0xC2CE	0x87F2	# <CJK>
+0xC2CF	0x87E0	# <CJK>
+0xC2D0	0x8986	# <CJK>
+0xC2D1	0x89B2	# <CJK>
+0xC2D2	0x89F4	# <CJK>
+0xC2D3	0x8B28	# <CJK>
+0xC2D4	0x8B39	# <CJK>
+0xC2D5	0x8B2C	# <CJK>
+0xC2D6	0x8B2B	# <CJK>
+0xC2D7	0x8C50	# <CJK>
+0xC2D8	0x8D05	# <CJK>
+0xC2D9	0x8E59	# <CJK>
+0xC2DA	0x8E63	# <CJK>
+0xC2DB	0x8E66	# <CJK>
+0xC2DC	0x8E64	# <CJK>
+0xC2DD	0x8E5F	# <CJK>
+0xC2DE	0x8E55	# <CJK>
+0xC2DF	0x8EC0	# <CJK>
+0xC2E0	0x8F49	# <CJK>
+0xC2E1	0x8F4D	# <CJK>
+0xC2E2	0x9087	# <CJK>
+0xC2E3	0x9083	# <CJK>
+0xC2E4	0x9088	# <CJK>
+0xC2E5	0x91AB	# <CJK>
+0xC2E6	0x91AC	# <CJK>
+0xC2E7	0x91D0	# <CJK>
+0xC2E8	0x9394	# <CJK>
+0xC2E9	0x938A	# <CJK>
+0xC2EA	0x9396	# <CJK>
+0xC2EB	0x93A2	# <CJK>
+0xC2EC	0x93B3	# <CJK>
+0xC2ED	0x93AE	# <CJK>
+0xC2EE	0x93AC	# <CJK>
+0xC2EF	0x93B0	# <CJK>
+0xC2F0	0x9398	# <CJK>
+0xC2F1	0x939A	# <CJK>
+0xC2F2	0x9397	# <CJK>
+0xC2F3	0x95D4	# <CJK>
+0xC2F4	0x95D6	# <CJK>
+0xC2F5	0x95D0	# <CJK>
+0xC2F6	0x95D5	# <CJK>
+0xC2F7	0x96E2	# <CJK>
+0xC2F8	0x96DC	# <CJK>
+0xC2F9	0x96D9	# <CJK>
+0xC2FA	0x96DB	# <CJK>
+0xC2FB	0x96DE	# <CJK>
+0xC2FC	0x9724	# <CJK>
+0xC2FD	0x97A3	# <CJK>
+0xC2FE	0x97A6	# <CJK>
+0xC340	0x97AD	# <CJK>
+0xC341	0x97F9	# <CJK>
+0xC342	0x984D	# <CJK>
+0xC343	0x984F	# <CJK>
+0xC344	0x984C	# <CJK>
+0xC345	0x984E	# <CJK>
+0xC346	0x9853	# <CJK>
+0xC347	0x98BA	# <CJK>
+0xC348	0x993E	# <CJK>
+0xC349	0x993F	# <CJK>
+0xC34A	0x993D	# <CJK>
+0xC34B	0x992E	# <CJK>
+0xC34C	0x99A5	# <CJK>
+0xC34D	0x9A0E	# <CJK>
+0xC34E	0x9AC1	# <CJK>
+0xC34F	0x9B03	# <CJK>
+0xC350	0x9B06	# <CJK>
+0xC351	0x9B4F	# <CJK>
+0xC352	0x9B4E	# <CJK>
+0xC353	0x9B4D	# <CJK>
+0xC354	0x9BCA	# <CJK>
+0xC355	0x9BC9	# <CJK>
+0xC356	0x9BFD	# <CJK>
+0xC357	0x9BC8	# <CJK>
+0xC358	0x9BC0	# <CJK>
+0xC359	0x9D51	# <CJK>
+0xC35A	0x9D5D	# <CJK>
+0xC35B	0x9D60	# <CJK>
+0xC35C	0x9EE0	# <CJK>
+0xC35D	0x9F15	# <CJK>
+0xC35E	0x9F2C	# <CJK>
+0xC35F	0x5133	# <CJK>
+0xC360	0x56A5	# <CJK>
+0xC361	0x58DE	# <CJK>
+0xC362	0x58DF	# <CJK>
+0xC363	0x58E2	# <CJK>
+0xC364	0x5BF5	# <CJK>
+0xC365	0x9F90	# <CJK>
+0xC366	0x5EEC	# <CJK>
+0xC367	0x61F2	# <CJK>
+0xC368	0x61F7	# <CJK>
+0xC369	0x61F6	# <CJK>
+0xC36A	0x61F5	# <CJK>
+0xC36B	0x6500	# <CJK>
+0xC36C	0x650F	# <CJK>
+0xC36D	0x66E0	# <CJK>
+0xC36E	0x66DD	# <CJK>
+0xC36F	0x6AE5	# <CJK>
+0xC370	0x6ADD	# <CJK>
+0xC371	0x6ADA	# <CJK>
+0xC372	0x6AD3	# <CJK>
+0xC373	0x701B	# <CJK>
+0xC374	0x701F	# <CJK>
+0xC375	0x7028	# <CJK>
+0xC376	0x701A	# <CJK>
+0xC377	0x701D	# <CJK>
+0xC378	0x7015	# <CJK>
+0xC379	0x7018	# <CJK>
+0xC37A	0x7206	# <CJK>
+0xC37B	0x720D	# <CJK>
+0xC37C	0x7258	# <CJK>
+0xC37D	0x72A2	# <CJK>
+0xC37E	0x7378	# <CJK>
+0xC3A1	0x737A	# <CJK>
+0xC3A2	0x74BD	# <CJK>
+0xC3A3	0x74CA	# <CJK>
+0xC3A4	0x74E3	# <CJK>
+0xC3A5	0x7587	# <CJK>
+0xC3A6	0x7586	# <CJK>
+0xC3A7	0x765F	# <CJK>
+0xC3A8	0x7661	# <CJK>
+0xC3A9	0x77C7	# <CJK>
+0xC3AA	0x7919	# <CJK>
+0xC3AB	0x79B1	# <CJK>
+0xC3AC	0x7A6B	# <CJK>
+0xC3AD	0x7A69	# <CJK>
+0xC3AE	0x7C3E	# <CJK>
+0xC3AF	0x7C3F	# <CJK>
+0xC3B0	0x7C38	# <CJK>
+0xC3B1	0x7C3D	# <CJK>
+0xC3B2	0x7C37	# <CJK>
+0xC3B3	0x7C40	# <CJK>
+0xC3B4	0x7E6B	# <CJK>
+0xC3B5	0x7E6D	# <CJK>
+0xC3B6	0x7E79	# <CJK>
+0xC3B7	0x7E69	# <CJK>
+0xC3B8	0x7E6A	# <CJK>
+0xC3B9	0x7F85	# <CJK>
+0xC3BA	0x7E73	# <CJK>
+0xC3BB	0x7FB6	# <CJK>
+0xC3BC	0x7FB9	# <CJK>
+0xC3BD	0x7FB8	# <CJK>
+0xC3BE	0x81D8	# <CJK>
+0xC3BF	0x85E9	# <CJK>
+0xC3C0	0x85DD	# <CJK>
+0xC3C1	0x85EA	# <CJK>
+0xC3C2	0x85D5	# <CJK>
+0xC3C3	0x85E4	# <CJK>
+0xC3C4	0x85E5	# <CJK>
+0xC3C5	0x85F7	# <CJK>
+0xC3C6	0x87FB	# <CJK>
+0xC3C7	0x8805	# <CJK>
+0xC3C8	0x880D	# <CJK>
+0xC3C9	0x87F9	# <CJK>
+0xC3CA	0x87FE	# <CJK>
+0xC3CB	0x8960	# <CJK>
+0xC3CC	0x895F	# <CJK>
+0xC3CD	0x8956	# <CJK>
+0xC3CE	0x895E	# <CJK>
+0xC3CF	0x8B41	# <CJK>
+0xC3D0	0x8B5C	# <CJK>
+0xC3D1	0x8B58	# <CJK>
+0xC3D2	0x8B49	# <CJK>
+0xC3D3	0x8B5A	# <CJK>
+0xC3D4	0x8B4E	# <CJK>
+0xC3D5	0x8B4F	# <CJK>
+0xC3D6	0x8B46	# <CJK>
+0xC3D7	0x8B59	# <CJK>
+0xC3D8	0x8D08	# <CJK>
+0xC3D9	0x8D0A	# <CJK>
+0xC3DA	0x8E7C	# <CJK>
+0xC3DB	0x8E72	# <CJK>
+0xC3DC	0x8E87	# <CJK>
+0xC3DD	0x8E76	# <CJK>
+0xC3DE	0x8E6C	# <CJK>
+0xC3DF	0x8E7A	# <CJK>
+0xC3E0	0x8E74	# <CJK>
+0xC3E1	0x8F54	# <CJK>
+0xC3E2	0x8F4E	# <CJK>
+0xC3E3	0x8FAD	# <CJK>
+0xC3E4	0x908A	# <CJK>
+0xC3E5	0x908B	# <CJK>
+0xC3E6	0x91B1	# <CJK>
+0xC3E7	0x91AE	# <CJK>
+0xC3E8	0x93E1	# <CJK>
+0xC3E9	0x93D1	# <CJK>
+0xC3EA	0x93DF	# <CJK>
+0xC3EB	0x93C3	# <CJK>
+0xC3EC	0x93C8	# <CJK>
+0xC3ED	0x93DC	# <CJK>
+0xC3EE	0x93DD	# <CJK>
+0xC3EF	0x93D6	# <CJK>
+0xC3F0	0x93E2	# <CJK>
+0xC3F1	0x93CD	# <CJK>
+0xC3F2	0x93D8	# <CJK>
+0xC3F3	0x93E4	# <CJK>
+0xC3F4	0x93D7	# <CJK>
+0xC3F5	0x93E8	# <CJK>
+0xC3F6	0x95DC	# <CJK>
+0xC3F7	0x96B4	# <CJK>
+0xC3F8	0x96E3	# <CJK>
+0xC3F9	0x972A	# <CJK>
+0xC3FA	0x9727	# <CJK>
+0xC3FB	0x9761	# <CJK>
+0xC3FC	0x97DC	# <CJK>
+0xC3FD	0x97FB	# <CJK>
+0xC3FE	0x985E	# <CJK>
+0xC440	0x9858	# <CJK>
+0xC441	0x985B	# <CJK>
+0xC442	0x98BC	# <CJK>
+0xC443	0x9945	# <CJK>
+0xC444	0x9949	# <CJK>
+0xC445	0x9A16	# <CJK>
+0xC446	0x9A19	# <CJK>
+0xC447	0x9B0D	# <CJK>
+0xC448	0x9BE8	# <CJK>
+0xC449	0x9BE7	# <CJK>
+0xC44A	0x9BD6	# <CJK>
+0xC44B	0x9BDB	# <CJK>
+0xC44C	0x9D89	# <CJK>
+0xC44D	0x9D61	# <CJK>
+0xC44E	0x9D72	# <CJK>
+0xC44F	0x9D6A	# <CJK>
+0xC450	0x9D6C	# <CJK>
+0xC451	0x9E92	# <CJK>
+0xC452	0x9E97	# <CJK>
+0xC453	0x9E93	# <CJK>
+0xC454	0x9EB4	# <CJK>
+0xC455	0x52F8	# <CJK>
+0xC456	0x56A8	# <CJK>
+0xC457	0x56B7	# <CJK>
+0xC458	0x56B6	# <CJK>
+0xC459	0x56B4	# <CJK>
+0xC45A	0x56BC	# <CJK>
+0xC45B	0x58E4	# <CJK>
+0xC45C	0x5B40	# <CJK>
+0xC45D	0x5B43	# <CJK>
+0xC45E	0x5B7D	# <CJK>
+0xC45F	0x5BF6	# <CJK>
+0xC460	0x5DC9	# <CJK>
+0xC461	0x61F8	# <CJK>
+0xC462	0x61FA	# <CJK>
+0xC463	0x6518	# <CJK>
+0xC464	0x6514	# <CJK>
+0xC465	0x6519	# <CJK>
+0xC466	0x66E6	# <CJK>
+0xC467	0x6727	# <CJK>
+0xC468	0x6AEC	# <CJK>
+0xC469	0x703E	# <CJK>
+0xC46A	0x7030	# <CJK>
+0xC46B	0x7032	# <CJK>
+0xC46C	0x7210	# <CJK>
+0xC46D	0x737B	# <CJK>
+0xC46E	0x74CF	# <CJK>
+0xC46F	0x7662	# <CJK>
+0xC470	0x7665	# <CJK>
+0xC471	0x7926	# <CJK>
+0xC472	0x792A	# <CJK>
+0xC473	0x792C	# <CJK>
+0xC474	0x792B	# <CJK>
+0xC475	0x7AC7	# <CJK>
+0xC476	0x7AF6	# <CJK>
+0xC477	0x7C4C	# <CJK>
+0xC478	0x7C43	# <CJK>
+0xC479	0x7C4D	# <CJK>
+0xC47A	0x7CEF	# <CJK>
+0xC47B	0x7CF0	# <CJK>
+0xC47C	0x8FAE	# <CJK>
+0xC47D	0x7E7D	# <CJK>
+0xC47E	0x7E7C	# <CJK>
+0xC4A1	0x7E82	# <CJK>
+0xC4A2	0x7F4C	# <CJK>
+0xC4A3	0x8000	# <CJK>
+0xC4A4	0x81DA	# <CJK>
+0xC4A5	0x8266	# <CJK>
+0xC4A6	0x85FB	# <CJK>
+0xC4A7	0x85F9	# <CJK>
+0xC4A8	0x8611	# <CJK>
+0xC4A9	0x85FA	# <CJK>
+0xC4AA	0x8606	# <CJK>
+0xC4AB	0x860B	# <CJK>
+0xC4AC	0x8607	# <CJK>
+0xC4AD	0x860A	# <CJK>
+0xC4AE	0x8814	# <CJK>
+0xC4AF	0x8815	# <CJK>
+0xC4B0	0x8964	# <CJK>
+0xC4B1	0x89BA	# <CJK>
+0xC4B2	0x89F8	# <CJK>
+0xC4B3	0x8B70	# <CJK>
+0xC4B4	0x8B6C	# <CJK>
+0xC4B5	0x8B66	# <CJK>
+0xC4B6	0x8B6F	# <CJK>
+0xC4B7	0x8B5F	# <CJK>
+0xC4B8	0x8B6B	# <CJK>
+0xC4B9	0x8D0F	# <CJK>
+0xC4BA	0x8D0D	# <CJK>
+0xC4BB	0x8E89	# <CJK>
+0xC4BC	0x8E81	# <CJK>
+0xC4BD	0x8E85	# <CJK>
+0xC4BE	0x8E82	# <CJK>
+0xC4BF	0x91B4	# <CJK>
+0xC4C0	0x91CB	# <CJK>
+0xC4C1	0x9418	# <CJK>
+0xC4C2	0x9403	# <CJK>
+0xC4C3	0x93FD	# <CJK>
+0xC4C4	0x95E1	# <CJK>
+0xC4C5	0x9730	# <CJK>
+0xC4C6	0x98C4	# <CJK>
+0xC4C7	0x9952	# <CJK>
+0xC4C8	0x9951	# <CJK>
+0xC4C9	0x99A8	# <CJK>
+0xC4CA	0x9A2B	# <CJK>
+0xC4CB	0x9A30	# <CJK>
+0xC4CC	0x9A37	# <CJK>
+0xC4CD	0x9A35	# <CJK>
+0xC4CE	0x9C13	# <CJK>
+0xC4CF	0x9C0D	# <CJK>
+0xC4D0	0x9E79	# <CJK>
+0xC4D1	0x9EB5	# <CJK>
+0xC4D2	0x9EE8	# <CJK>
+0xC4D3	0x9F2F	# <CJK>
+0xC4D4	0x9F5F	# <CJK>
+0xC4D5	0x9F63	# <CJK>
+0xC4D6	0x9F61	# <CJK>
+0xC4D7	0x5137	# <CJK>
+0xC4D8	0x5138	# <CJK>
+0xC4D9	0x56C1	# <CJK>
+0xC4DA	0x56C0	# <CJK>
+0xC4DB	0x56C2	# <CJK>
+0xC4DC	0x5914	# <CJK>
+0xC4DD	0x5C6C	# <CJK>
+0xC4DE	0x5DCD	# <CJK>
+0xC4DF	0x61FC	# <CJK>
+0xC4E0	0x61FE	# <CJK>
+0xC4E1	0x651D	# <CJK>
+0xC4E2	0x651C	# <CJK>
+0xC4E3	0x6595	# <CJK>
+0xC4E4	0x66E9	# <CJK>
+0xC4E5	0x6AFB	# <CJK>
+0xC4E6	0x6B04	# <CJK>
+0xC4E7	0x6AFA	# <CJK>
+0xC4E8	0x6BB2	# <CJK>
+0xC4E9	0x704C	# <CJK>
+0xC4EA	0x721B	# <CJK>
+0xC4EB	0x72A7	# <CJK>
+0xC4EC	0x74D6	# <CJK>
+0xC4ED	0x74D4	# <CJK>
+0xC4EE	0x7669	# <CJK>
+0xC4EF	0x77D3	# <CJK>
+0xC4F0	0x7C50	# <CJK>
+0xC4F1	0x7E8F	# <CJK>
+0xC4F2	0x7E8C	# <CJK>
+0xC4F3	0x7FBC	# <CJK>
+0xC4F4	0x8617	# <CJK>
+0xC4F5	0x862D	# <CJK>
+0xC4F6	0x861A	# <CJK>
+0xC4F7	0x8823	# <CJK>
+0xC4F8	0x8822	# <CJK>
+0xC4F9	0x8821	# <CJK>
+0xC4FA	0x881F	# <CJK>
+0xC4FB	0x896A	# <CJK>
+0xC4FC	0x896C	# <CJK>
+0xC4FD	0x89BD	# <CJK>
+0xC4FE	0x8B74	# <CJK>
+0xC540	0x8B77	# <CJK>
+0xC541	0x8B7D	# <CJK>
+0xC542	0x8D13	# <CJK>
+0xC543	0x8E8A	# <CJK>
+0xC544	0x8E8D	# <CJK>
+0xC545	0x8E8B	# <CJK>
+0xC546	0x8F5F	# <CJK>
+0xC547	0x8FAF	# <CJK>
+0xC548	0x91BA	# <CJK>
+0xC549	0x942E	# <CJK>
+0xC54A	0x9433	# <CJK>
+0xC54B	0x9435	# <CJK>
+0xC54C	0x943A	# <CJK>
+0xC54D	0x9438	# <CJK>
+0xC54E	0x9432	# <CJK>
+0xC54F	0x942B	# <CJK>
+0xC550	0x95E2	# <CJK>
+0xC551	0x9738	# <CJK>
+0xC552	0x9739	# <CJK>
+0xC553	0x9732	# <CJK>
+0xC554	0x97FF	# <CJK>
+0xC555	0x9867	# <CJK>
+0xC556	0x9865	# <CJK>
+0xC557	0x9957	# <CJK>
+0xC558	0x9A45	# <CJK>
+0xC559	0x9A43	# <CJK>
+0xC55A	0x9A40	# <CJK>
+0xC55B	0x9A3E	# <CJK>
+0xC55C	0x9ACF	# <CJK>
+0xC55D	0x9B54	# <CJK>
+0xC55E	0x9B51	# <CJK>
+0xC55F	0x9C2D	# <CJK>
+0xC560	0x9C25	# <CJK>
+0xC561	0x9DAF	# <CJK>
+0xC562	0x9DB4	# <CJK>
+0xC563	0x9DC2	# <CJK>
+0xC564	0x9DB8	# <CJK>
+0xC565	0x9E9D	# <CJK>
+0xC566	0x9EEF	# <CJK>
+0xC567	0x9F19	# <CJK>
+0xC568	0x9F5C	# <CJK>
+0xC569	0x9F66	# <CJK>
+0xC56A	0x9F67	# <CJK>
+0xC56B	0x513C	# <CJK>
+0xC56C	0x513B	# <CJK>
+0xC56D	0x56C8	# <CJK>
+0xC56E	0x56CA	# <CJK>
+0xC56F	0x56C9	# <CJK>
+0xC570	0x5B7F	# <CJK>
+0xC571	0x5DD4	# <CJK>
+0xC572	0x5DD2	# <CJK>
+0xC573	0x5F4E	# <CJK>
+0xC574	0x61FF	# <CJK>
+0xC575	0x6524	# <CJK>
+0xC576	0x6B0A	# <CJK>
+0xC577	0x6B61	# <CJK>
+0xC578	0x7051	# <CJK>
+0xC579	0x7058	# <CJK>
+0xC57A	0x7380	# <CJK>
+0xC57B	0x74E4	# <CJK>
+0xC57C	0x758A	# <CJK>
+0xC57D	0x766E	# <CJK>
+0xC57E	0x766C	# <CJK>
+0xC5A1	0x79B3	# <CJK>
+0xC5A2	0x7C60	# <CJK>
+0xC5A3	0x7C5F	# <CJK>
+0xC5A4	0x807E	# <CJK>
+0xC5A5	0x807D	# <CJK>
+0xC5A6	0x81DF	# <CJK>
+0xC5A7	0x8972	# <CJK>
+0xC5A8	0x896F	# <CJK>
+0xC5A9	0x89FC	# <CJK>
+0xC5AA	0x8B80	# <CJK>
+0xC5AB	0x8D16	# <CJK>
+0xC5AC	0x8D17	# <CJK>
+0xC5AD	0x8E91	# <CJK>
+0xC5AE	0x8E93	# <CJK>
+0xC5AF	0x8F61	# <CJK>
+0xC5B0	0x9148	# <CJK>
+0xC5B1	0x9444	# <CJK>
+0xC5B2	0x9451	# <CJK>
+0xC5B3	0x9452	# <CJK>
+0xC5B4	0x973D	# <CJK>
+0xC5B5	0x973E	# <CJK>
+0xC5B6	0x97C3	# <CJK>
+0xC5B7	0x97C1	# <CJK>
+0xC5B8	0x986B	# <CJK>
+0xC5B9	0x9955	# <CJK>
+0xC5BA	0x9A55	# <CJK>
+0xC5BB	0x9A4D	# <CJK>
+0xC5BC	0x9AD2	# <CJK>
+0xC5BD	0x9B1A	# <CJK>
+0xC5BE	0x9C49	# <CJK>
+0xC5BF	0x9C31	# <CJK>
+0xC5C0	0x9C3E	# <CJK>
+0xC5C1	0x9C3B	# <CJK>
+0xC5C2	0x9DD3	# <CJK>
+0xC5C3	0x9DD7	# <CJK>
+0xC5C4	0x9F34	# <CJK>
+0xC5C5	0x9F6C	# <CJK>
+0xC5C6	0x9F6A	# <CJK>
+0xC5C7	0x9F94	# <CJK>
+0xC5C8	0x56CC	# <CJK>
+0xC5C9	0x5DD6	# <CJK>
+0xC5CA	0x6200	# <CJK>
+0xC5CB	0x6523	# <CJK>
+0xC5CC	0x652B	# <CJK>
+0xC5CD	0x652A	# <CJK>
+0xC5CE	0x66EC	# <CJK>
+0xC5CF	0x6B10	# <CJK>
+0xC5D0	0x74DA	# <CJK>
+0xC5D1	0x7ACA	# <CJK>
+0xC5D2	0x7C64	# <CJK>
+0xC5D3	0x7C63	# <CJK>
+0xC5D4	0x7C65	# <CJK>
+0xC5D5	0x7E93	# <CJK>
+0xC5D6	0x7E96	# <CJK>
+0xC5D7	0x7E94	# <CJK>
+0xC5D8	0x81E2	# <CJK>
+0xC5D9	0x8638	# <CJK>
+0xC5DA	0x863F	# <CJK>
+0xC5DB	0x8831	# <CJK>
+0xC5DC	0x8B8A	# <CJK>
+0xC5DD	0x9090	# <CJK>
+0xC5DE	0x908F	# <CJK>
+0xC5DF	0x9463	# <CJK>
+0xC5E0	0x9460	# <CJK>
+0xC5E1	0x9464	# <CJK>
+0xC5E2	0x9768	# <CJK>
+0xC5E3	0x986F	# <CJK>
+0xC5E4	0x995C	# <CJK>
+0xC5E5	0x9A5A	# <CJK>
+0xC5E6	0x9A5B	# <CJK>
+0xC5E7	0x9A57	# <CJK>
+0xC5E8	0x9AD3	# <CJK>
+0xC5E9	0x9AD4	# <CJK>
+0xC5EA	0x9AD1	# <CJK>
+0xC5EB	0x9C54	# <CJK>
+0xC5EC	0x9C57	# <CJK>
+0xC5ED	0x9C56	# <CJK>
+0xC5EE	0x9DE5	# <CJK>
+0xC5EF	0x9E9F	# <CJK>
+0xC5F0	0x9EF4	# <CJK>
+0xC5F1	0x56D1	# <CJK>
+0xC5F2	0x58E9	# <CJK>
+0xC5F3	0x652C	# <CJK>
+0xC5F4	0x705E	# <CJK>
+0xC5F5	0x7671	# <CJK>
+0xC5F6	0x7672	# <CJK>
+0xC5F7	0x77D7	# <CJK>
+0xC5F8	0x7F50	# <CJK>
+0xC5F9	0x7F88	# <CJK>
+0xC5FA	0x8836	# <CJK>
+0xC5FB	0x8839	# <CJK>
+0xC5FC	0x8862	# <CJK>
+0xC5FD	0x8B93	# <CJK>
+0xC5FE	0x8B92	# <CJK>
+0xC640	0x8B96	# <CJK>
+0xC641	0x8277	# <CJK>
+0xC642	0x8D1B	# <CJK>
+0xC643	0x91C0	# <CJK>
+0xC644	0x946A	# <CJK>
+0xC645	0x9742	# <CJK>
+0xC646	0x9748	# <CJK>
+0xC647	0x9744	# <CJK>
+0xC648	0x97C6	# <CJK>
+0xC649	0x9870	# <CJK>
+0xC64A	0x9A5F	# <CJK>
+0xC64B	0x9B22	# <CJK>
+0xC64C	0x9B58	# <CJK>
+0xC64D	0x9C5F	# <CJK>
+0xC64E	0x9DF9	# <CJK>
+0xC64F	0x9DFA	# <CJK>
+0xC650	0x9E7C	# <CJK>
+0xC651	0x9E7D	# <CJK>
+0xC652	0x9F07	# <CJK>
+0xC653	0x9F77	# <CJK>
+0xC654	0x9F72	# <CJK>
+0xC655	0x5EF3	# <CJK>
+0xC656	0x6B16	# <CJK>
+0xC657	0x7063	# <CJK>
+0xC658	0x7C6C	# <CJK>
+0xC659	0x7C6E	# <CJK>
+0xC65A	0x883B	# <CJK>
+0xC65B	0x89C0	# <CJK>
+0xC65C	0x8EA1	# <CJK>
+0xC65D	0x91C1	# <CJK>
+0xC65E	0x9472	# <CJK>
+0xC65F	0x9470	# <CJK>
+0xC660	0x9871	# <CJK>
+0xC661	0x995E	# <CJK>
+0xC662	0x9AD6	# <CJK>
+0xC663	0x9B23	# <CJK>
+0xC664	0x9ECC	# <CJK>
+0xC665	0x7064	# <CJK>
+0xC666	0x77DA	# <CJK>
+0xC667	0x8B9A	# <CJK>
+0xC668	0x9477	# <CJK>
+0xC669	0x97C9	# <CJK>
+0xC66A	0x9A62	# <CJK>
+0xC66B	0x9A65	# <CJK>
+0xC66C	0x7E9C	# <CJK>
+0xC66D	0x8B9C	# <CJK>
+0xC66E	0x8EAA	# <CJK>
+0xC66F	0x91C5	# <CJK>
+0xC670	0x947D	# <CJK>
+0xC671	0x947E	# <CJK>
+0xC672	0x947C	# <CJK>
+0xC673	0x9C77	# <CJK>
+0xC674	0x9C78	# <CJK>
+0xC675	0x9EF7	# <CJK>
+0xC676	0x8C54	# <CJK>
+0xC677	0x947F	# <CJK>
+0xC678	0x9E1A	# <CJK>
+0xC679	0x7228	# <CJK>
+0xC67A	0x9A6A	# <CJK>
+0xC67B	0x9B31	# <CJK>
+0xC67C	0x9E1B	# <CJK>
+0xC67D	0x9E1E	# <CJK>
+0xC67E	0x7C72	# <CJK>
+0xC6A1	0x30FE	# KATAKANA VOICED ITERATION MARK
+0xC6A2	0x309D	# HIRAGANA ITERATION MARK
+0xC6A3	0x309E	# HIRAGANA VOICED ITERATION MARK
+0xC6A4	0x3005	# IDEOGRAPHIC ITERATION MARK
+0xC6A5	0x3041	# HIRAGANA LETTER SMALL A
+0xC6A6	0x3042	# HIRAGANA LETTER A
+0xC6A7	0x3043	# HIRAGANA LETTER SMALL I
+0xC6A8	0x3044	# HIRAGANA LETTER I
+0xC6A9	0x3045	# HIRAGANA LETTER SMALL U
+0xC6AA	0x3046	# HIRAGANA LETTER U
+0xC6AB	0x3047	# HIRAGANA LETTER SMALL E
+0xC6AC	0x3048	# HIRAGANA LETTER E
+0xC6AD	0x3049	# HIRAGANA LETTER SMALL O
+0xC6AE	0x304A	# HIRAGANA LETTER O
+0xC6AF	0x304B	# HIRAGANA LETTER KA
+0xC6B0	0x304C	# HIRAGANA LETTER GA
+0xC6B1	0x304D	# HIRAGANA LETTER KI
+0xC6B2	0x304E	# HIRAGANA LETTER GI
+0xC6B3	0x304F	# HIRAGANA LETTER KU
+0xC6B4	0x3050	# HIRAGANA LETTER GU
+0xC6B5	0x3051	# HIRAGANA LETTER KE
+0xC6B6	0x3052	# HIRAGANA LETTER GE
+0xC6B7	0x3053	# HIRAGANA LETTER KO
+0xC6B8	0x3054	# HIRAGANA LETTER GO
+0xC6B9	0x3055	# HIRAGANA LETTER SA
+0xC6BA	0x3056	# HIRAGANA LETTER ZA
+0xC6BB	0x3057	# HIRAGANA LETTER SI
+0xC6BC	0x3058	# HIRAGANA LETTER ZI
+0xC6BD	0x3059	# HIRAGANA LETTER SU
+0xC6BE	0x305A	# HIRAGANA LETTER ZU
+0xC6BF	0x305B	# HIRAGANA LETTER SE
+0xC6C0	0x305C	# HIRAGANA LETTER ZE
+0xC6C1	0x305D	# HIRAGANA LETTER SO
+0xC6C2	0x305E	# HIRAGANA LETTER ZO
+0xC6C3	0x305F	# HIRAGANA LETTER TA
+0xC6C4	0x3060	# HIRAGANA LETTER DA
+0xC6C5	0x3061	# HIRAGANA LETTER TI
+0xC6C6	0x3062	# HIRAGANA LETTER DI
+0xC6C7	0x3063	# HIRAGANA LETTER SMALL TU
+0xC6C8	0x3064	# HIRAGANA LETTER TU
+0xC6C9	0x3065	# HIRAGANA LETTER DU
+0xC6CA	0x3066	# HIRAGANA LETTER TE
+0xC6CB	0x3067	# HIRAGANA LETTER DE
+0xC6CC	0x3068	# HIRAGANA LETTER TO
+0xC6CD	0x3069	# HIRAGANA LETTER DO
+0xC6CE	0x306A	# HIRAGANA LETTER NA
+0xC6CF	0x306B	# HIRAGANA LETTER NI
+0xC6D0	0x306C	# HIRAGANA LETTER NU
+0xC6D1	0x306D	# HIRAGANA LETTER NE
+0xC6D2	0x306E	# HIRAGANA LETTER NO
+0xC6D3	0x306F	# HIRAGANA LETTER HA
+0xC6D4	0x3070	# HIRAGANA LETTER BA
+0xC6D5	0x3071	# HIRAGANA LETTER PA
+0xC6D6	0x3072	# HIRAGANA LETTER HI
+0xC6D7	0x3073	# HIRAGANA LETTER BI
+0xC6D8	0x3074	# HIRAGANA LETTER PI
+0xC6D9	0x3075	# HIRAGANA LETTER HU
+0xC6DA	0x3076	# HIRAGANA LETTER BU
+0xC6DB	0x3077	# HIRAGANA LETTER PU
+0xC6DC	0x3078	# HIRAGANA LETTER HE
+0xC6DD	0x3079	# HIRAGANA LETTER BE
+0xC6DE	0x307A	# HIRAGANA LETTER PE
+0xC6DF	0x307B	# HIRAGANA LETTER HO
+0xC6E0	0x307C	# HIRAGANA LETTER BO
+0xC6E1	0x307D	# HIRAGANA LETTER PO
+0xC6E2	0x307E	# HIRAGANA LETTER MA
+0xC6E3	0x307F	# HIRAGANA LETTER MI
+0xC6E4	0x3080	# HIRAGANA LETTER MU
+0xC6E5	0x3081	# HIRAGANA LETTER ME
+0xC6E6	0x3082	# HIRAGANA LETTER MO
+0xC6E7	0x3083	# HIRAGANA LETTER SMALL YA
+0xC6E8	0x3084	# HIRAGANA LETTER YA
+0xC6E9	0x3085	# HIRAGANA LETTER SMALL YU
+0xC6EA	0x3086	# HIRAGANA LETTER YU
+0xC6EB	0x3087	# HIRAGANA LETTER SMALL YO
+0xC6EC	0x3088	# HIRAGANA LETTER YO
+0xC6ED	0x3089	# HIRAGANA LETTER RA
+0xC6EE	0x308A	# HIRAGANA LETTER RI
+0xC6EF	0x308B	# HIRAGANA LETTER RU
+0xC6F0	0x308C	# HIRAGANA LETTER RE
+0xC6F1	0x308D	# HIRAGANA LETTER RO
+0xC6F2	0x308E	# HIRAGANA LETTER SMALL WA
+0xC6F3	0x308F	# HIRAGANA LETTER WA
+0xC6F4	0x3090	# HIRAGANA LETTER WI
+0xC6F5	0x3091	# HIRAGANA LETTER WE
+0xC6F6	0x3092	# HIRAGANA LETTER WO
+0xC6F7	0x3093	# HIRAGANA LETTER N
+0xC6F8	0x30A1	# KATAKANA LETTER SMALL A
+0xC6F9	0x30A2	# KATAKANA LETTER A
+0xC6FA	0x30A3	# KATAKANA LETTER SMALL I
+0xC6FB	0x30A4	# KATAKANA LETTER I
+0xC6FC	0x30A5	# KATAKANA LETTER SMALL U
+0xC6FD	0x30A6	# KATAKANA LETTER U
+0xC6FE	0x30A7	# KATAKANA LETTER SMALL E
+0xC740	0x30A8	# KATAKANA LETTER E
+0xC741	0x30A9	# KATAKANA LETTER SMALL O
+0xC742	0x30AA	# KATAKANA LETTER O
+0xC743	0x30AB	# KATAKANA LETTER KA
+0xC744	0x30AC	# KATAKANA LETTER GA
+0xC745	0x30AD	# KATAKANA LETTER KI
+0xC746	0x30AE	# KATAKANA LETTER GI
+0xC747	0x30AF	# KATAKANA LETTER KU
+0xC748	0x30B0	# KATAKANA LETTER GU
+0xC749	0x30B1	# KATAKANA LETTER KE
+0xC74A	0x30B2	# KATAKANA LETTER GE
+0xC74B	0x30B3	# KATAKANA LETTER KO
+0xC74C	0x30B4	# KATAKANA LETTER GO
+0xC74D	0x30B5	# KATAKANA LETTER SA
+0xC74E	0x30B6	# KATAKANA LETTER ZA
+0xC74F	0x30B7	# KATAKANA LETTER SI
+0xC750	0x30B8	# KATAKANA LETTER ZI
+0xC751	0x30B9	# KATAKANA LETTER SU
+0xC752	0x30BA	# KATAKANA LETTER ZU
+0xC753	0x30BB	# KATAKANA LETTER SE
+0xC754	0x30BC	# KATAKANA LETTER ZE
+0xC755	0x30BD	# KATAKANA LETTER SO
+0xC756	0x30BE	# KATAKANA LETTER ZO
+0xC757	0x30BF	# KATAKANA LETTER TA
+0xC758	0x30C0	# KATAKANA LETTER DA
+0xC759	0x30C1	# KATAKANA LETTER TI
+0xC75A	0x30C2	# KATAKANA LETTER DI
+0xC75B	0x30C3	# KATAKANA LETTER SMALL TU
+0xC75C	0x30C4	# KATAKANA LETTER TU
+0xC75D	0x30C5	# KATAKANA LETTER DU
+0xC75E	0x30C6	# KATAKANA LETTER TE
+0xC75F	0x30C7	# KATAKANA LETTER DE
+0xC760	0x30C8	# KATAKANA LETTER TO
+0xC761	0x30C9	# KATAKANA LETTER DO
+0xC762	0x30CA	# KATAKANA LETTER NA
+0xC763	0x30CB	# KATAKANA LETTER NI
+0xC764	0x30CC	# KATAKANA LETTER NU
+0xC765	0x30CD	# KATAKANA LETTER NE
+0xC766	0x30CE	# KATAKANA LETTER NO
+0xC767	0x30CF	# KATAKANA LETTER HA
+0xC768	0x30D0	# KATAKANA LETTER BA
+0xC769	0x30D1	# KATAKANA LETTER PA
+0xC76A	0x30D2	# KATAKANA LETTER HI
+0xC76B	0x30D3	# KATAKANA LETTER BI
+0xC76C	0x30D4	# KATAKANA LETTER PI
+0xC76D	0x30D5	# KATAKANA LETTER HU
+0xC76E	0x30D6	# KATAKANA LETTER BU
+0xC76F	0x30D7	# KATAKANA LETTER PU
+0xC770	0x30D8	# KATAKANA LETTER HE
+0xC771	0x30D9	# KATAKANA LETTER BE
+0xC772	0x30DA	# KATAKANA LETTER PE
+0xC773	0x30DB	# KATAKANA LETTER HO
+0xC774	0x30DC	# KATAKANA LETTER BO
+0xC775	0x30DD	# KATAKANA LETTER PO
+0xC776	0x30DE	# KATAKANA LETTER MA
+0xC777	0x30DF	# KATAKANA LETTER MI
+0xC778	0x30E0	# KATAKANA LETTER MU
+0xC779	0x30E1	# KATAKANA LETTER ME
+0xC77A	0x30E2	# KATAKANA LETTER MO
+0xC77B	0x30E3	# KATAKANA LETTER SMALL YA
+0xC77C	0x30E4	# KATAKANA LETTER YA
+0xC77D	0x30E5	# KATAKANA LETTER SMALL YU
+0xC77E	0x30E6	# KATAKANA LETTER YU
+0xC7A1	0x30E7	# KATAKANA LETTER SMALL YO
+0xC7A2	0x30E8	# KATAKANA LETTER YO
+0xC7A3	0x30E9	# KATAKANA LETTER RA
+0xC7A4	0x30EA	# KATAKANA LETTER RI
+0xC7A5	0x30EB	# KATAKANA LETTER RU
+0xC7A6	0x30EC	# KATAKANA LETTER RE
+0xC7A7	0x30ED	# KATAKANA LETTER RO
+0xC7A8	0x30EE	# KATAKANA LETTER SMALL WA
+0xC7A9	0x30EF	# KATAKANA LETTER WA
+0xC7AA	0x30F0	# KATAKANA LETTER WI
+0xC7AB	0x30F1	# KATAKANA LETTER WE
+0xC7AC	0x30F2	# KATAKANA LETTER WO
+0xC7AD	0x30F3	# KATAKANA LETTER N
+0xC7AE	0x30F4	# KATAKANA LETTER VU
+0xC7AF	0x30F5	# KATAKANA LETTER SMALL KA
+0xC7B0	0x30F6	# KATAKANA LETTER SMALL KE
+0xC7B1	0x0414	# CYRILLIC CAPITAL LETTER DE
+0xC7B2	0x0415	# CYRILLIC CAPITAL LETTER IE
+0xC7B3	0x0401	# CYRILLIC CAPITAL LETTER IO
+0xC7B4	0x0416	# CYRILLIC CAPITAL LETTER ZHE
+0xC7B5	0x0417	# CYRILLIC CAPITAL LETTER ZE
+0xC7B6	0x0418	# CYRILLIC CAPITAL LETTER I
+0xC7B7	0x0419	# CYRILLIC CAPITAL LETTER SHORT I
+0xC7B8	0x041A	# CYRILLIC CAPITAL LETTER KA
+0xC7B9	0x041B	# CYRILLIC CAPITAL LETTER EL
+0xC7BA	0x041C	# CYRILLIC CAPITAL LETTER EM
+0xC7BB	0x0423	# CYRILLIC CAPITAL LETTER U
+0xC7BC	0x0424	# CYRILLIC CAPITAL LETTER EF
+0xC7BD	0x0425	# CYRILLIC CAPITAL LETTER HA
+0xC7BE	0x0426	# CYRILLIC CAPITAL LETTER TSE
+0xC7BF	0x0427	# CYRILLIC CAPITAL LETTER CHE
+0xC7C0	0x0428	# CYRILLIC CAPITAL LETTER SHA
+0xC7C1	0x0429	# CYRILLIC CAPITAL LETTER SHCHA
+0xC7C2	0x042A	# CYRILLIC CAPITAL LETTER HARD SIGN
+0xC7C3	0x042B	# CYRILLIC CAPITAL LETTER YERU
+0xC7C4	0x042C	# CYRILLIC CAPITAL LETTER SOFT SIGN
+0xC7C5	0x042D	# CYRILLIC CAPITAL LETTER E
+0xC7C6	0x042E	# CYRILLIC CAPITAL LETTER YU
+0xC7C7	0x042F	# CYRILLIC CAPITAL LETTER YA
+0xC7C8	0x0430	# CYRILLIC SMALL LETTER A
+0xC7C9	0x0431	# CYRILLIC SMALL LETTER BE
+0xC7CA	0x0432	# CYRILLIC SMALL LETTER VE
+0xC7CB	0x0433	# CYRILLIC SMALL LETTER GHE
+0xC7CC	0x0434	# CYRILLIC SMALL LETTER DE
+0xC7CD	0x0435	# CYRILLIC SMALL LETTER IE
+0xC7CE	0x0451	# CYRILLIC SMALL LETTER IO
+0xC7CF	0x0436	# CYRILLIC SMALL LETTER ZHE
+0xC7D0	0x0437	# CYRILLIC SMALL LETTER ZE
+0xC7D1	0x0438	# CYRILLIC SMALL LETTER I
+0xC7D2	0x0439	# CYRILLIC SMALL LETTER SHORT I
+0xC7D3	0x043A	# CYRILLIC SMALL LETTER KA
+0xC7D4	0x043B	# CYRILLIC SMALL LETTER EL
+0xC7D5	0x043C	# CYRILLIC SMALL LETTER EM
+0xC7D6	0x043D	# CYRILLIC SMALL LETTER EN
+0xC7D7	0x043E	# CYRILLIC SMALL LETTER O
+0xC7D8	0x043F	# CYRILLIC SMALL LETTER PE
+0xC7D9	0x0440	# CYRILLIC SMALL LETTER ER
+0xC7DA	0x0441	# CYRILLIC SMALL LETTER ES
+0xC7DB	0x0442	# CYRILLIC SMALL LETTER TE
+0xC7DC	0x0443	# CYRILLIC SMALL LETTER U
+0xC7DD	0x0444	# CYRILLIC SMALL LETTER EF
+0xC7DE	0x0445	# CYRILLIC SMALL LETTER HA
+0xC7DF	0x0446	# CYRILLIC SMALL LETTER TSE
+0xC7E0	0x0447	# CYRILLIC SMALL LETTER CHE
+0xC7E1	0x0448	# CYRILLIC SMALL LETTER SHA
+0xC7E2	0x0449	# CYRILLIC SMALL LETTER SHCHA
+0xC7E3	0x044A	# CYRILLIC SMALL LETTER HARD SIGN
+0xC7E4	0x044B	# CYRILLIC SMALL LETTER YERU
+0xC7E5	0x044C	# CYRILLIC SMALL LETTER SOFT SIGN
+0xC7E6	0x044D	# CYRILLIC SMALL LETTER E
+0xC7E7	0x044E	# CYRILLIC SMALL LETTER YU
+0xC7E8	0x044F	# CYRILLIC SMALL LETTER YA
+0xC7E9	0x2460	# CIRCLED DIGIT ONE
+0xC7EA	0x2461	# CIRCLED DIGIT TWO
+0xC7EB	0x2462	# CIRCLED DIGIT THREE
+0xC7EC	0x2463	# CIRCLED DIGIT FOUR
+0xC7ED	0x2464	# CIRCLED DIGIT FIVE
+0xC7EE	0x2465	# CIRCLED DIGIT SIX
+0xC7EF	0x2466	# CIRCLED DIGIT SEVEN
+0xC7F0	0x2467	# CIRCLED DIGIT EIGHT
+0xC7F1	0x2468	# CIRCLED DIGIT NINE
+0xC7F2	0x2469	# CIRCLED NUMBER TEN
+0xC7F3	0x2474	# PARENTHESIZED DIGIT ONE
+0xC7F4	0x2475	# PARENTHESIZED DIGIT TWO
+0xC7F5	0x2476	# PARENTHESIZED DIGIT THREE
+0xC7F6	0x2477	# PARENTHESIZED DIGIT FOUR
+0xC7F7	0x2478	# PARENTHESIZED DIGIT FIVE
+0xC7F8	0x2479	# PARENTHESIZED DIGIT SIX
+0xC7F9	0x247A	# PARENTHESIZED DIGIT SEVEN
+0xC7FA	0x247B	# PARENTHESIZED DIGIT EIGHT
+0xC7FB	0x247C	# PARENTHESIZED DIGIT NINE
+0xC7FC	0x247D	# PARENTHESIZED NUMBER TEN
+0xC940	0x4E42	# <CJK>
+0xC941	0x4E5C	# <CJK>
+0xC942	0x51F5	# <CJK>
+0xC943	0x531A	# <CJK>
+0xC944	0x5382	# <CJK>
+0xC945	0x4E07	# <CJK>
+0xC946	0x4E0C	# <CJK>
+0xC947	0x4E47	# <CJK>
+0xC948	0x4E8D	# <CJK>
+0xC949	0x56D7	# <CJK>
+0xC94A	0xFA0C	# CJK COMPATIBILITY IDEOGRAPH-FA0C
+0xC94B	0x5C6E	# <CJK>
+0xC94C	0x5F73	# <CJK>
+0xC94D	0x4E0F	# <CJK>
+0xC94E	0x5187	# <CJK>
+0xC94F	0x4E0E	# <CJK>
+0xC950	0x4E2E	# <CJK>
+0xC951	0x4E93	# <CJK>
+0xC952	0x4EC2	# <CJK>
+0xC953	0x4EC9	# <CJK>
+0xC954	0x4EC8	# <CJK>
+0xC955	0x5198	# <CJK>
+0xC956	0x52FC	# <CJK>
+0xC957	0x536C	# <CJK>
+0xC958	0x53B9	# <CJK>
+0xC959	0x5720	# <CJK>
+0xC95A	0x5903	# <CJK>
+0xC95B	0x592C	# <CJK>
+0xC95C	0x5C10	# <CJK>
+0xC95D	0x5DFF	# <CJK>
+0xC95E	0x65E1	# <CJK>
+0xC95F	0x6BB3	# <CJK>
+0xC960	0x6BCC	# <CJK>
+0xC961	0x6C14	# <CJK>
+0xC962	0x723F	# <CJK>
+0xC963	0x4E31	# <CJK>
+0xC964	0x4E3C	# <CJK>
+0xC965	0x4EE8	# <CJK>
+0xC966	0x4EDC	# <CJK>
+0xC967	0x4EE9	# <CJK>
+0xC968	0x4EE1	# <CJK>
+0xC969	0x4EDD	# <CJK>
+0xC96A	0x4EDA	# <CJK>
+0xC96B	0x520C	# <CJK>
+0xC96C	0x531C	# <CJK>
+0xC96D	0x534C	# <CJK>
+0xC96E	0x5722	# <CJK>
+0xC96F	0x5723	# <CJK>
+0xC970	0x5917	# <CJK>
+0xC971	0x592F	# <CJK>
+0xC972	0x5B81	# <CJK>
+0xC973	0x5B84	# <CJK>
+0xC974	0x5C12	# <CJK>