--- a/.hgtags-top-repo Wed Jul 05 20:32:49 2017 +0200
+++ b/.hgtags-top-repo Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
ea38728b4f4bdd8fd0d7a89b18069f521cf05013 jdk9-b61
105d045a69174d870b69bfe471b3f2d05a9f8ecc jdk9-b62
0b32ed628fa60e4ab99fb0b5866d648e16231f17 jdk9-b63
+82cf9aab9a83e41c8194ba01af9666afdb856cbe jdk9-b64
--- a/common/autoconf/basics.m4 Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/basics.m4 Wed Jul 05 20:33:55 2017 +0200
@@ -705,9 +705,9 @@
# is performed.
filtered_files=`$ECHO "$files_present" \
| $SED -e 's/config.log//g' \
- -e 's/confdefs.h//g' \
- -e 's/fixpath.exe//g' \
- -e 's/ //g' \
+ -e 's/configure.log//g' \
+ -e 's/confdefs.h//g' \
+ -e 's/ //g' \
| $TR -d '\n'`
if test "x$filtered_files" != x; then
AC_MSG_NOTICE([Current directory is $CURDIR.])
@@ -1054,3 +1054,29 @@
AC_SUBST(BASH_ARGS)
])
+
+# Code to run after AC_OUTPUT
+AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
+[
+ # Try to move config.log (generated by autoconf) to the configure-support directory.
+ if test -e ./config.log; then
+ $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+ fi
+
+ # Rotate our log file (configure.log)
+ if test -e "$OUTPUT_ROOT/configure.log.old"; then
+ $RM -f "$OUTPUT_ROOT/configure.log.old"
+ fi
+ if test -e "$OUTPUT_ROOT/configure.log"; then
+ $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+ fi
+
+ # Move configure.log from current directory to the build output root
+ if test -e ./configure.log; then
+ echo found it
+ $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+ fi
+
+ # Make the compare script executable
+ $CHMOD +x $OUTPUT_ROOT/compare.sh
+])
--- a/common/autoconf/configure Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/configure Wed Jul 05 20:33:55 2017 +0200
@@ -255,13 +255,10 @@
set -x
fi
-if test "x$conf_debug_configure" = xtrue; then
- # Turn on logging, but don't turn on twice when called recursive
- conf_debug_logfile=./debug-configure.log
- (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile
-else
- ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
-fi
+# Now transfer control to the script generated by autoconf. This is where the
+# main work is done.
+conf_logfile=./configure.log
+(exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
conf_result_code=$?
###
--- a/common/autoconf/configure.ac Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/configure.ac Wed Jul 05 20:33:55 2017 +0200
@@ -265,15 +265,10 @@
# Create the actual output files. Now the main work of configure is done.
AC_OUTPUT
+
+# After AC_OUTPUT, we need to do final work
CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
- $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+BASIC_POST_CONFIG_OUTPUT
# Finally output some useful information to the user
HELP_PRINT_SUMMARY_AND_WARNINGS
--- a/common/autoconf/flags.m4 Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/flags.m4 Wed Jul 05 20:33:55 2017 +0200
@@ -231,7 +231,6 @@
AC_SUBST(C_FLAG_REORDER)
AC_SUBST(CXX_FLAG_REORDER)
- AC_SUBST(SHARED_LIBRARY_FLAGS)
AC_SUBST(SET_EXECUTABLE_ORIGIN)
AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
AC_SUBST(SET_SHARED_LIBRARY_NAME)
@@ -524,6 +523,10 @@
# CXXFLAGS_JDK - C++ Compiler flags
# COMMON_CCXXFLAGS_JDK - common to C and C++
if test "x$TOOLCHAIN_TYPE" = xgcc; then
+ if test "x$OPENJDK_TARGET_CPU" = xx86; then
+ # Force compatibility with i586 on 32 bit intel platforms.
+ COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+ fi
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
-pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
case $OPENJDK_TARGET_CPU_ARCH in
@@ -900,6 +903,24 @@
[COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
+ AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors],
+ [do not consider native warnings to be an error @<:@enabled@:>@])])
+
+ AC_MSG_CHECKING([if native warnings are errors])
+ if test "x$enable_warnings_as_errors" = "xyes"; then
+ AC_MSG_RESULT([yes (explicitely set)])
+ WARNINGS_AS_ERRORS=true
+ elif test "x$enable_warnings_as_errors" = "xno"; then
+ AC_MSG_RESULT([no])
+ WARNINGS_AS_ERRORS=false
+ elif test "x$enable_warnings_as_errors" = "x"; then
+ AC_MSG_RESULT([yes (default)])
+ WARNINGS_AS_ERRORS=true
+ else
+ AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument])
+ fi
+ AC_SUBST(WARNINGS_AS_ERRORS)
+
case "${TOOLCHAIN_TYPE}" in
microsoft)
DISABLE_WARNING_PREFIX="-wd"
--- a/common/autoconf/generated-configure.sh Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/generated-configure.sh Wed Jul 05 20:33:55 2017 +0200
@@ -684,6 +684,7 @@
ENABLE_DEBUG_SYMBOLS
CFLAGS_WARNINGS_ARE_ERRORS
DISABLE_WARNING_PREFIX
+WARNINGS_AS_ERRORS
COMPILER_SUPPORTS_TARGET_BITS_FLAG
ZERO_ARCHFLAG
LDFLAGS_TESTEXE_SUFFIX
@@ -727,7 +728,6 @@
SET_SHARED_LIBRARY_NAME
SET_SHARED_LIBRARY_ORIGIN
SET_EXECUTABLE_ORIGIN
-SHARED_LIBRARY_FLAGS
CXX_FLAG_REORDER
C_FLAG_REORDER
SYSROOT_LDFLAGS
@@ -1086,6 +1086,7 @@
with_extra_cflags
with_extra_cxxflags
with_extra_ldflags
+enable_warnings_as_errors
enable_debug_symbols
enable_zip_debug_info
enable_native_coverage
@@ -1852,6 +1853,9 @@
--enable-rmiconnector-iiop
enable the JMX RMIConnector iiop transport
[disabled]
+ --disable-warnings-as-errors
+ do not consider native warnings to be an error
+ [enabled]
--disable-debug-symbols disable generation of debug symbols [enabled]
--disable-zip-debug-info
disable zipping of debug-info files [enabled]
@@ -3496,6 +3500,9 @@
# Check for support for specific options in bash
+# Code to run after AC_OUTPUT
+
+
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -4359,7 +4366,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1430918902
+DATE_WHEN_GENERATED=1431429776
###############################################################################
#
@@ -15335,9 +15342,9 @@
# is performed.
filtered_files=`$ECHO "$files_present" \
| $SED -e 's/config.log//g' \
- -e 's/confdefs.h//g' \
- -e 's/fixpath.exe//g' \
- -e 's/ //g' \
+ -e 's/configure.log//g' \
+ -e 's/confdefs.h//g' \
+ -e 's/ //g' \
| $TR -d '\n'`
if test "x$filtered_files" != x; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: Current directory is $CURDIR." >&5
@@ -41761,7 +41768,6 @@
-
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
@@ -42029,6 +42035,10 @@
# CXXFLAGS_JDK - C++ Compiler flags
# COMMON_CCXXFLAGS_JDK - common to C and C++
if test "x$TOOLCHAIN_TYPE" = xgcc; then
+ if test "x$OPENJDK_TARGET_CPU" = xx86; then
+ # Force compatibility with i586 on 32 bit intel platforms.
+ COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+ fi
COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
-pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
case $OPENJDK_TARGET_CPU_ARCH in
@@ -42471,6 +42481,31 @@
+ # Check whether --enable-warnings-as-errors was given.
+if test "${enable_warnings_as_errors+set}" = set; then :
+ enableval=$enable_warnings_as_errors;
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if native warnings are errors" >&5
+$as_echo_n "checking if native warnings are errors... " >&6; }
+ if test "x$enable_warnings_as_errors" = "xyes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitely set)" >&5
+$as_echo "yes (explicitely set)" >&6; }
+ WARNINGS_AS_ERRORS=true
+ elif test "x$enable_warnings_as_errors" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ WARNINGS_AS_ERRORS=false
+ elif test "x$enable_warnings_as_errors" = "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
+$as_echo "yes (default)" >&6; }
+ WARNINGS_AS_ERRORS=true
+ else
+ as_fn_error $? "--enable-warnings-as-errors accepts no argument" "$LINENO" 5
+ fi
+
+
case "${TOOLCHAIN_TYPE}" in
microsoft)
DISABLE_WARNING_PREFIX="-wd"
@@ -54179,14 +54214,31 @@
fi
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
- $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+# After AC_OUTPUT, we need to do final work
+
+
+ # Try to move config.log (generated by autoconf) to the configure-support directory.
+ if test -e ./config.log; then
+ $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+ fi
+
+ # Rotate our log file (configure.log)
+ if test -e "$OUTPUT_ROOT/configure.log.old"; then
+ $RM -f "$OUTPUT_ROOT/configure.log.old"
+ fi
+ if test -e "$OUTPUT_ROOT/configure.log"; then
+ $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+ fi
+
+ # Move configure.log from current directory to the build output root
+ if test -e ./configure.log; then
+ echo found it
+ $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+ fi
+
+ # Make the compare script executable
+ $CHMOD +x $OUTPUT_ROOT/compare.sh
+
# Finally output some useful information to the user
@@ -54280,14 +54332,20 @@
-if test -e "$OUTPUT_ROOT/config.log"; then
- $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
- if test $? -eq 0; then
- printf "The following warnings were produced. Repeated here for convenience:\n"
- # We must quote sed expression (using []) to stop m4 from eating the [].
- $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e 's/^configure:[0-9]*: //'
- printf "\n"
- fi
-fi
-
-
+ # Locate config.log.
+ if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+ CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+ elif test -e "./config.log"; then
+ CONFIG_LOG_PATH="."
+ fi
+
+ if test -e "$CONFIG_LOG_PATH/config.log"; then
+ $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+ if test $? -eq 0; then
+ printf "The following warnings were produced. Repeated here for convenience:\n"
+ # We must quote sed expression (using []) to stop m4 from eating the [].
+ $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e 's/^configure:[0-9]*: //'
+ printf "\n"
+ fi
+ fi
+
--- a/common/autoconf/help.m4 Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/help.m4 Wed Jul 05 20:33:55 2017 +0200
@@ -212,7 +212,7 @@
if test "x$TOOLCHAIN_VERSION" != "x"; then
print_version=" $TOOLCHAIN_VERSION"
fi
- printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
+ printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
printf "* C Compiler: Version $CC_VERSION_NUMBER (at $CC)\n"
printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at $CXX)\n"
@@ -263,14 +263,20 @@
AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
[
-if test -e "$OUTPUT_ROOT/config.log"; then
- $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
- if test $? -eq 0; then
- printf "The following warnings were produced. Repeated here for convenience:\n"
- # We must quote sed expression (using []) to stop m4 from eating the [].
- $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
- printf "\n"
+ # Locate config.log.
+ if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+ CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+ elif test -e "./config.log"; then
+ CONFIG_LOG_PATH="."
fi
-fi
+ if test -e "$CONFIG_LOG_PATH/config.log"; then
+ $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+ if test $? -eq 0; then
+ printf "The following warnings were produced. Repeated here for convenience:\n"
+ # We must quote sed expression (using []) to stop m4 from eating the [].
+ $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
+ printf "\n"
+ fi
+ fi
])
--- a/common/autoconf/spec.gmk.in Wed Jul 05 20:32:49 2017 +0200
+++ b/common/autoconf/spec.gmk.in Wed Jul 05 20:33:55 2017 +0200
@@ -321,6 +321,9 @@
DISABLE_WARNING_PREFIX := @DISABLE_WARNING_PREFIX@
CFLAGS_WARNINGS_ARE_ERRORS:=@CFLAGS_WARNINGS_ARE_ERRORS@
+# A global flag (true or false) determining if native warnings are considered errors.
+WARNINGS_AS_ERRORS := @WARNINGS_AS_ERRORS@
+
CFLAGS_CCACHE:=@CFLAGS_CCACHE@
# Tools that potentially need to be cross compilation aware.
@@ -394,9 +397,6 @@
LIPO:=@LIPO@
-# Command to create a shared library
-SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
-
# Options to linker to specify a mapfile.
# (Note absence of := assignment, because we do not want to evaluate the macro body here)
SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@
--- a/corba/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/corba/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
d690f489ca0bb95a6157d996da2fa72bcbcf02ea jdk9-b61
d27f7e0a7aca129969de23e9934408a31b4abf4c jdk9-b62
0acac6937de7a0868f8c6f88b7d036d780abeee6 jdk9-b63
+0a5e5a7c3539e8bde73d9fe55750e49a49cb8dac jdk9-b64
--- a/hotspot/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -466,3 +466,4 @@
715d2da5801c410746e92f08066d53bde1496286 jdk9-b61
1eab877142cce6ca06e556e2ad0af688f993f00b jdk9-b62
2ac9b6b36689b50d1562627067c92d51781b5684 jdk9-b63
+bf92b8db249cdfa5651ef954b6c0743a7e0ea4cd jdk9-b64
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Wed Jul 05 20:33:55 2017 +0200
@@ -810,9 +810,6 @@
bool unnecessary_volatile(const Node *barrier);
bool needs_releasing_store(const Node *store);
- // Use barrier instructions rather than load acquire / store
- // release.
- const bool UseBarriersForVolatile = false;
// Use barrier instructions for unsafe volatile gets rather than
// trying to identify an exact signature for them
const bool UseBarriersForUnsafeVolatileGet = false;
--- a/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp Wed Jul 05 20:33:55 2017 +0200
@@ -98,8 +98,8 @@
product(bool, NearCpool, true, \
"constant pool is close to instructions") \
\
- notproduct(bool, UseAcqRelForVolatileFields, false, \
- "Use acquire and release insns for volatile fields") \
+ product(bool, UseBarriersForVolatile, false, \
+ "Use memory barriers to implement volatile accesses") \
\
product(bool, UseCRC32, false, \
"Use CRC32 instructions for CRC32 computation") \
@@ -117,8 +117,8 @@
product(bool, NearCpool, true, \
"constant pool is close to instructions") \
\
- notproduct(bool, UseAcqRelForVolatileFields, false, \
- "Use acquire and release insns for volatile fields") \
+ product(bool, UseBarriersForVolatile, false, \
+ "Use memory barriers to implement volatile accesses") \
product(bool, UseNeon, false, \
"Use Neon for CRC32 computation") \
product(bool, UseCRC32, false, \
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -1314,7 +1314,7 @@
// case_array_offset_in_bytes()
movw(reg2, in_bytes(MultiBranchData::per_case_size()));
movw(rscratch1, in_bytes(MultiBranchData::case_array_offset()));
- maddw(index, index, reg2, rscratch1);
+ Assembler::maddw(index, index, reg2, rscratch1);
// Update the case count
increment_mdp_data_at(mdp,
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -1625,7 +1625,7 @@
sdivw(result, ra, rb);
} else {
sdivw(scratch, ra, rb);
- msubw(result, scratch, rb, ra);
+ Assembler::msubw(result, scratch, rb, ra);
}
return idivl_offset;
@@ -1655,7 +1655,7 @@
sdiv(result, ra, rb);
} else {
sdiv(scratch, ra, rb);
- msub(result, scratch, rb, ra);
+ Assembler::msub(result, scratch, rb, ra);
}
return idivq_offset;
@@ -3787,14 +3787,6 @@
}
}
- bool MacroAssembler::use_acq_rel_for_volatile_fields() {
-#ifdef PRODUCT
- return false;
-#else
- return UseAcqRelForVolatileFields;
-#endif
- }
-
void MacroAssembler::build_frame(int framesize) {
if (framesize == 0) {
// Is this even possible?
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp Wed Jul 05 20:33:55 2017 +0200
@@ -405,6 +405,18 @@
umaddl(Rd, Rn, Rm, zr);
}
+#define WRAP(INSN) \
+ void INSN(Register Rd, Register Rn, Register Rm, Register Ra) { \
+ if ((VM_Version::cpu_cpuFeatures() & VM_Version::CPU_A53MAC) && Ra != zr) \
+ nop(); \
+ Assembler::INSN(Rd, Rn, Rm, Ra); \
+ }
+
+ WRAP(madd) WRAP(msub) WRAP(maddw) WRAP(msubw)
+ WRAP(smaddl) WRAP(smsubl) WRAP(umaddl) WRAP(umsubl)
+#undef WRAP
+
+
// macro assembly operations needed for aarch64
// first two private routines for loading 32 bit or 64 bit constants
@@ -1094,9 +1106,6 @@
address read_polling_page(Register r, address page, relocInfo::relocType rtype);
address read_polling_page(Register r, relocInfo::relocType rtype);
- // Used by aarch64.ad to control code generation
- static bool use_acq_rel_for_volatile_fields();
-
// CRC32 code for java.util.zip.CRC32::updateBytes() instrinsic.
void update_byte_crc32(Register crc, Register val, Register table);
void update_word_crc32(Register crc, Register v, Register tmp,
@@ -1150,10 +1159,6 @@
int offset, int size);
};
-// Used by aarch64.ad to control code generation
-#define treat_as_volatile(MEM_NODE) \
- (MacroAssembler::use_acq_rel_for_volatile_fields() ? (MEM_NODE)->is_volatile() : false)
-
#ifdef ASSERT
inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
#endif
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -59,6 +59,9 @@
int VM_Version::_cpu;
int VM_Version::_model;
+int VM_Version::_model2;
+int VM_Version::_variant;
+int VM_Version::_revision;
int VM_Version::_stepping;
int VM_Version::_cpuFeatures;
const char* VM_Version::_features_str = "";
@@ -122,13 +125,47 @@
char buf[512];
- strcpy(buf, "simd");
+ _cpuFeatures = auxv;
+
+ int cpu_lines = 0;
+ if (FILE *f = fopen("/proc/cpuinfo", "r")) {
+ char buf[128], *p;
+ while (fgets(buf, sizeof (buf), f) != NULL) {
+ if (p = strchr(buf, ':')) {
+ long v = strtol(p+1, NULL, 0);
+ if (strncmp(buf, "CPU implementer", sizeof "CPU implementer" - 1) == 0) {
+ _cpu = v;
+ cpu_lines++;
+ } else if (strncmp(buf, "CPU variant", sizeof "CPU variant" - 1) == 0) {
+ _variant = v;
+ } else if (strncmp(buf, "CPU part", sizeof "CPU part" - 1) == 0) {
+ if (_model != v) _model2 = _model;
+ _model = v;
+ } else if (strncmp(buf, "CPU revision", sizeof "CPU revision" - 1) == 0) {
+ _revision = v;
+ }
+ }
+ }
+ fclose(f);
+ }
+
+ // Enable vendor specific features
+ if (_cpu == CPU_CAVIUM && _variant == 0) _cpuFeatures |= CPU_DMB_ATOMICS;
+ if (_cpu == CPU_ARM && (_model == 0xd03 || _model2 == 0xd03)) _cpuFeatures |= CPU_A53MAC;
+ // If an olde style /proc/cpuinfo (cpu_lines == 1) then if _model is an A57 (0xd07)
+ // we assume the worst and assume we could be on a big little system and have
+ // undisclosed A53 cores which we could be swapped to at any stage
+ if (_cpu == CPU_ARM && cpu_lines == 1 && _model == 0xd07) _cpuFeatures |= CPU_A53MAC;
+
+ sprintf(buf, "0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
+ if (_model2) sprintf(buf+strlen(buf), "(0x%03x)", _model2);
+ if (auxv & HWCAP_ASIMD) strcat(buf, ", simd");
if (auxv & HWCAP_CRC32) strcat(buf, ", crc");
if (auxv & HWCAP_AES) strcat(buf, ", aes");
if (auxv & HWCAP_SHA1) strcat(buf, ", sha1");
if (auxv & HWCAP_SHA2) strcat(buf, ", sha256");
- _features_str = strdup(buf);
+ _features_str = os::strdup(buf);
if (FLAG_IS_DEFAULT(UseCRC32)) {
UseCRC32 = (auxv & HWCAP_CRC32) != 0;
@@ -202,6 +239,10 @@
UseMultiplyToLenIntrinsic = true;
}
+ if (FLAG_IS_DEFAULT(UseBarriersForVolatile)) {
+ UseBarriersForVolatile = (_cpuFeatures & CPU_DMB_ATOMICS) != 0;
+ }
+
#ifdef COMPILER2
if (FLAG_IS_DEFAULT(OptoScheduling)) {
OptoScheduling = true;
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp Wed Jul 05 20:32:49 2017 +0200
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp Wed Jul 05 20:33:55 2017 +0200
@@ -34,6 +34,9 @@
protected:
static int _cpu;
static int _model;
+ static int _model2;
+ static int _variant;
+ static int _revision;
static int _stepping;
static int _cpuFeatures; // features returned by the "cpuid" instruction
// 0 if this instruction is not available
@@ -49,7 +52,40 @@
static void assert_is_initialized() {
}
+ enum {
+ CPU_ARM = 'A',
+ CPU_BROADCOM = 'B',
+ CPU_CAVIUM = 'C',
+ CPU_DEC = 'D',
+ CPU_INFINEON = 'I',
+ CPU_MOTOROLA = 'M',
+ CPU_NVIDIA = 'N',
+ CPU_AMCC = 'P',
+ CPU_QUALCOM = 'Q',
+ CPU_MARVELL = 'V',
+ CPU_INTEL = 'i',
+ } cpuFamily;
+
+ enum {
+ CPU_FP = (1<<0),
+ CPU_ASIMD = (1<<1),
+ CPU_EVTSTRM = (1<<2),
+ CPU_AES = (1<<3),
+ CPU_PMULL = (1<<4),
+ CPU_SHA1 = (1<<5),
+ CPU_SHA2 = (1<<6),
+ CPU_CRC32 = (1<<7),
+ CPU_A53MAC = (1 << 30),
+ CPU_DMB_ATOMICS = (1 << 31),
+ } cpuFeatureFlags;
+
static const char* cpu_features() { return _features_str; }
+ static int cpu_family() { return _cpu; }
+ static int cpu_model() { return _model; }
+ static int cpu_model2() { return _model2; }
+ static int cpu_variant() { return _variant; }
+ static int cpu_revision() { return _revision; }
+ static int cpu_cpuFeatures() { return _cpuFeatures; }
};
--- a/jaxp/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
f4a4a54620370f077c2e830a5561c8cfa811712b jdk9-b61
3bcf83c1bbc1b7663e930d72c133a9bd86c7618d jdk9-b62
4a8f895f0317dcc90479cb7cc97014312e69edf7 jdk9-b63
+6f91749b5aaef1a171ec2254163233438d1071d1 jdk9-b64
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java Wed Jul 05 20:33:55 2017 +0200
@@ -567,8 +567,12 @@
}
public NodeList makeNodeList(DTMAxisIterator iter) {
- // TODO: gather nodes from all DOMs ?
- return _main.makeNodeList(iter);
+ int index = iter.next();
+ if (index == DTM.NULL) {
+ return null;
+ }
+ iter.reset();
+ return _adapters[getDTMId(index)].makeNodeList(iter);
}
public String getLanguage(int node) {
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,7 +1,7 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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
--- a/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. 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
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathEvaluationResult.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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
--- a/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/javax/xml/xpath/XPathNodes.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/javax/xml/transform/DocumentExtFunc.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.xml.transform;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class DocumentExtFunc {
+
+ public static String test(NodeList list) {
+ Node node = list.item(0);
+ return "["+node.getNodeName() + ":" + node.getNodeValue()+"]";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/javax/xml/transform/XSLTFunctionsTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.xml.transform;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+/*
+ * @summary This class contains tests for XSLT functions.
+ */
+
+public class XSLTFunctionsTest {
+
+ /**
+ * @bug 8062518
+ * Verifies that a reference to the DTM created by XSLT document function is
+ * actually read from the DTM by an extension function.
+ * @param xml Content of xml file to process
+ * @param xsl stylesheet content that loads external document {@code externalDoc}
+ * with XSLT 'document' function and then reads it with
+ * DocumentExtFunc.test() function
+ * @param externalDoc Content of the external xml document
+ * @param expectedResult Expected transformation result
+ **/
+ @Test(dataProvider = "document")
+ public void testDocument(final String xml, final String xsl,
+ final String externalDoc, final String expectedResult) throws Exception {
+ // Prepare sources for transormation
+ Source src = new StreamSource(new StringReader(xml));
+ Source xslsrc = new StreamSource(new StringReader(xsl));
+
+ // Create factory and transformer
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer t = tf.newTransformer( xslsrc );
+ t.setErrorListener(tf.getErrorListener());
+
+ // Set URI Resolver to return the newly constructed xml
+ // stream source object from xml test string
+ t.setURIResolver(new URIResolver() {
+ @Override
+ public Source resolve(String href, String base)
+ throws TransformerException {
+ if (href.contains("externalDoc")) {
+ return new StreamSource(new StringReader(externalDoc));
+ } else {
+ return new StreamSource(new StringReader(xml));
+ }
+ }
+ });
+
+ // Prepare output stream
+ StringWriter xmlResultString = new StringWriter();
+ StreamResult xmlResultStream = new StreamResult(xmlResultString);
+
+ //Transform the xml
+ t.transform(src, xmlResultStream);
+
+ // If the document can't be accessed and the bug is in place then
+ // reported exception will be thrown during transformation
+ System.out.println("Transformation result:"+xmlResultString.toString().trim());
+
+ // Check the result - it should contain two (node name, node values) entries -
+ // one for original document, another for a document created with
+ // call to 'document' function
+ assertEquals(xmlResultString.toString().trim(), expectedResult);
+ }
+
+ @DataProvider(name = "document")
+ public static Object[][] documentTestData() {
+ return new Object[][] {
+ {documentTestXml, documentTestXsl, documentTestExternalDoc, documentTesteExpectedResult},
+ };
+ }
+
+ static final String documentTestXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test>Doc</Test>";
+
+ static final String documentTestExternalDoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test>External Doc</Test>";
+
+ static final String documentTestXsl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<xsl:transform version=\"1.0\""
+ + " xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" "
+ + " xmlns:cfunc=\"http://xml.apache.org/xalan/java/\">"
+ + "<xsl:template match=\"/\">"
+ + "<xsl:element name=\"root\">"
+ + "<xsl:variable name=\"other_doc\" select=\"document('externalDoc')\"/>"
+ + "<!-- Source -->"
+ + "<xsl:value-of select=\"cfunc:javax.xml.transform.DocumentExtFunc.test(/Test)\"/>"
+ + "<!-- document() -->"
+ + "<xsl:value-of select=\"cfunc:javax.xml.transform.DocumentExtFunc.test($other_doc/Test)\"/>"
+ + "</xsl:element></xsl:template></xsl:transform>";
+
+ static final String documentTesteExpectedResult = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ + "<root>[Test:Doc][Test:External Doc]</root>";
+}
--- a/jaxws/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/jaxws/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -309,3 +309,4 @@
77f44848c44c003205490bf5ab88035233b65418 jdk9-b61
cd0cf72b2cbf4adb778a02505fb065bb2292688c jdk9-b62
b5c22d09b1c91dd49b006f38d8ba9c4397517ccc jdk9-b63
+df100399ed27d0eaa57c137ca99819a0fee66178 jdk9-b64
--- a/jdk/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
da84dcac1b0b12c5b836b05ac75ecbfadee0cd32 jdk9-b61
49118e68fbd4cc0044e718c47db681946d5efd69 jdk9-b62
fd3281c400347088b36aeb16273aa679d53a81a4 jdk9-b63
+7de8d036ad0980d988d1b9b4b4e6be555d9fbf98 jdk9-b64
--- a/jdk/make/CompileDemos.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/CompileDemos.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -396,7 +396,7 @@
$(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER, \
SRC := $(DEMO_SOLARIS_SRC)/jni/Poller, \
OPTIMIZATION := LOW, \
- CFLAGS := $(CFLAGS_JDKLIB) $(SHARED_LIBRARY_FLAGS) \
+ CFLAGS := $(CFLAGS_JDKLIB) \
-I$(SUPPORT_OUTPUTDIR)/demo/classes/jni/Poller, \
LDFLAGS := $(LDFLAGS_JDKLIB), \
LDFLAGS_SUFFIX_solaris := -lc, \
--- a/jdk/make/data/charsetmapping/charsets Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/data/charsetmapping/charsets Wed Jul 05 20:33:55 2017 +0200
@@ -1833,10 +1833,3 @@
##
########################################################
-charset x-COMPOUND_TEXT COMPOUND_TEXT
- package sun.nio.cs.ext
- type source
- os unix
- alias COMPOUND_TEXT # JDK historical
- alias x11-compound_text
- alias x-compound-text
--- a/jdk/make/launcher/Launcher-jdk.accessibility.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/launcher/Launcher-jdk.accessibility.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -39,7 +39,7 @@
CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
-analyze- -Od -Gd -D_WINDOWS \
-D_UNICODE -DUNICODE -RTC1 -EHsc, \
- DISABLED_WARNINGS_microsoft := 4267, \
+ DISABLED_WARNINGS_microsoft := 4267 4996, \
LDFLAGS := $(LDFLAGS_JDKEXE) \
Advapi32.lib Version.lib User32.lib, \
OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jabswitch, \
--- a/jdk/make/launcher/Launcher-jdk.pack200.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/launcher/Launcher-jdk.pack200.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -84,6 +84,7 @@
CFLAGS_linux := -fPIC, \
CFLAGS_solaris := -KPIC, \
CFLAGS_macosx := -fPIC, \
+ DISABLED_WARNINGS_gcc := unused-result, \
MAPFILE := $(UNPACK_MAPFILE),\
LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
$(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
--- a/jdk/make/lib/Awt2dLibraries.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/Awt2dLibraries.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -246,9 +246,10 @@
CFLAGS := $(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS), \
DISABLED_WARNINGS_gcc := sign-compare unused-result maybe-uninitialized \
format-nonliteral parentheses, \
- DISABLED_WARNINGS_clang := logical-op-parentheses, \
+ DISABLED_WARNINGS_clang := logical-op-parentheses extern-initializer, \
DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
- DISABLED_WARNINGS_microsoft := 4297 4244 4267, \
+ DISABLED_WARNINGS_microsoft := 4297 4244 4267 4996, \
+ WARNINGS_AS_ERRORS_gcc := false, \
ASFLAGS := $(LIBAWT_ASFLAGS), \
MAPFILE := $(LIBAWT_MAPFILE), \
LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -357,6 +358,7 @@
format-security int-to-pointer-cast parentheses, \
DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE \
E_ASSIGNMENT_TYPE_MISMATCH E_NON_CONST_INIT, \
+ WARNINGS_AS_ERRORS_gcc := false, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_xawt/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(X_LIBS) $(LIBAWT_XAWT_LDFLAGS) \
@@ -408,11 +410,11 @@
INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \
OPTIMIZATION := HIGHEST, \
CFLAGS := $(filter-out -xc99=%none, $(CFLAGS_JDKLIB)) \
- $(SHARED_LIBRARY_FLAGS) $(LIBLCMS_CPPFLAGS) \
+ $(LIBLCMS_CPPFLAGS) \
$(LCMS_CFLAGS), \
CFLAGS_solaris := -xc99=no_lib, \
CFLAGS_windows := -DCMS_IS_WINDOWS_, \
- DISABLED_WARNINGS_gcc := format-nonliteral, \
+ DISABLED_WARNINGS_gcc := format-nonliteral type-limits, \
DISABLED_WARNINGS_clang := tautological-compare, \
DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/liblcms/mapfile-vers, \
@@ -647,10 +649,13 @@
OPTIMIZATION := $(LIBFONTMANAGER_OPTIMIZATION), \
CFLAGS_windows = -DCC_NOEX, \
DISABLED_WARNINGS_gcc := sign-compare int-to-pointer-cast reorder \
- delete-non-virtual-dtor, \
- DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types, \
+ delete-non-virtual-dtor type-limits, \
+ DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
+ tautological-constant-out-of-range-compare int-to-pointer-cast, \
DISABLED_WARNINGS_solstudio := truncwarn, \
- DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090, \
+ DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090 4996 4146, \
+ WARNINGS_AS_ERRORS_gcc := false, \
+ WARNINGS_AS_ERRORS_solstudio := false, \
MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
LDFLAGS := $(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -880,10 +885,10 @@
OPTIMIZATION := LOW, \
CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) \
$(GIFLIB_CFLAGS) $(LIBJPEG_CFLAGS) $(PNG_CFLAGS), \
- DISABLED_WARNINGS_gcc := type-limits unused-result maybe-uninitialized, \
+ DISABLED_WARNINGS_gcc := sign-compare type-limits unused-result maybe-uninitialized, \
DISABLED_WARNINGS_clang := incompatible-pointer-types, \
- DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST, \
- DISABLED_WARNINGS_microsoft := 4244 4267, \
+ DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST E_DECLARATION_IN_CODE, \
+ DISABLED_WARNINGS_microsoft := 4018 4244 4267, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -956,6 +961,7 @@
DISABLED_WARNINGS_clang := incomplete-implementation \
deprecated-declarations objc-method-access bitwise-op-parentheses \
incompatible-pointer-types parentheses-equality extra-tokens, \
+ WARNINGS_AS_ERRORS_clang := false, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-L$(INSTALL_LIBRARIES_HERE), \
--- a/jdk/make/lib/CoreLibraries.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/CoreLibraries.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -149,7 +149,8 @@
DISABLED_WARNINGS_gcc := type-limits format-nonliteral, \
DISABLED_WARNINGS_clang := int-conversion, \
DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
- DISABLED_WARNINGS_microsoft := 4022 4267, \
+ DISABLED_WARNINGS_microsoft := 4022 4267 4996, \
+ WARNINGS_AS_ERRORS_solstudio := false, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -38,6 +38,7 @@
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
$(addprefix -I, $(LIBJ2UCRYPTO_SRC)), \
+ DISABLED_WARNINGS_solstudio := E_MACRO_REDEFINED, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2ucrypto/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB), \
LDFLAGS_SUFFIX := $(LIBDL), \
--- a/jdk/make/lib/NetworkingLibraries.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/NetworkingLibraries.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -34,7 +34,7 @@
$(LIBJAVA_HEADER_FLAGS) $(addprefix -I, $(LIBNET_SRC_DIRS)), \
DISABLED_WARNINGS_gcc := format-nonliteral, \
DISABLED_WARNINGS_clang := parentheses-equality constant-logical-operand, \
- DISABLED_WARNINGS_microsoft := 4244 4047 4133, \
+ DISABLED_WARNINGS_microsoft := 4244 4047 4133 4996, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnet/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/NioLibraries.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/NioLibraries.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -70,7 +70,7 @@
$(BUILD_LIBNIO_CFLAGS), \
DISABLED_WARNINGS_gcc := type-limits, \
DISABLED_WARNINGS_clang := tautological-compare, \
- DISABLED_WARNINGS_microsoft := 4244, \
+ DISABLED_WARNINGS_microsoft := 4244 4996, \
MAPFILE := $(BUILD_LIBNIO_MAPFILE), \
LDFLAGS := $(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/SoundLibraries.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/make/lib/SoundLibraries.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -111,10 +111,6 @@
LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES)
endif # OPENJDK_TARGET_OS solaris
-
- ifeq ($(OPENJDK_TARGET_CPU), aarch64)
- LIBJSOUND_CFLAGS += -DX_ARCH=X_AARCH64
- endif
LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'
$(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND, \
@@ -129,6 +125,7 @@
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \
DISABLED_WARNINGS_clang := implicit-function-declaration \
deprecated-writable-strings, \
+ WARNINGS_AS_ERRORS_clang := false, \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjsound/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c Wed Jul 05 20:33:55 2017 +0200
@@ -948,8 +948,15 @@
jmethodID getCanonicalNameMID = NULL;
NULL_CHECK(getCanonicalNameMID = (*env)->GetMethodID(env, classClass, "getCanonicalName", "()Ljava/lang/String;"));
- jstring mainClassString = NULL;
- NULL_CHECK(mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID));
+ jstring mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID);
+ if ((*env)->ExceptionCheck(env)) {
+ /*
+ * Clears all errors caused by getCanonicalName() on the mainclass and
+ * leaves the JAVA_MAIN_CLASS__<pid> empty.
+ */
+ (*env)->ExceptionClear(env);
+ return;
+ }
const char *mainClassName = NULL;
NULL_CHECK(mainClassName = (*env)->GetStringUTFChars(env, mainClassString, NULL));
@@ -1056,7 +1063,7 @@
* Note the jvmInstance must be initialized first before entering into
* ShowSplashScreen, as there is a callback into the JLI_GetJavaVMInstance.
*/
-void PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm) {
+void PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm) {
jvmInstance = vm;
SetMainClassForAWT(env, mainClass);
CHECK_EXCEPTION_RETURN();
--- a/jdk/src/java.base/share/classes/java/io/BufferedReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/BufferedReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -272,6 +272,7 @@
* stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char cbuf[], int off, int len) throws IOException {
synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/CharArrayReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/CharArrayReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -116,6 +116,7 @@
* the end of the stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char b[], int off, int len) throws IOException {
synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/FilterReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/FilterReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -69,6 +69,7 @@
* Reads characters into a portion of an array.
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char cbuf[], int off, int len) throws IOException {
return in.read(cbuf, off, len);
--- a/jdk/src/java.base/share/classes/java/io/InputStreamReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/InputStreamReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -179,6 +179,7 @@
* stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char cbuf[], int offset, int length) throws IOException {
return sd.read(cbuf, offset, length);
--- a/jdk/src/java.base/share/classes/java/io/LineNumberReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/LineNumberReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -159,6 +159,8 @@
*
* @throws IOException
* If an I/O error occurs
+ *
+ * @throws IndexOutOfBoundsException {@inheritDoc}
*/
@SuppressWarnings("fallthrough")
public int read(char cbuf[], int off, int len) throws IOException {
--- a/jdk/src/java.base/share/classes/java/io/PipedReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PipedReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -286,6 +286,7 @@
* <a href=PipedInputStream.html#BROKEN> <code>broken</code></a>,
* {@link #connect(java.io.PipedWriter) unconnected}, closed,
* or an I/O error occurs.
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public synchronized int read(char cbuf[], int off, int len) throws IOException {
if (!connected) {
--- a/jdk/src/java.base/share/classes/java/io/PushbackReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/PushbackReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -102,6 +102,7 @@
* stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char cbuf[], int off, int len) throws IOException {
synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/Reader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/Reader.java Wed Jul 05 20:33:55 2017 +0200
@@ -153,6 +153,9 @@
* stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException
+ * If {@code off} is negative, or {@code len} is negative,
+ * or {@code len} is greater than {@code cbuf.length - off}
*/
abstract public int read(char cbuf[], int off, int len) throws IOException;
--- a/jdk/src/java.base/share/classes/java/io/StringReader.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/io/StringReader.java Wed Jul 05 20:33:55 2017 +0200
@@ -84,6 +84,7 @@
* stream has been reached
*
* @exception IOException If an I/O error occurs
+ * @exception IndexOutOfBoundsException {@inheritDoc}
*/
public int read(char cbuf[], int off, int len) throws IOException {
synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java Wed Jul 05 20:33:55 2017 +0200
@@ -26,12 +26,24 @@
package java.lang.annotation;
/**
- * Indicates that annotations with a type are to be documented by javadoc
- * and similar tools by default. This type should be used to annotate the
- * declarations of types whose annotations affect the use of annotated
- * elements by their clients. If a type declaration is annotated with
- * Documented, its annotations become part of the public API
- * of the annotated elements.
+ * If the annotation {@code @Documented} is present on the declaration
+ * of an annotation type <i>A</i>, then any {@code @A} annotation on
+ * an element is considered part of the element's public contract.
+ *
+ * In more detail, when an annotation type <i>A</i> is annotated with
+ * {@code Documented}, the presence and value of annotations of type
+ * <i>A</i> are a part of the public contract of the elements <i>A</i>
+ * annotates.
+ *
+ * Conversely, if an annotation type <i>B</i> is <em>not</em>
+ * annotated with {@code Documented}, the presence and value of
+ * <i>B</i> annotations are <em>not</em> part of the public contract
+ * of the elements <i>B</i> annotates.
+ *
+ * Concretely, if an annotation type is annotated with {@code
+ * Documented}, by default a tool like javadoc will display
+ * annotations of that type in its output while annotations of
+ * annotation types without {@code Documented} will not be displayed.
*
* @author Joshua Bloch
* @since 1.5
--- a/jdk/src/java.base/share/classes/java/security/Policy.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -49,7 +49,8 @@
* implementation (a default subclass implementation of this abstract class).
* The default Policy implementation can be changed by setting the value
* of the {@code policy.provider} security property to the fully qualified
- * name of the desired Policy subclass implementation.
+ * name of the desired Policy subclass implementation. The system class loader
+ * is used to load this class.
*
* <p> Application code can directly subclass Policy to provide a custom
* implementation. In addition, an instance of a Policy object can be
@@ -111,6 +112,10 @@
private static final Debug debug = Debug.getInstance("policy");
+ // Default policy provider
+ private static final String DEFAULT_POLICY =
+ "sun.security.provider.PolicyFile";
+
// Cache mapping ProtectionDomain.Key to PermissionCollection
private WeakHashMap<ProtectionDomain.Key, PermissionCollection> pdMapping;
@@ -169,74 +174,7 @@
synchronized (Policy.class) {
PolicyInfo pinfo = policy.get();
if (pinfo.policy == null) {
- String policy_class = AccessController.doPrivileged(
- new PrivilegedAction<>() {
- public String run() {
- return Security.getProperty("policy.provider");
- }
- });
- if (policy_class == null) {
- policy_class = "sun.security.provider.PolicyFile";
- }
-
- try {
- pinfo = new PolicyInfo(
- (Policy) Class.forName(policy_class).newInstance(),
- true);
- } catch (Exception e) {
- /*
- * The policy_class seems to be an extension
- * so we have to bootstrap loading it via a policy
- * provider that is on the bootclasspath.
- * If it loads then shift gears to using the configured
- * provider.
- */
-
- // install the bootstrap provider to avoid recursion
- Policy polFile = new sun.security.provider.PolicyFile();
- pinfo = new PolicyInfo(polFile, false);
- policy.set(pinfo);
-
- final String pc = policy_class;
- Policy pol = AccessController.doPrivileged(
- new PrivilegedAction<>() {
- public Policy run() {
- try {
- ClassLoader cl =
- ClassLoader.getSystemClassLoader();
- // we want the extension loader
- ClassLoader extcl = null;
- while (cl != null) {
- extcl = cl;
- cl = cl.getParent();
- }
- return (extcl != null ? (Policy)Class.forName(
- pc, true, extcl).newInstance() : null);
- } catch (Exception e) {
- if (debug != null) {
- debug.println("policy provider " +
- pc +
- " not available");
- e.printStackTrace();
- }
- return null;
- }
- }
- });
- /*
- * if it loaded install it as the policy provider. Otherwise
- * continue to use the system default implementation
- */
- if (pol != null) {
- pinfo = new PolicyInfo(pol, true);
- } else {
- if (debug != null) {
- debug.println("using sun.security.provider.PolicyFile");
- }
- pinfo = new PolicyInfo(polFile, true);
- }
- }
- policy.set(pinfo);
+ return loadPolicyProvider();
}
return pinfo.policy;
}
@@ -245,6 +183,70 @@
}
/**
+ * Loads and instantiates a Policy implementation specified by the
+ * policy.provider security property. Note that this method should only
+ * be called by getPolicyNoCheck and from within a synchronized block with
+ * an intrinsic lock on the Policy.class.
+ */
+ private static Policy loadPolicyProvider() {
+ String policyProvider =
+ AccessController.doPrivileged(new PrivilegedAction<>() {
+ @Override
+ public String run() {
+ return Security.getProperty("policy.provider");
+ }
+ });
+
+ /*
+ * If policy.provider is not set or is set to the default provider,
+ * simply instantiate it and return.
+ */
+ if (policyProvider == null || policyProvider.isEmpty() ||
+ policyProvider.equals(DEFAULT_POLICY))
+ {
+ Policy polFile = new sun.security.provider.PolicyFile();
+ policy.set(new PolicyInfo(polFile, true));
+ return polFile;
+ }
+
+ /*
+ * Locate, load, and instantiate the policy.provider impl using
+ * the system class loader. While doing so, install the bootstrap
+ * provider to avoid potential recursion.
+ */
+ Policy polFile = new sun.security.provider.PolicyFile();
+ policy.set(new PolicyInfo(polFile, false));
+
+ Policy pol = AccessController.doPrivileged(new PrivilegedAction<>() {
+ @Override
+ public Policy run() {
+ try {
+ ClassLoader scl = ClassLoader.getSystemClassLoader();
+ Class<?> c = Class.forName(policyProvider, true, scl);
+ return (Policy)c.newInstance();
+ } catch (Exception e) {
+ if (debug != null) {
+ debug.println("policy provider " + policyProvider +
+ " not available");
+ e.printStackTrace();
+ }
+ return null;
+ }
+ }
+ });
+
+ if (pol == null) {
+ // Fallback and use the system default implementation
+ if (debug != null) {
+ debug.println("using " + DEFAULT_POLICY);
+ }
+ pol = polFile;
+ }
+ policy.set(new PolicyInfo(pol, true));
+ return pol;
+ }
+
+ /**
* Sets the system-wide Policy object. This method first calls
* {@code SecurityManager.checkPermission} with a
* {@code SecurityPermission("setPolicy")}
--- a/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -30,7 +30,12 @@
* <p>
* This class is used to provide necessary configuration parameters (server
* name and port number) to implementations of the LDAP {@code CertStore}
- * algorithm.
+ * algorithm. However, if you are retrieving certificates or CRLs from
+ * an ldap URI as specified by RFC 5280, use the
+ * {@link java.security.cert.URICertStoreParameters URICertStoreParameters}
+ * instead as the URI may contain additional information such as the
+ * distinguished name that will help the LDAP CertStore find the specific
+ * certificates and CRLs.
* <p>
* <b>Concurrent Access</b>
* <p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/URICertStoreParameters.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.security.cert;
+
+import java.net.URI;
+
+/**
+ * Parameters used as input for {@code CertStore} algorithms which use
+ * information contained in a URI to retrieve certificates and CRLs.
+ * <p>
+ * This class is used to provide necessary configuration parameters
+ * through a URI as defined in RFC 5280 to implementations of
+ * {@code CertStore} algorithms.
+ * <p>
+ * <b>Concurrent Access</b>
+ * <p>
+ * Unless otherwise specified, the methods defined in this class are not
+ * thread-safe. Multiple threads that need to access a single
+ * object concurrently should synchronize amongst themselves and
+ * provide the necessary locking. Multiple threads each manipulating
+ * separate objects need not synchronize.
+ *
+ * @since 1.9
+ * @see CertStore
+ * @see java.net.URI
+ */
+public final class URICertStoreParameters implements CertStoreParameters {
+
+ /**
+ * The uri, cannot be null
+ */
+ private final URI uri;
+
+ /*
+ * Hash code for this parameters.
+ */
+ private int myhash = -1;
+
+ /**
+ * Creates an instance of {@code URICertStoreParameters} with the
+ * specified URI.
+ *
+ * @param uri the URI which contains configuration information.
+ * @throws NullPointerException if {@code uri} is null
+ */
+ public URICertStoreParameters(URI uri) {
+ if (uri == null) {
+ throw new NullPointerException();
+ }
+ this.uri = uri;
+ }
+
+ /**
+ * Returns the URI used to construct this
+ * {@code URICertStoreParameters} object.
+ *
+ * @return the URI.
+ */
+ public URI getURI() {
+ return uri;
+ }
+
+ /**
+ * Returns a copy of this object. Changes to the copy will not affect
+ * the original and vice versa.
+ *
+ * @return the copy
+ */
+ @Override
+ public URICertStoreParameters clone() {
+ try {
+ return new URICertStoreParameters(uri);
+ } catch (NullPointerException e) {
+ /* Cannot happen */
+ throw new InternalError(e.toString(), e);
+ }
+ }
+
+ /**
+ * Returns a hash code value for this parameters object.
+ * The hash code is generated using the URI supplied at construction.
+ *
+ * @return a hash code value for this parameters.
+ */
+ @Override
+ public int hashCode() {
+ if (myhash == -1) {
+ myhash = uri.hashCode()*7;
+ }
+ return myhash;
+ }
+
+ /**
+ * Compares the specified object with this parameters object for equality.
+ * Two URICertStoreParameters are considered equal if the URIs used
+ * to construct them are equal.
+ *
+ * @param p the object to test for equality with this parameters.
+ *
+ * @return true if the specified object is equal to this parameters object.
+ */
+ @Override
+ public boolean equals(Object p) {
+ if (p == null || (!(p instanceof URICertStoreParameters))) {
+ return false;
+ }
+
+ if (p == this) {
+ return true;
+ }
+
+ URICertStoreParameters other = (URICertStoreParameters)p;
+ return uri.equals(other.getURI());
+ }
+
+ /**
+ * Returns a formatted string describing the parameters
+ * including the URI used to construct this object.
+ *
+ * @return a formatted string describing the parameters
+ */
+ @Override
+ public String toString() {
+ return "URICertStoreParameters: " + uri.toString();
+ }
+}
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java Wed Jul 05 20:33:55 2017 +0200
@@ -64,6 +64,7 @@
import java.util.function.Function;
import java.util.function.IntBinaryOperator;
import java.util.function.LongBinaryOperator;
+import java.util.function.Predicate;
import java.util.function.ToDoubleBiFunction;
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntBiFunction;
@@ -1619,6 +1620,45 @@
}
/**
+ * Helper method for EntrySet.removeIf
+ */
+ boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+ if (function == null) throw new NullPointerException();
+ Node<K,V>[] t;
+ boolean removed = false;
+ if ((t = table) != null) {
+ Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+ for (Node<K,V> p; (p = it.advance()) != null; ) {
+ K k = p.key;
+ V v = p.val;
+ Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+ if (function.test(e) && replaceNode(k, null, v) != null)
+ removed = true;
+ }
+ }
+ return removed;
+ }
+
+ /**
+ * Helper method for Values.removeIf
+ */
+ boolean removeValueIf(Predicate<? super V> function) {
+ if (function == null) throw new NullPointerException();
+ Node<K,V>[] t;
+ boolean removed = false;
+ if ((t = table) != null) {
+ Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+ for (Node<K,V> p; (p = it.advance()) != null; ) {
+ K k = p.key;
+ V v = p.val;
+ if (function.test(v) && replaceNode(k, null, v) != null)
+ removed = true;
+ }
+ }
+ return removed;
+ }
+
+ /**
* If the specified key is not already associated with a value,
* attempts to compute its value using the given mapping function
* and enters it into this map unless {@code null}. The entire
@@ -4690,6 +4730,10 @@
throw new UnsupportedOperationException();
}
+ public boolean removeIf(Predicate<? super V> filter) {
+ return map.removeValueIf(filter);
+ }
+
public Spliterator<V> spliterator() {
Node<K,V>[] t;
ConcurrentHashMap<K,V> m = map;
@@ -4759,6 +4803,10 @@
return added;
}
+ public boolean removeIf(Predicate<? super Entry<K, V>> filter) {
+ return map.removeEntryIf(filter);
+ }
+
public final int hashCode() {
int h = 0;
Node<K,V>[] t;
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java Wed Jul 05 20:33:55 2017 +0200
@@ -34,6 +34,7 @@
*/
package java.util.concurrent;
+
import java.util.Map;
import java.util.Objects;
import java.util.function.BiConsumer;
@@ -44,6 +45,14 @@
* A {@link java.util.Map} providing thread safety and atomicity
* guarantees.
*
+ * <p>To maintain the specified guarantees, default implementations of
+ * methods including {@link #putIfAbsent} inherited from {@link Map}
+ * must be overridden by implementations of this interface. Similarly,
+ * implementations of the collections returned by methods {@link
+ * #keySet}, {@link #values}, and {@link #entrySet} must override
+ * methods such as {@code removeIf} when necessary to
+ * preserve atomicity guarantees.
+ *
* <p>Memory consistency effects: As with other concurrent
* collections, actions in a thread prior to placing an object into a
* {@code ConcurrentMap} as a key or value
@@ -60,7 +69,7 @@
* @param <K> the type of keys maintained by this map
* @param <V> the type of mapped values
*/
-public interface ConcurrentMap<K, V> extends Map<K, V> {
+public interface ConcurrentMap<K,V> extends Map<K,V> {
/**
* {@inheritDoc}
@@ -86,9 +95,9 @@
* @implSpec The default implementation is equivalent to, for this
* {@code map}:
* <pre> {@code
- * for ((Map.Entry<K, V> entry : map.entrySet())
- * action.accept(entry.getKey(), entry.getValue());
- * }</pre>
+ * for (Map.Entry<K,V> entry : map.entrySet()) {
+ * action.accept(entry.getKey(), entry.getValue());
+ * }}</pre>
*
* @implNote The default implementation assumes that
* {@code IllegalStateException} thrown by {@code getKey()} or
@@ -101,13 +110,13 @@
@Override
default void forEach(BiConsumer<? super K, ? super V> action) {
Objects.requireNonNull(action);
- for (Map.Entry<K, V> entry : entrySet()) {
+ for (Map.Entry<K,V> entry : entrySet()) {
K k;
V v;
try {
k = entry.getKey();
v = entry.getValue();
- } catch(IllegalStateException ise) {
+ } catch (IllegalStateException ise) {
// this usually means the entry is no longer in the map.
continue;
}
@@ -117,14 +126,13 @@
/**
* If the specified key is not already associated
- * with a value, associate it with the given value.
- * This is equivalent to
- * <pre> {@code
+ * with a value, associates it with the given value.
+ * This is equivalent to, for this {@code map}:
+ * <pre> {@code
* if (!map.containsKey(key))
* return map.put(key, value);
* else
- * return map.get(key);
- * }</pre>
+ * return map.get(key);}</pre>
*
* except that the action is performed atomically.
*
@@ -147,18 +155,19 @@
* @throws IllegalArgumentException if some property of the specified key
* or value prevents it from being stored in this map
*/
- V putIfAbsent(K key, V value);
+ V putIfAbsent(K key, V value);
/**
* Removes the entry for a key only if currently mapped to a given value.
- * This is equivalent to
- * <pre> {@code
- * if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
+ * This is equivalent to, for this {@code map}:
+ * <pre> {@code
+ * if (map.containsKey(key)
+ * && Objects.equals(map.get(key), value)) {
* map.remove(key);
* return true;
- * } else
+ * } else {
* return false;
- * }</pre>
+ * }}</pre>
*
* except that the action is performed atomically.
*
@@ -181,14 +190,15 @@
/**
* Replaces the entry for a key only if currently mapped to a given value.
- * This is equivalent to
- * <pre> {@code
- * if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) {
+ * This is equivalent to, for this {@code map}:
+ * <pre> {@code
+ * if (map.containsKey(key)
+ * && Objects.equals(map.get(key), oldValue)) {
* map.put(key, newValue);
* return true;
- * } else
+ * } else {
* return false;
- * }</pre>
+ * }}</pre>
*
* except that the action is performed atomically.
*
@@ -212,13 +222,12 @@
/**
* Replaces the entry for a key only if currently mapped to some value.
- * This is equivalent to
- * <pre> {@code
- * if (map.containsKey(key)) {
+ * This is equivalent to, for this {@code map}:
+ * <pre> {@code
+ * if (map.containsKey(key))
* return map.put(key, value);
- * } else
- * return null;
- * }</pre>
+ * else
+ * return null;}</pre>
*
* except that the action is performed atomically.
*
@@ -249,12 +258,14 @@
* @implSpec
* <p>The default implementation is equivalent to, for this {@code map}:
* <pre> {@code
- * for ((Map.Entry<K, V> entry : map.entrySet())
- * do {
- * K k = entry.getKey();
- * V v = entry.getValue();
- * } while(!replace(k, v, function.apply(k, v)));
- * }</pre>
+ * for (Map.Entry<K,V> entry : map.entrySet()) {
+ * K k;
+ * V v;
+ * do {
+ * k = entry.getKey();
+ * v = entry.getValue();
+ * } while (!map.replace(k, v, function.apply(k, v)));
+ * }}</pre>
*
* The default implementation may retry these steps when multiple
* threads attempt updates including potentially calling the function
@@ -275,7 +286,7 @@
default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
Objects.requireNonNull(function);
forEach((k,v) -> {
- while(!replace(k, v, function.apply(k, v))) {
+ while (!replace(k, v, function.apply(k, v))) {
// v changed or k is gone
if ( (v = get(k)) == null) {
// k is no longer in the map.
@@ -295,11 +306,10 @@
*
* <pre> {@code
* if (map.get(key) == null) {
- * V newValue = mappingFunction.apply(key);
- * if (newValue != null)
- * return map.putIfAbsent(key, newValue);
- * }
- * }</pre>
+ * V newValue = mappingFunction.apply(key);
+ * if (newValue != null)
+ * return map.putIfAbsent(key, newValue);
+ * }}</pre>
*
* The default implementation may retry these steps when multiple
* threads attempt updates including potentially calling the mapping
@@ -331,18 +341,17 @@
* @implSpec
* The default implementation is equivalent to performing the following
* steps for this {@code map}, then returning the current value or
- * {@code null} if now absent. :
+ * {@code null} if now absent:
*
* <pre> {@code
* if (map.get(key) != null) {
- * V oldValue = map.get(key);
- * V newValue = remappingFunction.apply(key, oldValue);
- * if (newValue != null)
- * map.replace(key, oldValue, newValue);
- * else
- * map.remove(key, oldValue);
- * }
- * }</pre>
+ * V oldValue = map.get(key);
+ * V newValue = remappingFunction.apply(key, oldValue);
+ * if (newValue != null)
+ * map.replace(key, oldValue, newValue);
+ * else
+ * map.remove(key, oldValue);
+ * }}</pre>
*
* The default implementation may retry these steps when multiple threads
* attempt updates including potentially calling the remapping function
@@ -363,13 +372,13 @@
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
V oldValue;
- while((oldValue = get(key)) != null) {
+ while ((oldValue = get(key)) != null) {
V newValue = remappingFunction.apply(key, oldValue);
if (newValue != null) {
if (replace(key, oldValue, newValue))
return newValue;
} else if (remove(key, oldValue))
- return null;
+ return null;
}
return oldValue;
}
@@ -386,17 +395,16 @@
* V oldValue = map.get(key);
* V newValue = remappingFunction.apply(key, oldValue);
* if (oldValue != null ) {
- * if (newValue != null)
- * map.replace(key, oldValue, newValue);
- * else
- * map.remove(key, oldValue);
+ * if (newValue != null)
+ * map.replace(key, oldValue, newValue);
+ * else
+ * map.remove(key, oldValue);
* } else {
- * if (newValue != null)
- * map.putIfAbsent(key, newValue);
- * else
- * return null;
- * }
- * }</pre>
+ * if (newValue != null)
+ * map.putIfAbsent(key, newValue);
+ * else
+ * return null;
+ * }}</pre>
*
* The default implementation may retry these steps when multiple
* threads attempt updates including potentially calling the remapping
@@ -417,7 +425,7 @@
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
V oldValue = get(key);
- for(;;) {
+ for (;;) {
V newValue = remappingFunction.apply(key, oldValue);
if (newValue == null) {
// delete mapping
@@ -458,7 +466,6 @@
}
}
-
/**
* {@inheritDoc}
*
@@ -470,12 +477,11 @@
* <pre> {@code
* V oldValue = map.get(key);
* V newValue = (oldValue == null) ? value :
- * remappingFunction.apply(oldValue, value);
+ * remappingFunction.apply(oldValue, value);
* if (newValue == null)
- * map.remove(key);
+ * map.remove(key);
* else
- * map.put(key, newValue);
- * }</pre>
+ * map.put(key, newValue);}</pre>
*
* <p>The default implementation may retry these steps when multiple
* threads attempt updates including potentially calling the remapping
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Wed Jul 05 20:33:55 2017 +0200
@@ -58,6 +58,7 @@
import java.util.function.Consumer;
import java.util.function.BiConsumer;
import java.util.function.Function;
+import java.util.function.Predicate;
/**
* A scalable concurrent {@link ConcurrentNavigableMap} implementation.
@@ -2492,6 +2493,22 @@
else
return (Spliterator<E>)((SubMap<?,E>)m).valueIterator();
}
+ public boolean removeIf(Predicate<? super E> filter) {
+ if (filter == null) throw new NullPointerException();
+ if (m instanceof ConcurrentSkipListMap)
+ return ((ConcurrentSkipListMap<?,E>)m).removeValueIf(filter);
+ // else use iterator
+ @SuppressWarnings("unchecked") Iterator<Map.Entry<Object,E>> it =
+ ((SubMap<Object,E>)m).entryIterator();
+ boolean removed = false;
+ while (it.hasNext()) {
+ Map.Entry<Object,E> e = it.next();
+ E v = e.getValue();
+ if (filter.test(v) && m.remove(e.getKey(), v))
+ removed = true;
+ }
+ return removed;
+ }
}
static final class EntrySet<K1,V1> extends AbstractSet<Map.Entry<K1,V1>> {
@@ -2554,6 +2571,20 @@
return (Spliterator<Map.Entry<K1,V1>>)
((SubMap<K1,V1>)m).entryIterator();
}
+ public boolean removeIf(Predicate<? super Entry<K1, V1>> filter) {
+ if (filter == null) throw new NullPointerException();
+ if (m instanceof ConcurrentSkipListMap)
+ return ((ConcurrentSkipListMap<K1,V1>)m).removeEntryIf(filter);
+ // else use iterator
+ Iterator<Map.Entry<K1,V1>> it = ((SubMap<K1,V1>)m).entryIterator();
+ boolean removed = false;
+ while (it.hasNext()) {
+ Map.Entry<K1,V1> e = it.next();
+ if (filter.test(e) && m.remove(e.getKey(), e.getValue()))
+ removed = true;
+ }
+ return removed;
+ }
}
/**
@@ -3267,6 +3298,41 @@
}
/**
+ * Helper method for EntrySet.removeIf
+ */
+ boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+ if (function == null) throw new NullPointerException();
+ boolean removed = false;
+ for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+ V v;
+ if ((v = n.getValidValue()) != null) {
+ K k = n.key;
+ Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+ if (function.test(e) && remove(k, v))
+ removed = true;
+ }
+ }
+ return removed;
+ }
+
+ /**
+ * Helper method for Values.removeIf
+ */
+ boolean removeValueIf(Predicate<? super V> function) {
+ if (function == null) throw new NullPointerException();
+ boolean removed = false;
+ for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+ V v;
+ if ((v = n.getValidValue()) != null) {
+ K k = n.key;
+ if (function.test(v) && remove(k, v))
+ removed = true;
+ }
+ }
+ return removed;
+ }
+
+ /**
* Base class providing common structure for Spliterators.
* (Although not all that much common functionality; as usual for
* view classes, details annoyingly vary in key, value, and entry
--- a/jdk/src/java.base/share/classes/javax/security/auth/Subject.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java Wed Jul 05 20:33:55 2017 +0200
@@ -1522,17 +1522,20 @@
}
}
+ @Override
public int size() {
return set.size();
}
+ @Override
public Iterator<T> iterator() {
return set.iterator();
}
+ @Override
public boolean add(T o) {
- if (!o.getClass().isAssignableFrom(c)) {
+ if (!c.isAssignableFrom(o.getClass())) {
MessageFormat form = new MessageFormat(ResourcesMgr.getString
("attempting.to.add.an.object.which.is.not.an.instance.of.class"));
Object[] source = {c.toString()};
--- a/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java Wed Jul 05 20:33:55 2017 +0200
@@ -67,10 +67,6 @@
* in RFC 5280. The ValidationAlgorithm attribute notes the
* specification that this provider implements.
*
- * - LDAP is the CertStore type for LDAP repositories. The
- * LDAPSchema attribute notes the specification defining the
- * schema that this provider uses to find certificates and CRLs.
- *
* - JavaPolicy is the default file-based Policy type.
*
* - JavaLoginConfig is the default file-based LoginModule Configuration type.
@@ -275,9 +271,6 @@
/*
* CertStores
*/
- map.put("CertStore.LDAP",
- "sun.security.provider.certpath.ldap.LDAPCertStore");
- map.put("CertStore.LDAP LDAPSchema", "RFC2587");
map.put("CertStore.Collection",
"sun.security.provider.certpath.CollectionCertStore");
map.put("CertStore.com.sun.security.IndexedCollection",
@@ -310,7 +303,6 @@
map.put("KeyStore.JKS ImplementedIn", "Software");
map.put("CertPathValidator.PKIX ImplementedIn", "Software");
map.put("CertPathBuilder.PKIX ImplementedIn", "Software");
- map.put("CertStore.LDAP ImplementedIn", "Software");
map.put("CertStore.Collection ImplementedIn", "Software");
map.put("CertStore.com.sun.security.IndexedCollection ImplementedIn",
"Software");
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/CertStoreHelper.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.security.AccessController;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.security.auth.x500.X500Principal;
-import java.io.IOException;
-
-import sun.security.util.Cache;
-
-/**
- * Helper used by URICertStore and others when delegating to another CertStore
- * to fetch certs and CRLs.
- */
-
-public abstract class CertStoreHelper {
-
- private static final int NUM_TYPES = 2;
- private final static Map<String,String> classMap = new HashMap<>(NUM_TYPES);
- static {
- classMap.put(
- "LDAP",
- "sun.security.provider.certpath.ldap.LDAPCertStoreHelper");
- classMap.put(
- "SSLServer",
- "sun.security.provider.certpath.ssl.SSLServerCertStoreHelper");
- };
- private static Cache<String, CertStoreHelper> cache
- = Cache.newSoftMemoryCache(NUM_TYPES);
-
- public static CertStoreHelper getInstance(final String type)
- throws NoSuchAlgorithmException
- {
- CertStoreHelper helper = cache.get(type);
- if (helper != null) {
- return helper;
- }
- final String cl = classMap.get(type);
- if (cl == null) {
- throw new NoSuchAlgorithmException(type + " not available");
- }
- try {
- helper = AccessController.doPrivileged(
- new PrivilegedExceptionAction<CertStoreHelper>() {
- public CertStoreHelper run() throws ClassNotFoundException {
- try {
- Class<?> c = Class.forName(cl, true, null);
- CertStoreHelper csh
- = (CertStoreHelper)c.newInstance();
- cache.put(type, csh);
- return csh;
- } catch (InstantiationException |
- IllegalAccessException e) {
- throw new AssertionError(e);
- }
- }
- });
- return helper;
- } catch (PrivilegedActionException e) {
- throw new NoSuchAlgorithmException(type + " not available",
- e.getException());
- }
- }
-
- static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
- switch (type) {
- case "LDAP":
- case "SSLServer":
- try {
- CertStoreHelper csh = CertStoreHelper.getInstance(type);
- return csh.isCausedByNetworkIssue(cse);
- } catch (NoSuchAlgorithmException nsae) {
- return false;
- }
- case "URI":
- Throwable t = cse.getCause();
- return (t != null && t instanceof IOException);
- default:
- // we don't know about any other remote CertStore types
- return false;
- }
- }
-
- /**
- * Returns a CertStore using the given URI as parameters.
- */
- public abstract CertStore getCertStore(URI uri)
- throws NoSuchAlgorithmException, InvalidAlgorithmParameterException;
-
- /**
- * Wraps an existing X509CertSelector when needing to avoid DN matching
- * issues.
- */
- public abstract X509CertSelector wrap(X509CertSelector selector,
- X500Principal certSubject,
- String dn)
- throws IOException;
-
- /**
- * Wraps an existing X509CRLSelector when needing to avoid DN matching
- * issues.
- */
- public abstract X509CRLSelector wrap(X509CRLSelector selector,
- Collection<X500Principal> certIssuers,
- String dn)
- throws IOException;
-
- /**
- * Returns true if the cause of the CertStoreException is a network
- * related issue.
- */
- public abstract boolean isCausedByNetworkIssue(CertStoreException e);
-}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java Wed Jul 05 20:33:55 2017 +0200
@@ -466,6 +466,34 @@
stackedCerts, params.trustAnchors());
}
+ static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
+ boolean result;
+ Throwable t = cse.getCause();
+
+ switch (type) {
+ case "LDAP":
+ if (t != null) {
+ // These two exception classes are inside java.naming module
+ String cn = t.getClass().getName();
+ result = (cn.equals("javax.naming.ServiceUnavailableException") ||
+ cn.equals("javax.naming.CommunicationException"));
+ } else {
+ result = false;
+ }
+ break;
+ case "SSLServer":
+ result = (t != null && t instanceof IOException);
+ break;
+ case "URI":
+ result = (t != null && t instanceof IOException);
+ break;
+ default:
+ // we don't know about any other remote CertStore types
+ return false;
+ }
+ return result;
+ }
+
private void checkCRLs(X509Certificate cert, PublicKey prevKey,
X509Certificate prevCert, boolean signFlag,
boolean allowSeparateKey,
@@ -510,7 +538,7 @@
"CertStoreException: " + e.getMessage());
}
if (networkFailureException == null &&
- CertStoreHelper.isCausedByNetworkIssue(store.getType(),e)) {
+ isCausedByNetworkIssue(store.getType(),e)) {
// save this exception, we may need to throw it later
networkFailureException = new CertPathValidatorException(
"Unable to determine revocation status due to " +
@@ -557,8 +585,7 @@
} catch (CertStoreException e) {
if (e instanceof CertStoreTypeException) {
CertStoreTypeException cste = (CertStoreTypeException)e;
- if (CertStoreHelper.isCausedByNetworkIssue(cste.getType(),
- e)) {
+ if (isCausedByNetworkIssue(cste.getType(), e)) {
throw new CertPathValidatorException(
"Unable to determine revocation status due to " +
"network error", e, null, -1,
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2015, Oracle and/or its affiliates. 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
@@ -42,6 +42,7 @@
import java.security.cert.CertStoreSpi;
import java.security.cert.CRLException;
import java.security.cert.CRLSelector;
+import java.security.cert.URICertStoreParameters;
import java.security.cert.X509Certificate;
import java.security.cert.X509CertSelector;
import java.security.cert.X509CRL;
@@ -118,9 +119,7 @@
// true if URI is ldap
private boolean ldap = false;
- private CertStoreHelper ldapHelper;
private CertStore ldapCertStore;
- private String ldapPath;
// Default maximum connect timeout in milliseconds (15 seconds)
// allowed when downloading CRLs
@@ -165,13 +164,8 @@
// if ldap URI, use an LDAPCertStore to fetch certs and CRLs
if (uri.getScheme().toLowerCase(Locale.ENGLISH).equals("ldap")) {
ldap = true;
- ldapHelper = CertStoreHelper.getInstance("LDAP");
- ldapCertStore = ldapHelper.getCertStore(uri);
- ldapPath = uri.getPath();
- // strip off leading '/'
- if (ldapPath.charAt(0) == '/') {
- ldapPath = ldapPath.substring(1);
- }
+ URICertStoreParameters lparams = new URICertStoreParameters(uri);
+ ldapCertStore = CertStore.getInstance("LDAP", lparams);
}
try {
factory = CertificateFactory.getInstance("X.509");
@@ -246,20 +240,10 @@
public synchronized Collection<X509Certificate> engineGetCertificates
(CertSelector selector) throws CertStoreException {
- // if ldap URI we wrap the CertSelector in an LDAPCertSelector to
- // avoid LDAP DN matching issues (see LDAPCertSelector for more info)
if (ldap) {
- X509CertSelector xsel = (X509CertSelector) selector;
- try {
- xsel = ldapHelper.wrap(xsel, xsel.getSubject(), ldapPath);
- } catch (IOException ioe) {
- throw new CertStoreException(ioe);
- }
- // Fetch the certificates via LDAP. LDAPCertStore has its own
// caching mechanism, see the class description for more info.
- // Safe cast since xsel is an X509 certificate selector.
return (Collection<X509Certificate>)
- ldapCertStore.getCertificates(xsel);
+ ldapCertStore.getCertificates(selector);
}
// Return the Certificates for this entry. It returns the cached value
@@ -356,20 +340,11 @@
public synchronized Collection<X509CRL> engineGetCRLs(CRLSelector selector)
throws CertStoreException {
- // if ldap URI we wrap the CRLSelector in an LDAPCRLSelector to
- // avoid LDAP DN matching issues (see LDAPCRLSelector for more info)
if (ldap) {
- X509CRLSelector xsel = (X509CRLSelector) selector;
- try {
- xsel = ldapHelper.wrap(xsel, null, ldapPath);
- } catch (IOException ioe) {
- throw new CertStoreException(ioe);
- }
// Fetch the CRLs via LDAP. LDAPCertStore has its own
// caching mechanism, see the class description for more info.
- // Safe cast since xsel is an X509 certificate selector.
try {
- return (Collection<X509CRL>) ldapCertStore.getCRLs(xsel);
+ return (Collection<X509CRL>) ldapCertStore.getCRLs(selector);
} catch (CertStoreException cse) {
throw new PKIX.CertStoreTypeException("LDAP", cse);
}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -153,7 +153,7 @@
throw new UnsupportedOperationException();
}
- static CertStore getInstance(URI uri)
+ public static CertStore getInstance(URI uri)
throws InvalidAlgorithmParameterException
{
return new CS(new SSLServerCertStore(uri), null, "SSLServer", null);
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStoreHelper.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ssl;
-
-import java.io.IOException;
-import java.net.URI;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import java.util.Collection;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * SSL implementation of CertStoreHelper.
- */
-public final class SSLServerCertStoreHelper extends CertStoreHelper {
-
- @Override
- public CertStore getCertStore(URI uri)
- throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
- {
- return SSLServerCertStore.getInstance(uri);
- }
-
- @Override
- public X509CertSelector wrap(X509CertSelector selector,
- X500Principal certSubject,
- String ldapDN)
- throws IOException
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public X509CRLSelector wrap(X509CRLSelector selector,
- Collection<X500Principal> certIssuers,
- String ldapDN)
- throws IOException
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isCausedByNetworkIssue(CertStoreException e) {
- Throwable t = e.getCause();
- return (t != null && t instanceof IOException);
- }
-}
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -46,6 +46,9 @@
import java.security.cert.CRL;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
+import java.security.cert.URICertStoreParameters;
+
+
import java.text.Collator;
import java.text.MessageFormat;
import java.util.*;
@@ -69,7 +72,7 @@
import sun.security.pkcs10.PKCS10;
import sun.security.pkcs10.PKCS10Attribute;
import sun.security.provider.X509Factory;
-import sun.security.provider.certpath.CertStoreHelper;
+import sun.security.provider.certpath.ssl.SSLServerCertStore;
import sun.security.util.Password;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
@@ -2208,14 +2211,10 @@
}
}
} else { // must be LDAP, and uri is not null
- // Lazily load LDAPCertStoreHelper if present
- CertStoreHelper helper = CertStoreHelper.getInstance("LDAP");
- String path = uri.getPath();
- if (path.charAt(0) == '/') path = path.substring(1);
- CertStore s = helper.getCertStore(uri);
- X509CRLSelector sel =
- helper.wrap(new X509CRLSelector(), null, path);
- return s.getCRLs(sel);
+ URICertStoreParameters params =
+ new URICertStoreParameters(uri);
+ CertStore s = CertStore.getInstance("LDAP", params);
+ return s.getCRLs(new X509CRLSelector());
}
}
@@ -2463,9 +2462,7 @@
out.println(rb.getString("Not.a.signed.jar.file"));
}
} else if (sslserver != null) {
- // Lazily load SSLCertStoreHelper if present
- CertStoreHelper helper = CertStoreHelper.getInstance("SSLServer");
- CertStore cs = helper.getCertStore(new URI("https://" + sslserver));
+ CertStore cs = SSLServerCertStore.getInstance(new URI("https://" + sslserver));
Collection<? extends Certificate> chain;
try {
chain = cs.getCertificates(null);
--- a/jdk/src/java.base/share/conf/security/java.security Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/conf/security/java.security Wed Jul 05 20:33:55 2017 +0200
@@ -78,6 +78,7 @@
security.provider.tbd=com.sun.security.sasl.Provider
security.provider.tbd=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.tbd=sun.security.smartcardio.SunPCSC
+security.provider.tbd=sun.security.provider.certpath.ldap.JdkLDAP
#ifdef windows
security.provider.tbd=sun.security.mscapi.SunMSCAPI
#endif
@@ -156,7 +157,8 @@
#
# Class to instantiate as the system Policy. This is the name of the class
-# that will be used as the Policy object.
+# that will be used as the Policy object. The system class loader is used to
+# locate this class.
#
policy.provider=sun.security.provider.PolicyFile
--- a/jdk/src/java.base/share/native/libjli/java.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/native/libjli/java.h Wed Jul 05 20:33:55 2017 +0200
@@ -194,7 +194,7 @@
* For MacOSX and Windows/Unix compatibility we require these
* entry points, some of them may be stubbed out on Windows/Unixes.
*/
-void PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm);
+void PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm);
void ShowSplashScreen();
void RegisterThread();
/*
--- a/jdk/src/java.base/share/native/libzip/zip_util.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/share/native/libzip/zip_util.c Wed Jul 05 20:33:55 2017 +0200
@@ -1206,7 +1206,7 @@
}
/* Slash is already there? */
- if (name[ulen-1] == '/') {
+ if (ulen > 0 && name[ulen - 1] == '/') {
break;
}
--- a/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. 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
--- a/jdk/src/java.base/unix/native/libjli/java_md_solinux.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/unix/native/libjli/java_md_solinux.c Wed Jul 05 20:33:55 2017 +0200
@@ -938,7 +938,7 @@
}
void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
{
// stubbed out for windows and *nixes.
}
--- a/jdk/src/java.base/windows/native/libjli/java_md.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.base/windows/native/libjli/java_md.c Wed Jul 05 20:33:55 2017 +0200
@@ -970,7 +970,7 @@
}
void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
{
// stubbed out for windows and *nixes.
}
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -25,14 +25,18 @@
package com.apple.eawt;
-import java.awt.*;
-import java.awt.peer.*;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.PopupMenu;
+import java.awt.Toolkit;
+import java.awt.Window;
import java.beans.Beans;
import javax.swing.JMenuBar;
-import sun.lwawt.*;
-import sun.lwawt.macosx.*;
+import sun.awt.AWTAccessor;
+import sun.lwawt.LWWindowPeer;
+import sun.lwawt.macosx.CPlatformWindow;
/**
* The <code>Application</code> class allows you to integrate your Java application with the native Mac OS X environment.
@@ -385,10 +389,8 @@
*
* @since Java for Mac OS X 10.7 Update 1
*/
- @SuppressWarnings("deprecation")
public void requestToggleFullScreen(final Window window) {
- final ComponentPeer peer = window.getPeer();
-
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(window);
if (!(peer instanceof LWWindowPeer)) return;
Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow();
if (!(platformWindow instanceof CPlatformWindow)) return;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -28,6 +28,7 @@
import java.awt.*;
import java.lang.reflect.*;
+import sun.awt.AWTAccessor;
import sun.lwawt.macosx.*;
import sun.lwawt.macosx.CImage.Creator;
@@ -41,7 +42,6 @@
_AppDockIconHandler() { }
- @SuppressWarnings("deprecation")
public void setDockMenu(final PopupMenu menu) {
fDockMenu = menu;
@@ -61,8 +61,8 @@
// instantiate the menu peer and set the native fDockMenu ivar
menu.addNotify();
- final long nsMenuPtr = ((CMenu)fDockMenu.getPeer()).getNativeMenu();
- nativeSetDockMenu(nsMenuPtr);
+ CMenu peer = AWTAccessor.getMenuComponentAccessor().getPeer(fDockMenu);
+ nativeSetDockMenu(peer.getNativeMenu());
}
public PopupMenu getDockMenu() {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -32,6 +32,7 @@
import javax.swing.plaf.MenuBarUI;
import com.apple.laf.ScreenMenuBar;
+import sun.awt.AWTAccessor;
import sun.lwawt.macosx.CMenuBar;
import com.apple.laf.AquaMenuBarUI;
@@ -49,7 +50,10 @@
}
// callback from the native delegate -init function
- private static void initMenuStates(final boolean aboutMenuItemVisible, final boolean aboutMenuItemEnabled, final boolean prefsMenuItemVisible, final boolean prefsMenuItemEnabled) {
+ private static void initMenuStates(final boolean aboutMenuItemVisible,
+ final boolean aboutMenuItemEnabled,
+ final boolean prefsMenuItemVisible,
+ final boolean prefsMenuItemEnabled) {
synchronized (instance) {
instance.aboutMenuItemVisible = aboutMenuItemVisible;
instance.aboutMenuItemEnabled = aboutMenuItemEnabled;
@@ -92,7 +96,6 @@
return (frame.getExtendedState() & Frame.ICONIFIED) != 0;
}
- @SuppressWarnings("deprecation")
static void installDefaultMenuBar(final JMenuBar menuBar) {
if (menuBar == null) {
// intentionally clearing the default menu
@@ -114,7 +117,7 @@
}
screenMenuBar.addNotify();
- final MenuComponentPeer peer = screenMenuBar.getPeer();
+ final Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(screenMenuBar);
if (!(peer instanceof CMenuBar)) {
// such a thing should not be possible
throw new IllegalStateException("Unable to determine native menu bar from provided JMenuBar");
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -152,20 +152,6 @@
}
@Override
- public void focusGained(final FocusEvent e) {
- if (arrowButton != null) {
- arrowButton.repaint();
- }
- }
-
- @Override
- public void focusLost(final FocusEvent e) {
- if (arrowButton != null) {
- arrowButton.repaint();
- }
- }
-
- @Override
public void changedUpdate(final DocumentEvent e) {
editorTextChanged();
}
@@ -252,6 +238,16 @@
*/
protected FocusListener createFocusListener() {
return new BasicComboBoxUI.FocusHandler() {
+ @Override
+ public void focusGained(FocusEvent e) {
+ super.focusGained(e);
+
+ if (arrowButton != null) {
+ arrowButton.repaint();
+ }
+ }
+
+ @Override
public void focusLost(final FocusEvent e) {
hasFocus = false;
if (!e.isTemporary()) {
@@ -264,6 +260,10 @@
if (ac != null) {
ac.firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.FOCUSED, null);
}
+
+ if (arrowButton != null) {
+ arrowButton.repaint();
+ }
}
};
}
@@ -438,6 +438,7 @@
if (editor != null) {
final Rectangle editorRect = rectangleForCurrentValue();
editorRect.width += 4;
+ editorRect.height += 1;
editor.setBounds(editorRect);
}
}
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -124,7 +124,7 @@
public Insets getBorderInsets(final Component c) {
if (!(c instanceof JTextComponent) || c.isOpaque()) return new InsetsUIResource(3, 7, 3, 7);
- return new InsetsUIResource(6, 7, 6, 7);
+ return new InsetsUIResource(5, 5, 5, 5);
}
protected static State getStateFor(final JTextComponent jc) {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -27,11 +27,11 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
import java.util.Hashtable;
import javax.swing.*;
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
import sun.lwawt.LWToolkit;
import sun.lwawt.macosx.*;
@@ -212,24 +212,36 @@
// Send a mouseExited to the previously hilited item, if it wasn't 0.
if (target != fLastMouseEventTarget) {
if (fLastMouseEventTarget != null) {
- LWToolkit.postEvent(new MouseEvent(fLastMouseEventTarget, MouseEvent.MOUSE_EXITED, when, modifiers, x - fLastTargetRect.x, y - fLastTargetRect.y, 0, false));
+ LWToolkit.postEvent(
+ new MouseEvent(fLastMouseEventTarget,
+ MouseEvent.MOUSE_EXITED, when,
+ modifiers, x - fLastTargetRect.x,
+ y - fLastTargetRect.y, 0,
+ false));
}
- // Send a mouseEntered to the current hilited item, if it wasn't 0.
+ // Send a mouseEntered to the current hilited item, if it
+ // wasn't 0.
if (target != null) {
- LWToolkit.postEvent(new MouseEvent(target, MouseEvent.MOUSE_ENTERED, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+ LWToolkit.postEvent(
+ new MouseEvent(target, MouseEvent.MOUSE_ENTERED,
+ when, modifiers,
+ x - targetRect.x,
+ y - targetRect.y, 0, false));
}
fLastMouseEventTarget = target;
fLastTargetRect = targetRect;
}
// Post a mouse event to the current item.
if (target == null) return;
- LWToolkit.postEvent(new MouseEvent(target, kind, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+ LWToolkit.postEvent(
+ new MouseEvent(target, kind, when, modifiers,
+ x - targetRect.x, y - targetRect.y, 0,
+ false));
}
});
}
@Override
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized (getTreeLock()) {
super.addNotify();
@@ -248,7 +260,8 @@
if (tooltipText != null) {
setToolTipText(tooltipText);
}
- final MenuComponentPeer peer = getPeer();
+ final Object peer = AWTAccessor.getMenuComponentAccessor()
+ .getPeer(this);
if (peer instanceof CMenu) {
final CMenu menu = (CMenu) peer;
final long nativeMenu = menu.getNativeMenu();
@@ -355,9 +368,8 @@
public void setIndeterminate(boolean indeterminate) { }
@Override
- @SuppressWarnings("deprecation")
public void setToolTipText(final String text) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
final CMenuItem cmi = (CMenuItem)peer;
@@ -365,9 +377,8 @@
}
@Override
- @SuppressWarnings("deprecation")
public void setIcon(final Icon i) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -25,19 +25,21 @@
package com.apple.laf;
-import sun.awt.AWTAccessor;
import sun.lwawt.macosx.CMenuBar;
import java.awt.*;
import java.awt.event.*;
-import java.lang.reflect.*;
-import java.security.*;
import java.util.*;
import javax.swing.*;
+import static sun.awt.AWTAccessor.*;
+
@SuppressWarnings("serial") // JDK implementation class
-public class ScreenMenuBar extends MenuBar implements ContainerListener, ScreenMenuPropertyHandler, ComponentListener {
+public class ScreenMenuBar extends MenuBar
+ implements ContainerListener, ScreenMenuPropertyHandler,
+ ComponentListener {
+
static boolean sJMenuBarHasHelpMenus = false; //$ could check by calling getHelpMenu in a try block
JMenuBar fSwingBar;
@@ -246,22 +248,23 @@
fSubmenus.remove(menu);
}
- @SuppressWarnings("deprecation")
public Menu add(final Menu m, final int index) {
synchronized (getTreeLock()) {
if (m.getParent() != null) {
m.getParent().remove(m);
}
- final Vector<Menu> menus = AWTAccessor.getMenuBarAccessor().getMenus(this);
+ final Vector<Menu> menus = getMenuBarAccessor().getMenus(this);
menus.insertElementAt(m, index);
- AWTAccessor.getMenuComponentAccessor().setParent(m, this);
+ final MenuComponentAccessor acc = getMenuComponentAccessor();
+ acc.setParent(m, this);
- final CMenuBar peer = (CMenuBar)getPeer();
+ final CMenuBar peer = acc.getPeer(this);
if (peer == null) return m;
peer.setNextInsertionIndex(index);
- if (m.getPeer() == null) {
+ final CMenuBar mPeer = acc.getPeer(m);
+ if (mPeer == null) {
m.addNotify();
}
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -27,15 +27,18 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
+import sun.awt.AWTAccessor;
import sun.lwawt.macosx.CMenuItem;
@SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItem extends MenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler {
+final class ScreenMenuItem extends MenuItem
+ implements ActionListener, ComponentListener,
+ ScreenMenuPropertyHandler {
+
ScreenMenuPropertyListener fListener;
JMenuItem fMenuItem;
@@ -97,9 +100,8 @@
fMenuItem.removeComponentListener(this);
}
- @SuppressWarnings("deprecation")
static void syncLabelAndKS(MenuItem menuItem, String label, KeyStroke ks) {
- final MenuComponentPeer peer = menuItem.getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(menuItem);
if (!(peer instanceof CMenuItem)) {
//Is it possible?
return;
@@ -166,18 +168,16 @@
}
}
- @SuppressWarnings("deprecation")
public void setToolTipText(final String text) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
final CMenuItem cmi = (CMenuItem)peer;
cmi.setToolTipText(text);
}
- @SuppressWarnings("deprecation")
public void setIcon(final Icon i) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -27,17 +27,20 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
import javax.swing.*;
import javax.swing.plaf.ButtonUI;
import com.apple.laf.AquaMenuItemUI.IndeterminateListener;
+import sun.awt.AWTAccessor;
import sun.lwawt.macosx.*;
@SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItemCheckbox extends CheckboxMenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler, ItemListener {
+final class ScreenMenuItemCheckbox extends CheckboxMenuItem
+ implements ActionListener, ComponentListener, ScreenMenuPropertyHandler,
+ ItemListener {
+
JMenuItem fMenuItem;
MenuContainer fParent;
@@ -57,12 +60,12 @@
}
ScreenMenuPropertyListener fPropertyListener;
- @SuppressWarnings("deprecation")
+
public void addNotify() {
super.addNotify();
// Avoid the Auto toggle behavior of AWT CheckBoxMenuItem
- CCheckboxMenuItem ccb = (CCheckboxMenuItem) getPeer();
+ CCheckboxMenuItem ccb = AWTAccessor.getMenuComponentAccessor().getPeer(this);
ccb.setAutoToggle(false);
fMenuItem.addComponentListener(this);
@@ -155,17 +158,15 @@
setVisible(false);
}
- @SuppressWarnings("deprecation")
public void setToolTipText(final String text) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
((CMenuItem)peer).setToolTipText(text);
}
- @SuppressWarnings("deprecation")
public void setIcon(final Icon i) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (!(peer instanceof CMenuItem)) return;
final CMenuItem cmi = (CMenuItem)peer;
@@ -208,9 +209,8 @@
}
}
- @SuppressWarnings("deprecation")
public void setIndeterminate(final boolean indeterminate) {
- final MenuComponentPeer peer = getPeer();
+ Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
if (peer instanceof CCheckboxMenuItem) {
((CCheckboxMenuItem)peer).setIsIndeterminate(indeterminate);
}
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java Wed Jul 05 20:33:55 2017 +0200
@@ -72,7 +72,8 @@
@Override
public AffineTransform getDefaultTransform() {
- return new AffineTransform();
+ double scaleFactor = device.getScaleFactor();
+ return AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
}
@Override
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. 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
@@ -206,17 +206,15 @@
return true;
}
- @SuppressWarnings("deprecation")
private static void enterFullScreenExclusive(Window w) {
- FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+ FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer != null) {
peer.enterFullScreenMode();
}
}
- @SuppressWarnings("deprecation")
private static void exitFullScreenExclusive(Window w) {
- FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+ FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer != null) {
peer.exitFullScreenMode();
}
--- a/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -33,13 +33,14 @@
import java.awt.image.ColorModel;
import java.awt.peer.ComponentPeer;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.VolatileSurfaceManager;
import sun.java2d.BackBufferCapsProvider;
import sun.java2d.SurfaceData;
import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
-import static sun.java2d.pipe.hw.AccelSurface.*;
import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*;
public class CGLVolatileSurfaceManager extends VolatileSurfaceManager {
@@ -74,11 +75,11 @@
* Create a pbuffer-based SurfaceData object (or init the backbuffer
* of an existing window if this is a double buffered GraphicsConfig)
*/
- @SuppressWarnings("deprecation")
protected SurfaceData initAcceleratedSurface() {
SurfaceData sData = null;
Component comp = vImg.getComponent();
- final ComponentPeer peer = (comp != null) ? comp.getPeer() : null;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ final ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
try {
boolean createVSynced = false;
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -930,8 +930,8 @@
return false;
}
final LWWindowPeer parentPeer =
- (LWWindowPeer) AWTAccessor.getComponentAccessor()
- .getPeer(parentWindow);
+ AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (parentPeer == null) {
focusLog.fine("request rejected, parentPeer is null");
LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
import javax.swing.*;
import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.java2d.*;
import sun.java2d.loops.Blit;
import sun.java2d.loops.CompositeType;
@@ -505,7 +506,7 @@
@Override
public void repositionSecurityWarning() {
if (warningWindow != null) {
- AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+ ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
Window target = getTarget();
int x = compAccessor.getX(target);
int y = compAccessor.getY(target);
@@ -563,8 +564,7 @@
public void blockWindows(List<Window> windows) {
//TODO: LWX will probably need some collectJavaToplevels to speed this up
for (Window w : windows) {
- WindowPeer wp =
- (WindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+ WindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
wp.setModalBlocked((Dialog)getTarget(), true);
}
@@ -1247,7 +1247,8 @@
private boolean isOneOfOwnersOf(LWWindowPeer peer) {
Window owner = (peer != null ? peer.getTarget().getOwner() : null);
while (owner != null) {
- if ((LWWindowPeer)owner.getPeer() == this) {
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ if (acc.getPeer(owner) == this) {
return true;
}
owner = owner.getOwner();
@@ -1321,8 +1322,8 @@
while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
owner = owner.getOwner();
}
- return owner == null ? null :
- (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner);
+ return owner == null ? null : AWTAccessor.getComponentAccessor()
+ .getPeer(owner);
}
/**
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -39,6 +39,7 @@
import java.util.Map;
import java.util.concurrent.Callable;
+import sun.awt.AWTAccessor;
import sun.awt.dnd.*;
import sun.lwawt.LWComponentPeer;
import sun.lwawt.LWWindowPeer;
@@ -88,7 +89,6 @@
super.startDrag(dsc, cursor, dragImage, dragImageOffset);
}
- @SuppressWarnings("deprecation")
protected void startDrag(Transferable transferable, long[] formats, Map<Long, DataFlavor> formatMap) {
DragGestureEvent trigger = getTrigger();
InputEvent triggerEvent = trigger.getTriggerEvent();
@@ -135,7 +135,9 @@
try {
//It sure will be LWComponentPeer instance as rootComponent is a Window
- PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow();
+ LWComponentPeer<?, ?> peer = AWTAccessor.getComponentAccessor()
+ .getPeer(rootComponent);
+ PlatformWindow platformWindow = peer.getPlatformWindow();
long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow);
if (nativeViewPtr == 0L) throw new InvalidDnDOperationException("Unsupported platform window implementation");
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -30,6 +30,7 @@
import java.awt.Point;
import java.awt.Toolkit;
+import sun.awt.AWTAccessor;
import sun.awt.EmbeddedFrame;
import sun.lwawt.LWWindowPeer;
@@ -46,9 +47,8 @@
show();
}
- @SuppressWarnings("deprecation")
public void addNotify() {
- if (getPeer() == null) {
+ if (!isDisplayable()) {
LWCToolkit toolkit = (LWCToolkit)Toolkit.getDefaultToolkit();
LWWindowPeer peer = toolkit.createEmbeddedFrame(this);
setPeer(peer);
@@ -61,10 +61,9 @@
public void unregisterAccelerator(AWTKeyStroke stroke) {}
- @SuppressWarnings("deprecation")
protected long getLayerPtr() {
- LWWindowPeer peer = (LWWindowPeer)getPeer();
- return peer.getLayerPtr();
+ return AWTAccessor.getComponentAccessor().<LWWindowPeer>getPeer(this)
+ .getLayerPtr();
}
// -----------------------------------------------------------------------
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java Wed Jul 05 20:33:55 2017 +0200
@@ -138,17 +138,6 @@
return ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData();
}
- public CImage createFromImageImmediately(final Image image) {
- int[] buffer = imageToArray(image, false);
-
- if (buffer == null) {
- return null;
- }
-
- return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null),
- image.getHeight(null)));
- }
-
public byte[] getPlatformImageBytes(final Image image) {
int[] buffer = imageToArray(image, false);
@@ -168,20 +157,33 @@
// This is used to create a CImage from a Image
public CImage createFromImage(final Image image) {
+ return createFromImage(image, true);
+ }
+
+ public CImage createFromImageImmediately(final Image image) {
+ return createFromImage(image, false);
+ }
+
+ // This is used to create a CImage from a Image
+ private CImage createFromImage(final Image image, final boolean prepareImage) {
if (image instanceof MultiResolutionImage) {
List<Image> resolutionVariants
= ((MultiResolutionImage) image).getResolutionVariants();
- return createFromImages(resolutionVariants);
+ return createFromImages(resolutionVariants, prepareImage);
}
- int[] buffer = imageToArray(image, true);
+ int[] buffer = imageToArray(image, prepareImage);
if (buffer == null) {
return null;
}
return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null), image.getHeight(null)));
}
- public CImage createFromImages(List<Image> images) {
+ public CImage createFromImages(final List<Image> images) {
+ return createFromImages(images, true);
+ }
+
+ private CImage createFromImages(final List<Image> images, final boolean prepareImage) {
if (images == null || images.isEmpty()) {
return null;
}
@@ -194,8 +196,8 @@
num = 0;
- for (Image img : images) {
- buffers[num] = imageToArray(img, true);
+ for (final Image img : images) {
+ buffers[num] = imageToArray(img, prepareImage);
if (buffers[num] == null) {
// Unable to process the image
continue;
@@ -210,9 +212,9 @@
}
return new CImage(nativeCreateNSImageFromArrays(
- Arrays.copyOf(buffers, num),
- Arrays.copyOf(w, num),
- Arrays.copyOf(h, num)));
+ Arrays.copyOf(buffers, num),
+ Arrays.copyOf(w, num),
+ Arrays.copyOf(h, num)));
}
static int getSelectorAsInt(final String fromString) {
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -38,9 +38,12 @@
import java.text.*;
import javax.swing.text.JTextComponent;
+import sun.awt.AWTAccessor;
import sun.awt.im.InputMethodAdapter;
import sun.lwawt.*;
+import static sun.awt.AWTAccessor.ComponentAccessor;
+
public class CInputMethod extends InputMethodAdapter {
private InputMethodContext fIMContext;
private Component fAwtFocussedComponent;
@@ -385,12 +388,11 @@
// java.awt.Toolkit#getNativeContainer() is not available
// from this package
- @SuppressWarnings("deprecation")
private LWComponentPeer<?, ?> getNearestNativePeer(Component comp) {
if (comp==null)
return null;
-
- ComponentPeer peer = comp.getPeer();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ ComponentPeer peer = acc.getPeer(comp);
if (peer==null)
return null;
@@ -398,7 +400,7 @@
comp = comp.getParent();
if (comp==null)
return null;
- peer = comp.getPeer();
+ peer = acc.getPeer(comp);
if (peer==null)
return null;
}
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -29,6 +29,8 @@
import java.awt.MenuBar;
import java.awt.peer.MenuBarPeer;
+import sun.awt.AWTAccessor;
+
public class CMenuBar extends CMenuComponent implements MenuBarPeer {
private int nextInsertionIndex = -1;
@@ -43,9 +45,8 @@
}
@Override
- @SuppressWarnings("deprecation")
public void addHelpMenu(Menu m) {
- CMenu cMenu = (CMenu)m.getPeer();
+ CMenu cMenu = AWTAccessor.getMenuComponentAccessor().getPeer(m);
nativeSetHelpMenu(getModel(), cMenu.getModel());
}
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -31,12 +31,11 @@
import java.awt.peer.WindowPeer;
import java.beans.*;
import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-import java.util.Objects;
import javax.swing.*;
import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.java2d.SurfaceData;
import sun.java2d.opengl.CGLSurfaceData;
import sun.lwawt.*;
@@ -193,8 +192,9 @@
@SuppressWarnings("deprecation")
public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
Component root = SwingUtilities.getRoot(p);
- if (root == null || (LWWindowPeer)root.getPeer() == null) return null;
- return (CPlatformWindow)((LWWindowPeer)root.getPeer()).getPlatformWindow();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ if (root == null || acc.getPeer(root) == null) return null;
+ return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow();
}
};
@@ -523,15 +523,15 @@
}
@Override // PlatformWindow
- @SuppressWarnings("deprecation")
public void setVisible(boolean visible) {
final long nsWindowPtr = getNSWindowPtr();
// Process parent-child relationship when hiding
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (!visible) {
// Unparent my children
for (Window w : target.getOwnedWindows()) {
- WindowPeer p = (WindowPeer)w.getPeer();
+ WindowPeer p = acc.getPeer(w);
if (p instanceof LWWindowPeer) {
CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
if (pw != null && pw.isVisible()) {
@@ -627,7 +627,7 @@
// Add my own children to myself
for (Window w : target.getOwnedWindows()) {
- WindowPeer p = (WindowPeer)w.getPeer();
+ final Object p = acc.getPeer(w);
if (p instanceof LWWindowPeer) {
CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
if (pw != null && pw.isVisible()) {
@@ -679,13 +679,13 @@
}
@Override // PlatformWindow
- @SuppressWarnings("deprecation")
public void toFront() {
final long nsWindowPtr = getNSWindowPtr();
LWCToolkit lwcToolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
Window w = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
- if( w != null && w.getPeer() != null
- && ((LWWindowPeer)w.getPeer()).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ if( w != null && acc.getPeer(w) != null
+ && ((LWWindowPeer)acc.getPeer(w)).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
&& !lwcToolkit.isApplicationActive()) {
lwcToolkit.activateApplicationIgnoringOtherApps();
}
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java Wed Jul 05 20:33:55 2017 +0200
@@ -36,6 +36,10 @@
import javax.print.*;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.print.attribute.standard.MediaSize;
+import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.PageRanges;
import sun.java2d.*;
@@ -745,4 +749,34 @@
protected void startPage(PageFormat arg0, Printable arg1, int arg2, boolean arg3) throws PrinterException {
// TODO Auto-generated method stub
}
-}
+
+ @Override
+ protected MediaSize getMediaSize(Media media, PrintService service,
+ PageFormat page) {
+ if (media == null || !(media instanceof MediaSizeName)) {
+ return getDefaultMediaSize(page);
+ }
+ MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+ return size != null ? size : getDefaultMediaSize(page);
+ }
+
+ private MediaSize getDefaultMediaSize(PageFormat page){
+ final int inch = 72;
+ Paper paper = page.getPaper();
+ float width = (float) (paper.getWidth() / inch);
+ float height = (float) (paper.getHeight() / inch);
+ return new MediaSize(width, height, MediaSize.INCH);
+ }
+
+ @Override
+ protected MediaPrintableArea getDefaultPrintableArea(PageFormat page, double w, double h) {
+ final float dpi = 72.0f;
+ Paper paper = page.getPaper();
+ return new MediaPrintableArea(
+ (float) (paper.getImageableX() / dpi),
+ (float) (paper.getImageableY() / dpi),
+ (float) (paper.getImageableWidth() / dpi),
+ (float) (paper.getImageableHeight() / dpi),
+ MediaPrintableArea.INCH);
+ }
+}
\ No newline at end of file
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -37,6 +37,8 @@
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
+import static sun.awt.AWTAccessor.*;
+
public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
private TrayIcon target;
private PopupMenu popup;
@@ -68,15 +70,15 @@
updateImage();
}
- @SuppressWarnings("deprecation")
private CPopupMenu checkAndCreatePopupPeer() {
CPopupMenu menuPeer = null;
if (popup != null) {
try {
- menuPeer = (CPopupMenu)popup.getPeer();
+ final MenuComponentAccessor acc = getMenuComponentAccessor();
+ menuPeer = acc.getPeer(popup);
if (menuPeer == null) {
popup.addNotify();
- menuPeer = (CPopupMenu)popup.getPeer();
+ menuPeer = acc.getPeer(popup);
}
} catch (Exception e) {
e.printStackTrace();
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. 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
@@ -30,6 +30,7 @@
import java.awt.Toolkit;
import java.lang.reflect.InvocationTargetException;
+import sun.awt.AWTAccessor;
import sun.awt.EmbeddedFrame;
import sun.lwawt.LWWindowPeer;
@@ -48,10 +49,9 @@
this.nsViewPtr = nsViewPtr;
}
- @SuppressWarnings("deprecation")
@Override
public void addNotify() {
- if (getPeer() == null) {
+ if (!isDisplayable()) {
LWCToolkit toolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
setPeer(toolkit.createEmbeddedFrame(this));
}
@@ -78,11 +78,12 @@
* Synthetic event delivery for focus management
*/
@Override
- @SuppressWarnings("deprecation")
public void synthesizeWindowActivation(boolean activated) {
if (isActive != activated) {
isActive = activated;
- ((LWWindowPeer)getPeer()).notifyActivation(activated, null);
+ final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
+ peer.notifyActivation(activated, null);
}
}
@@ -91,13 +92,14 @@
* Designed to be called from the main thread
* This method should be called once from the initialization of the SWT_AWT Bridge
*/
- @SuppressWarnings("deprecation")
public void validateWithBounds(final int x, final int y, final int width, final int height) {
try {
+ final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
LWCToolkit.invokeAndWait(new Runnable() {
@Override
public void run() {
- ((LWWindowPeer) getPeer()).setBoundsPrivate(0, 0, width, height);
+ peer.setBoundsPrivate(0, 0, width, height);
validate();
setVisible(true);
}
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -293,7 +293,7 @@
}
@Override
- protected DesktopPeer createDesktopPeer(Desktop target) {
+ public DesktopPeer createDesktopPeer(Desktop target) {
return new CDesktopPeer();
}
@@ -575,7 +575,8 @@
final boolean[] ret = new boolean[1];
- try { invokeAndWait(new Runnable() { public void run() { synchronized(ret) {
+ try { invokeAndWait(new Runnable() { @Override
+ public void run() { synchronized(ret) {
ret[0] = a.equals(b);
}}}, c); } catch (Exception e) { e.printStackTrace(); }
--- a/jdk/src/java.desktop/share/classes/java/awt/Button.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Button.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -168,13 +168,12 @@
* application to change the look of the button without changing
* its functionality.
*
- * @see java.awt.Toolkit#createButton(java.awt.Button)
* @see java.awt.Component#getToolkit()
*/
public void addNotify() {
synchronized(getTreeLock()) {
if (peer == null)
- peer = getToolkit().createButton(this);
+ peer = getComponentFactory().createButton(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Canvas.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Canvas.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -58,11 +58,13 @@
}
/**
- * Constructs a new Canvas given a GraphicsConfiguration object.
+ * Constructs a new Canvas given a GraphicsConfiguration object. If null is
+ * passed, then the default GraphicsConfiguration will be used.
*
- * @param config a reference to a GraphicsConfiguration object.
+ * @param config a reference to a GraphicsConfiguration object or null
*
* @see GraphicsConfiguration
+ * @see Component#getGraphicsConfiguration()
*/
public Canvas(GraphicsConfiguration config) {
this();
@@ -70,10 +72,9 @@
}
@Override
- @SuppressWarnings("deprecation")
void setGraphicsConfiguration(GraphicsConfiguration gc) {
synchronized(getTreeLock()) {
- CanvasPeer peer = (CanvasPeer)getPeer();
+ CanvasPeer peer = (CanvasPeer) this.peer;
if (peer != null) {
gc = peer.getAppropriateGraphicsConfiguration(gc);
}
@@ -94,13 +95,12 @@
/**
* Creates the peer of the canvas. This peer allows you to change the
* user interface of the canvas without changing its functionality.
- * @see java.awt.Toolkit#createCanvas(java.awt.Canvas)
* @see java.awt.Component#getToolkit()
*/
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createCanvas(this);
+ peer = getComponentFactory().createCanvas(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -239,13 +239,12 @@
* Creates the peer of the Checkbox. The peer allows you to change the
* look of the Checkbox without changing its functionality.
*
- * @see java.awt.Toolkit#createCheckbox(java.awt.Checkbox)
* @see java.awt.Component#getToolkit()
*/
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createCheckbox(this);
+ peer = getComponentFactory().createCheckbox(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -155,13 +155,12 @@
* change the look of the checkbox item without changing its
* functionality.
* Most applications do not call this method directly.
- * @see java.awt.Toolkit#createCheckboxMenuItem(java.awt.CheckboxMenuItem)
* @see java.awt.Component#getToolkit()
*/
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = Toolkit.getDefaultToolkit().createCheckboxMenuItem(this);
+ peer = getComponentFactory().createCheckboxMenuItem(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Choice.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Choice.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -143,13 +143,12 @@
* Creates the <code>Choice</code>'s peer. This peer allows us
* to change the look
* of the <code>Choice</code> without changing its functionality.
- * @see java.awt.Toolkit#createChoice(java.awt.Choice)
* @see java.awt.Component#getToolkit()
*/
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createChoice(this);
+ peer = getComponentFactory().createChoice(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Component.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Component.java Wed Jul 05 20:33:55 2017 +0200
@@ -61,6 +61,7 @@
import javax.accessibility.*;
import java.applet.Applet;
+import sun.awt.ComponentFactory;
import sun.security.action.GetPropertyAction;
import sun.awt.AppContext;
import sun.awt.AWTAccessor;
@@ -198,7 +199,7 @@
* @see #addNotify
* @see #removeNotify
*/
- transient ComponentPeer peer;
+ transient volatile ComponentPeer peer;
/**
* The parent of the object. It may be <code>null</code>
@@ -924,8 +925,9 @@
public Cursor getCursor(Component comp) {
return comp.getCursor_NoClientCode();
}
- public ComponentPeer getPeer(Component comp) {
- return comp.peer;
+ @SuppressWarnings("unchecked")
+ public <T extends ComponentPeer> T getPeer(Component comp) {
+ return (T) comp.peer;
}
public void setPeer(Component comp, ComponentPeer peer) {
comp.peer = peer;
@@ -1069,17 +1071,6 @@
}
/**
- * @deprecated As of JDK version 1.1,
- * programs should not directly manipulate peers;
- * replaced by <code>boolean isDisplayable()</code>.
- * @return the peer for this component
- */
- @Deprecated
- public ComponentPeer getPeer() {
- return peer;
- }
-
- /**
* Associate a <code>DropTarget</code> with this component.
* The <code>Component</code> will receive drops only if it
* is enabled.
@@ -1095,7 +1086,7 @@
DropTarget old;
if ((old = dropTarget) != null) {
- if (peer != null) dropTarget.removeNotify(peer);
+ dropTarget.removeNotify();
DropTarget t = dropTarget;
@@ -1113,12 +1104,12 @@
if ((dropTarget = dt) != null) {
try {
dropTarget.setComponent(this);
- if (peer != null) dropTarget.addNotify(peer);
+ dropTarget.addNotify();
} catch (IllegalArgumentException iae) {
if (old != null) {
try {
old.setComponent(this);
- if (peer != null) dropTarget.addNotify(peer);
+ dropTarget.addNotify();
} catch (IllegalArgumentException iae1) {
// ignore it!
}
@@ -1179,7 +1170,7 @@
graphicsConfig = gc;
- ComponentPeer peer = getPeer();
+ ComponentPeer peer = this.peer;
if (peer != null) {
return peer.updateGraphicsData(gc);
}
@@ -1239,6 +1230,14 @@
return Toolkit.getDefaultToolkit();
}
+ final ComponentFactory getComponentFactory() {
+ final Toolkit toolkit = getToolkit();
+ if (toolkit instanceof ComponentFactory) {
+ return (ComponentFactory) toolkit;
+ }
+ throw new AWTError("UI components are unsupported by: " + toolkit);
+ }
+
/**
* Determines whether this component is valid. A component is valid
* when it is correctly sized and positioned within its parent
@@ -1281,7 +1280,7 @@
* @since 1.2
*/
public boolean isDisplayable() {
- return getPeer() != null;
+ return peer != null;
}
/**
@@ -1336,7 +1335,11 @@
return null;
}
Window win = getContainingWindow();
- if (!Toolkit.getDefaultToolkit().getMouseInfoPeer().isWindowUnderMouse(win)) {
+ Toolkit toolkit = Toolkit.getDefaultToolkit();
+ if (!(toolkit instanceof ComponentFactory)) {
+ return null;
+ }
+ if (!((ComponentFactory) toolkit).getMouseInfoPeer().isWindowUnderMouse(win)) {
return null;
}
final boolean INCLUDE_DISABLED = true;
@@ -2582,7 +2585,7 @@
* @since 1.2
*/
public boolean isOpaque() {
- if (getPeer() == null) {
+ if (peer == null) {
return false;
}
else {
@@ -2608,7 +2611,7 @@
* @since 1.2
*/
public boolean isLightweight() {
- return getPeer() instanceof LightweightPeer;
+ return peer instanceof LightweightPeer;
}
@@ -3126,7 +3129,6 @@
* obtained
* @return the font metrics for <code>font</code>
* @see #getFont
- * @see #getPeer
* @see java.awt.peer.ComponentPeer#getFontMetrics(Font)
* @see Toolkit#getFontMetrics(Font)
* @since 1.0
@@ -3186,7 +3188,7 @@
if (nativeContainer == null) return;
- ComponentPeer cPeer = nativeContainer.getPeer();
+ ComponentPeer cPeer = nativeContainer.peer;
if (cPeer != null) {
cPeer.updateCursorImmediately();
@@ -5019,7 +5021,7 @@
if (source != null) {
Container target = source.getNativeContainer();
if (target != null) {
- tpeer = target.getPeer();
+ tpeer = target.peer;
}
}
}
@@ -6972,7 +6974,7 @@
if (peer == null) {
// Update both the Component's peer variable and the local
// variable we use for thread safety.
- this.peer = peer = getToolkit().createComponent(this);
+ this.peer = peer = getComponentFactory().createComponent(this);
}
// This is a lightweight component which means it won't be
@@ -7022,7 +7024,7 @@
popup.addNotify();
}
- if (dropTarget != null) dropTarget.addNotify(peer);
+ if (dropTarget != null) dropTarget.addNotify();
peerFont = getFont();
@@ -7109,7 +7111,7 @@
((FlipBufferStrategy)bufferStrategy).destroyBuffers();
}
- if (dropTarget != null) dropTarget.removeNotify(peer);
+ if (dropTarget != null) dropTarget.removeNotify();
// Hide peer first to stop system events such as cursor moves.
if (visible) {
@@ -9851,7 +9853,7 @@
}
if (!isLightweight()) {
- ComponentPeer peer = getPeer();
+ ComponentPeer peer = this.peer;
if (peer != null) {
// The Region class has some optimizations. That's why
// we should manually check whether it's empty and
@@ -9975,7 +9977,7 @@
for (int i = indexAbove; i > -1; i--) {
Component comp = cont.getComponent(i);
if (comp != null && comp.isDisplayable() && !comp.isLightweight()) {
- return comp.getPeer();
+ return comp.peer;
}
}
// traversing the hierarchy up to the closest HW container;
--- a/jdk/src/java.desktop/share/classes/java/awt/Container.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Container.java Wed Jul 05 20:33:55 2017 +0200
@@ -820,7 +820,7 @@
}
} else {
// Q: Need to update NativeInLightFixer?
- comp.getPeer().reparent(parentPeer);
+ comp.peer.reparent(parentPeer);
}
}
}
@@ -840,10 +840,10 @@
// If component is lightweight container we need to reparent all its explicit heavyweight children
if (comp instanceof Container) {
// Traverse component's tree till depth-first until encountering heavyweight component
- reparentTraverse((ContainerPeer)getPeer(), (Container)comp);
+ reparentTraverse((ContainerPeer)peer, (Container)comp);
}
} else {
- comp.getPeer().reparent((ContainerPeer)getPeer());
+ comp.peer.reparent((ContainerPeer) peer);
}
}
@@ -4195,7 +4195,7 @@
}
} else {
if (comp.isVisible()) {
- ComponentPeer peer = comp.getPeer();
+ ComponentPeer peer = comp.peer;
if (peer != null) {
peer.setVisible(true);
}
@@ -4217,7 +4217,7 @@
}
} else {
if (comp.isVisible()) {
- ComponentPeer peer = comp.getPeer();
+ ComponentPeer peer = comp.peer;
if (peer != null) {
peer.setVisible(false);
}
@@ -4239,7 +4239,7 @@
((Container)comp).recursiveRelocateHeavyweightChildren(newOrigin);
}
} else {
- ComponentPeer peer = comp.getPeer();
+ ComponentPeer peer = comp.peer;
if (peer != null) {
peer.setBounds(origin.x + comp.getX(), origin.y + comp.getY(),
comp.getWidth(), comp.getHeight(),
--- a/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java Wed Jul 05 20:33:55 2017 +0200
@@ -504,7 +504,10 @@
} else if (comp instanceof Container && comp != aContainer) {
Container cont = (Container)comp;
if (cont.isFocusTraversalPolicyProvider()) {
- return cont.getFocusTraversalPolicy().getLastComponent(cont);
+ Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+ if (retComp != null) {
+ return retComp;
+ }
}
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -93,7 +93,6 @@
* @return <code>true</code> if aComponent meets the above requirements;
* <code>false</code> otherwise
*/
- @SuppressWarnings("deprecation")
protected boolean accept(Component aComponent) {
if (!(aComponent.isVisible() && aComponent.isDisplayable() &&
aComponent.isEnabled()))
@@ -123,7 +122,7 @@
return focusable;
}
- ComponentPeer peer = aComponent.getPeer();
+ ComponentPeer peer = aComponent.peer;
return (peer != null && peer.isFocusable());
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -796,7 +796,6 @@
* @return <code>true</code>
* @see Component#dispatchEvent
*/
- @SuppressWarnings("deprecation")
public boolean dispatchKeyEvent(KeyEvent e) {
Component focusOwner = (((AWTEvent)e).isPosted) ? getFocusOwner() : e.getComponent();
@@ -824,14 +823,14 @@
// Allow the peer to process KeyEvent
Component source = e.getComponent();
- ComponentPeer peer = source.getPeer();
+ ComponentPeer peer = source.peer;
if (peer == null || peer instanceof LightweightPeer) {
// if focus owner is lightweight then its native container
// processes event
Container target = source.getNativeContainer();
if (target != null) {
- peer = target.getPeer();
+ peer = target.peer;
}
}
if (peer != null) {
@@ -1049,7 +1048,7 @@
Component source = (Component)ke.getSource();
Container target = source.getNativeContainer();
if (target != null) {
- ComponentPeer peer = target.getPeer();
+ ComponentPeer peer = target.peer;
if (peer != null) {
peer.handleEvent(ke);
/**
--- a/jdk/src/java.desktop/share/classes/java/awt/Desktop.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Desktop.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. 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
@@ -25,19 +25,16 @@
package java.awt;
+import java.awt.peer.DesktopPeer;
import java.io.File;
+import java.io.FilePermission;
import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URI;
-import java.net.URL;
import java.net.MalformedURLException;
-import java.awt.AWTPermission;
-import java.awt.GraphicsEnvironment;
-import java.awt.HeadlessException;
-import java.awt.peer.DesktopPeer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
import sun.awt.SunToolkit;
-import sun.awt.HeadlessToolkit;
-import java.io.FilePermission;
import sun.security.util.SecurityConstants;
/**
@@ -122,7 +119,11 @@
* Suppresses default constructor for noninstantiability.
*/
private Desktop() {
- peer = Toolkit.getDefaultToolkit().createDesktopPeer(this);
+ Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
+ // same cast as in isDesktopSupported()
+ if (defaultToolkit instanceof SunToolkit) {
+ peer = ((SunToolkit) defaultToolkit).createDesktopPeer(this);
+ }
}
/**
--- a/jdk/src/java.desktop/share/classes/java/awt/Dialog.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Dialog.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -36,11 +36,9 @@
import sun.awt.AppContext;
import sun.awt.AWTPermissions;
import sun.awt.SunToolkit;
-import sun.awt.PeerEvent;
import sun.awt.util.IdentityArrayList;
import sun.awt.util.IdentityLinkedList;
import java.security.AccessControlException;
-import java.util.function.BooleanSupplier;
/**
* A Dialog is a top-level window with a title and a border
@@ -749,15 +747,14 @@
* @see Component#isDisplayable
* @see #removeNotify
*/
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized (getTreeLock()) {
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && parent.peer == null) {
parent.addNotify();
}
if (peer == null) {
- peer = getToolkit().createDialog(this);
+ peer = getComponentFactory().createDialog(this);
}
super.addNotify();
}
--- a/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -314,14 +314,13 @@
* Creates the file dialog's peer. The peer allows us to change the look
* of the file dialog without changing its functionality.
*/
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized(getTreeLock()) {
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && parent.peer == null) {
parent.addNotify();
}
if (peer == null)
- peer = getToolkit().createFileDialog(this);
+ peer = getComponentFactory().createFileDialog(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Font.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Font.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -41,10 +41,11 @@
import java.security.PrivilegedExceptionAction;
import java.text.AttributedCharacterIterator.Attribute;
import java.text.CharacterIterator;
-import java.text.StringCharacterIterator;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Map;
+
+import sun.awt.ComponentFactory;
import sun.font.StandardGlyphVector;
import sun.font.AttributeMap;
@@ -239,6 +240,11 @@
public boolean isCreatedFont(Font font) {
return font.createdFont;
}
+
+ @Override
+ public FontPeer getFontPeer(final Font font) {
+ return font.getFontPeer();
+ }
}
static {
@@ -434,24 +440,16 @@
private static final long serialVersionUID = -4206021311591459213L;
/**
- * Gets the peer of this <code>Font</code>.
- * @return the peer of the <code>Font</code>.
- * @since 1.1
- * @deprecated Font rendering is now platform independent.
+ * Gets the peer of this {@code Font}.
+ *
+ * @return the peer of the {@code Font}.
*/
- @Deprecated
- public FontPeer getPeer(){
- return getPeer_NoClientCode();
- }
- // NOTE: This method is called by privileged threads.
- // We implement this functionality in a package-private method
- // to insure that it cannot be overridden by client subclasses.
- // DO NOT INVOKE CLIENT CODE ON THIS THREAD!
- @SuppressWarnings("deprecation")
- final FontPeer getPeer_NoClientCode() {
+ private FontPeer getFontPeer() {
if(peer == null) {
Toolkit tk = Toolkit.getDefaultToolkit();
- this.peer = tk.getFontPeer(name, style);
+ if (tk instanceof ComponentFactory) {
+ peer = ((ComponentFactory) tk).getFontPeer(name, style);
+ }
}
return peer;
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Frame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Frame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -24,21 +24,23 @@
*/
package java.awt;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
import java.awt.peer.FramePeer;
-import java.awt.event.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Vector;
-import java.io.Serializable;
+import java.io.IOException;
+import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import sun.awt.AppContext;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import java.lang.ref.WeakReference;
-import javax.accessibility.*;
/**
* A <code>Frame</code> is a top-level window with a title and a border.
@@ -474,7 +476,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null) {
- peer = getToolkit().createFrame(this);
+ peer = getComponentFactory().createFrame(this);
}
FramePeer p = (FramePeer)peer;
MenuBar menuBar = this.menuBar;
--- a/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -3054,11 +3054,10 @@
return (wto != wfrom);
}
- @SuppressWarnings("deprecation")
static Component getHeavyweight(Component comp) {
- if (comp == null || comp.getPeer() == null) {
+ if (comp == null || comp.peer == null) {
return null;
- } else if (comp.getPeer() instanceof LightweightPeer) {
+ } else if (comp.peer instanceof LightweightPeer) {
return comp.getNativeContainer();
} else {
return comp;
--- a/jdk/src/java.desktop/share/classes/java/awt/Label.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Label.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -184,7 +184,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createLabel(this);
+ peer = getComponentFactory().createLabel(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/List.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/List.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -252,7 +252,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createList(this);
+ peer = getComponentFactory().createList(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Menu.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Menu.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -174,7 +174,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = Toolkit.getDefaultToolkit().createMenu(this);
+ peer = getComponentFactory().createMenu(this);
int nitems = getItemCount();
for (int i = 0 ; i < nitems ; i++) {
MenuItem mi = getItem(i);
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -143,7 +143,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = Toolkit.getDefaultToolkit().createMenuBar(this);
+ peer = getComponentFactory().createMenuBar(this);
int nmenus = getMenuCount();
for (int i = 0 ; i < nmenus ; i++) {
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java Wed Jul 05 20:33:55 2017 +0200
@@ -30,6 +30,8 @@
import java.io.ObjectInputStream;
import sun.awt.AppContext;
import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
+
import javax.accessibility.*;
import java.security.AccessControlContext;
@@ -57,7 +59,7 @@
}
}
- transient MenuComponentPeer peer;
+ transient volatile MenuComponentPeer peer;
transient MenuContainer parent;
/**
@@ -142,6 +144,11 @@
menuComp.appContext = appContext;
}
@Override
+ @SuppressWarnings("unchecked")
+ public <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp) {
+ return (T) menuComp.peer;
+ }
+ @Override
public MenuContainer getParent(MenuComponent menuComp) {
return menuComp.parent;
}
@@ -179,6 +186,14 @@
// getName()
}
+ final ComponentFactory getComponentFactory() {
+ final Toolkit toolkit = Toolkit.getDefaultToolkit();
+ if (toolkit instanceof ComponentFactory) {
+ return (ComponentFactory) toolkit;
+ }
+ throw new AWTError("UI components are unsupported by: " + toolkit);
+ }
+
/**
* Gets the name of the menu component.
* @return the name of the menu component
@@ -226,16 +241,6 @@
}
/**
- * @deprecated As of JDK version 1.1,
- * programs should not directly manipulate peers.
- * @return the peer for this component
- */
- @Deprecated
- public MenuComponentPeer getPeer() {
- return peer;
- }
-
- /**
* Gets the font used for this menu component.
* @return the font used in this menu component, if there is one;
* <code>null</code> otherwise
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -233,7 +233,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = Toolkit.getDefaultToolkit().createMenuItem(this);
+ peer = getComponentFactory().createMenuItem(this);
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -26,6 +26,7 @@
package java.awt;
import sun.awt.AWTPermissions;
+import sun.awt.ComponentFactory;
/**
* <code>MouseInfo</code> provides methods for getting information about the mouse,
@@ -80,8 +81,13 @@
security.checkPermission(AWTPermissions.WATCH_MOUSE_PERMISSION);
}
+ Toolkit toolkit = Toolkit.getDefaultToolkit();
Point point = new Point(0, 0);
- int deviceNum = Toolkit.getDefaultToolkit().getMouseInfoPeer().fillPointWithCoords(point);
+ int deviceNum = 0;
+ if (toolkit instanceof ComponentFactory) {
+ deviceNum = ((ComponentFactory) toolkit).getMouseInfoPeer().fillPointWithCoords(point);
+ }
+
GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().
getScreenDevices();
PointerInfo retval = null;
@@ -113,9 +119,13 @@
/**
* Returns the number of buttons on the mouse.
* On systems without a mouse, returns <code>-1</code>.
+ * The number of buttons is obtained from the AWT Toolkit
+ * by requesting the {@code "awt.mouse.numButtons"} desktop property
+ * which is set by the underlying native platform.
*
* @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true
* @return number of buttons on the mouse
+ * @see Toolkit#getDesktopProperty
* @since 1.5
*/
public static int getNumberOfButtons() throws HeadlessException {
--- a/jdk/src/java.desktop/share/classes/java/awt/Panel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Panel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -83,7 +83,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createPanel(this);
+ peer = getComponentFactory().createPanel(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -121,7 +121,7 @@
}
else {
if (peer == null)
- peer = Toolkit.getDefaultToolkit().createPopupMenu(this);
+ peer = getComponentFactory().createPopupMenu(this);
int nitems = getItemCount();
for (int i = 0 ; i < nitems ; i++) {
MenuItem mi = getItem(i);
@@ -153,7 +153,6 @@
* parent's hierarchy
* @exception RuntimeException if the parent is not showing on screen
*/
- @SuppressWarnings("deprecation")
public void show(Component origin, int x, int y) {
// Use localParent for thread safety.
MenuContainer localParent = parent;
@@ -177,7 +176,7 @@
throw new IllegalArgumentException("origin not in parent's hierarchy");
}
}
- if (compParent.getPeer() == null || !compParent.isShowing()) {
+ if (compParent.peer == null || !compParent.isShowing()) {
throw new RuntimeException("parent not showing on screen");
}
if (peer == null) {
--- a/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -24,7 +24,6 @@
*/
package java.awt;
-import java.awt.peer.LightweightPeer;
import java.awt.peer.ScrollPanePeer;
import java.awt.event.*;
import javax.accessibility.*;
@@ -562,7 +561,7 @@
}
if (peer == null)
- peer = getToolkit().createScrollPane(this);
+ peer = getComponentFactory().createScrollPane(this);
super.addNotify();
// Bug 4124460. Restore the adjustable values.
--- a/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -433,7 +433,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createScrollbar(this);
+ peer = getComponentFactory().createScrollbar(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/TextArea.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextArea.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -24,15 +24,15 @@
*/
package java.awt;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
import java.awt.peer.TextAreaPeer;
-import java.io.ObjectOutputStream;
+import java.io.IOException;
import java.io.ObjectInputStream;
-import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
-import javax.accessibility.*;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
/**
* A <code>TextArea</code> object is a multi-line region
@@ -290,7 +290,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createTextArea(this);
+ peer = getComponentFactory().createTextArea(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/TextField.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextField.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. 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
@@ -219,7 +219,7 @@
public void addNotify() {
synchronized (getTreeLock()) {
if (peer == null)
- peer = getToolkit().createTextField(this);
+ peer = getComponentFactory().createTextField(this);
super.addNotify();
}
}
--- a/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -25,36 +25,37 @@
package java.awt;
-import java.beans.PropertyChangeEvent;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
import java.awt.event.*;
-import java.awt.peer.*;
import java.awt.im.InputMethodHighlight;
+import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
-import java.awt.image.ColorModel;
-import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragGestureRecognizer;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.net.URL;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
import java.io.File;
import java.io.FileInputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.EventListener;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.StringTokenizer;
+import java.util.WeakHashMap;
-import java.util.*;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTPermissions;
import sun.awt.AppContext;
-
import sun.awt.HeadlessToolkit;
-import sun.awt.NullComponentPeer;
import sun.awt.PeerEvent;
import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import sun.awt.AWTPermissions;
-
import sun.util.CoreResourceBundleControl;
/**
@@ -112,341 +113,6 @@
*/
public abstract class Toolkit {
- /**
- * Creates this toolkit's implementation of the <code>Desktop</code>
- * using the specified peer interface.
- * @param target the desktop to be implemented
- * @return this toolkit's implementation of the <code>Desktop</code>
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Desktop
- * @see java.awt.peer.DesktopPeer
- * @since 1.6
- */
- protected abstract DesktopPeer createDesktopPeer(Desktop target)
- throws HeadlessException;
-
-
- /**
- * Creates this toolkit's implementation of <code>Button</code> using
- * the specified peer interface.
- * @param target the button to be implemented.
- * @return this toolkit's implementation of <code>Button</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Button
- * @see java.awt.peer.ButtonPeer
- */
- protected abstract ButtonPeer createButton(Button target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>TextField</code> using
- * the specified peer interface.
- * @param target the text field to be implemented.
- * @return this toolkit's implementation of <code>TextField</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.TextField
- * @see java.awt.peer.TextFieldPeer
- */
- protected abstract TextFieldPeer createTextField(TextField target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Label</code> using
- * the specified peer interface.
- * @param target the label to be implemented.
- * @return this toolkit's implementation of <code>Label</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Label
- * @see java.awt.peer.LabelPeer
- */
- protected abstract LabelPeer createLabel(Label target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>List</code> using
- * the specified peer interface.
- * @param target the list to be implemented.
- * @return this toolkit's implementation of <code>List</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.List
- * @see java.awt.peer.ListPeer
- */
- protected abstract ListPeer createList(java.awt.List target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Checkbox</code> using
- * the specified peer interface.
- * @param target the check box to be implemented.
- * @return this toolkit's implementation of <code>Checkbox</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Checkbox
- * @see java.awt.peer.CheckboxPeer
- */
- protected abstract CheckboxPeer createCheckbox(Checkbox target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Scrollbar</code> using
- * the specified peer interface.
- * @param target the scroll bar to be implemented.
- * @return this toolkit's implementation of <code>Scrollbar</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Scrollbar
- * @see java.awt.peer.ScrollbarPeer
- */
- protected abstract ScrollbarPeer createScrollbar(Scrollbar target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>ScrollPane</code> using
- * the specified peer interface.
- * @param target the scroll pane to be implemented.
- * @return this toolkit's implementation of <code>ScrollPane</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.ScrollPane
- * @see java.awt.peer.ScrollPanePeer
- * @since 1.1
- */
- protected abstract ScrollPanePeer createScrollPane(ScrollPane target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>TextArea</code> using
- * the specified peer interface.
- * @param target the text area to be implemented.
- * @return this toolkit's implementation of <code>TextArea</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.TextArea
- * @see java.awt.peer.TextAreaPeer
- */
- protected abstract TextAreaPeer createTextArea(TextArea target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Choice</code> using
- * the specified peer interface.
- * @param target the choice to be implemented.
- * @return this toolkit's implementation of <code>Choice</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Choice
- * @see java.awt.peer.ChoicePeer
- */
- protected abstract ChoicePeer createChoice(Choice target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Frame</code> using
- * the specified peer interface.
- * @param target the frame to be implemented.
- * @return this toolkit's implementation of <code>Frame</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Frame
- * @see java.awt.peer.FramePeer
- */
- protected abstract FramePeer createFrame(Frame target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Canvas</code> using
- * the specified peer interface.
- * @param target the canvas to be implemented.
- * @return this toolkit's implementation of <code>Canvas</code>.
- * @see java.awt.Canvas
- * @see java.awt.peer.CanvasPeer
- */
- protected abstract CanvasPeer createCanvas(Canvas target);
-
- /**
- * Creates this toolkit's implementation of <code>Panel</code> using
- * the specified peer interface.
- * @param target the panel to be implemented.
- * @return this toolkit's implementation of <code>Panel</code>.
- * @see java.awt.Panel
- * @see java.awt.peer.PanelPeer
- */
- protected abstract PanelPeer createPanel(Panel target);
-
- /**
- * Creates this toolkit's implementation of <code>Window</code> using
- * the specified peer interface.
- * @param target the window to be implemented.
- * @return this toolkit's implementation of <code>Window</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Window
- * @see java.awt.peer.WindowPeer
- */
- protected abstract WindowPeer createWindow(Window target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Dialog</code> using
- * the specified peer interface.
- * @param target the dialog to be implemented.
- * @return this toolkit's implementation of <code>Dialog</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Dialog
- * @see java.awt.peer.DialogPeer
- */
- protected abstract DialogPeer createDialog(Dialog target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>MenuBar</code> using
- * the specified peer interface.
- * @param target the menu bar to be implemented.
- * @return this toolkit's implementation of <code>MenuBar</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.MenuBar
- * @see java.awt.peer.MenuBarPeer
- */
- protected abstract MenuBarPeer createMenuBar(MenuBar target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>Menu</code> using
- * the specified peer interface.
- * @param target the menu to be implemented.
- * @return this toolkit's implementation of <code>Menu</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.Menu
- * @see java.awt.peer.MenuPeer
- */
- protected abstract MenuPeer createMenu(Menu target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>PopupMenu</code> using
- * the specified peer interface.
- * @param target the popup menu to be implemented.
- * @return this toolkit's implementation of <code>PopupMenu</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.PopupMenu
- * @see java.awt.peer.PopupMenuPeer
- * @since 1.1
- */
- protected abstract PopupMenuPeer createPopupMenu(PopupMenu target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>MenuItem</code> using
- * the specified peer interface.
- * @param target the menu item to be implemented.
- * @return this toolkit's implementation of <code>MenuItem</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.MenuItem
- * @see java.awt.peer.MenuItemPeer
- */
- protected abstract MenuItemPeer createMenuItem(MenuItem target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>FileDialog</code> using
- * the specified peer interface.
- * @param target the file dialog to be implemented.
- * @return this toolkit's implementation of <code>FileDialog</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.FileDialog
- * @see java.awt.peer.FileDialogPeer
- */
- protected abstract FileDialogPeer createFileDialog(FileDialog target)
- throws HeadlessException;
-
- /**
- * Creates this toolkit's implementation of <code>CheckboxMenuItem</code> using
- * the specified peer interface.
- * @param target the checkbox menu item to be implemented.
- * @return this toolkit's implementation of <code>CheckboxMenuItem</code>.
- * @exception HeadlessException if GraphicsEnvironment.isHeadless()
- * returns true
- * @see java.awt.GraphicsEnvironment#isHeadless
- * @see java.awt.CheckboxMenuItem
- * @see java.awt.peer.CheckboxMenuItemPeer
- */
- protected abstract CheckboxMenuItemPeer createCheckboxMenuItem(
- CheckboxMenuItem target) throws HeadlessException;
-
- /**
- * Obtains this toolkit's implementation of helper class for
- * <code>MouseInfo</code> operations.
- * @return this toolkit's implementation of helper for <code>MouseInfo</code>
- * @throws UnsupportedOperationException if this operation is not implemented
- * @see java.awt.peer.MouseInfoPeer
- * @see java.awt.MouseInfo
- * @since 1.5
- */
- protected MouseInfoPeer getMouseInfoPeer() {
- throw new UnsupportedOperationException("Not implemented");
- }
-
- private static LightweightPeer lightweightMarker;
-
- /**
- * Creates a peer for a component or container. This peer is windowless
- * and allows the Component and Container classes to be extended directly
- * to create windowless components that are defined entirely in java.
- *
- * @param target The Component to be created.
- * @return the peer for the specified component
- */
- protected LightweightPeer createComponent(Component target) {
- if (lightweightMarker == null) {
- lightweightMarker = new NullComponentPeer();
- }
- return lightweightMarker;
- }
-
- /**
- * Creates this toolkit's implementation of <code>Font</code> using
- * the specified peer interface.
- * @param name the font to be implemented
- * @param style the style of the font, such as <code>PLAIN</code>,
- * <code>BOLD</code>, <code>ITALIC</code>, or a combination
- * @return this toolkit's implementation of <code>Font</code>
- * @see java.awt.Font
- * @see java.awt.peer.FontPeer
- * @see java.awt.GraphicsEnvironment#getAllFonts
- * @deprecated see java.awt.GraphicsEnvironment#getAllFonts
- */
- @Deprecated
- protected abstract FontPeer getFontPeer(String name, int style);
-
// The following method is called by the private method
// <code>updateSystemColors</code> in <code>SystemColor</code>.
@@ -1749,17 +1415,6 @@
}
/**
- * Creates the peer for a DragSourceContext.
- * Always throws InvalidDndOperationException if
- * GraphicsEnvironment.isHeadless() returns true.
- *
- * @param dge the {@code DragGestureEvent}
- * @return the peer created
- * @see java.awt.GraphicsEnvironment#isHeadless
- */
- public abstract DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException;
-
- /**
* Creates a concrete, platform dependent, subclass of the abstract
* DragGestureRecognizer class requested, and associates it with the
* DragSource, Component and DragGestureListener specified.
--- a/jdk/src/java.desktop/share/classes/java/awt/Window.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/Window.java Wed Jul 05 20:33:55 2017 +0200
@@ -29,7 +29,6 @@
import java.awt.geom.Point2D;
import java.awt.im.InputContext;
import java.awt.image.BufferStrategy;
-import java.awt.image.BufferedImage;
import java.awt.peer.ComponentPeer;
import java.awt.peer.WindowPeer;
import java.beans.PropertyChangeListener;
@@ -56,7 +55,6 @@
import sun.awt.CausedFocusEvent;
import sun.awt.SunToolkit;
import sun.awt.util.IdentityArrayList;
-import sun.java2d.Disposer;
import sun.java2d.pipe.Region;
import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger;
@@ -755,15 +753,14 @@
* @see Container#removeNotify
* @since 1.0
*/
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized (getTreeLock()) {
Container parent = this.parent;
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && parent.peer == null) {
parent.addNotify();
}
if (peer == null) {
- peer = getToolkit().createWindow(this);
+ peer = getComponentFactory().createWindow(this);
}
synchronized (allWindows) {
allWindows.add(this);
@@ -802,7 +799,7 @@
@SuppressWarnings("deprecation")
public void pack() {
Container parent = this.parent;
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && parent.peer == null) {
parent.addNotify();
}
if (peer == null) {
@@ -1072,10 +1069,9 @@
}
}
- @SuppressWarnings("deprecation")
static void updateChildFocusableWindowState(Window w) {
- if (w.getPeer() != null && w.isShowing()) {
- ((WindowPeer)w.getPeer()).updateFocusableWindowState();
+ if (w.peer != null && w.isShowing()) {
+ ((WindowPeer)w.peer).updateFocusableWindowState();
}
for (int i = 0; i < w.ownedWindowList.size(); i++) {
Window child = w.ownedWindowList.elementAt(i).get();
@@ -1160,10 +1156,9 @@
* as reported in javadoc. So we need to implement this functionality even if a
* child overrides dispose() in a wrong way without calling super.dispose().
*/
- @SuppressWarnings("deprecation")
void disposeImpl() {
dispose();
- if (getPeer() != null) {
+ if (peer != null) {
doDispose();
}
}
@@ -3651,7 +3646,7 @@
}
}
this.opacity = opacity;
- WindowPeer peer = (WindowPeer)getPeer();
+ WindowPeer peer = (WindowPeer) this.peer;
if (peer != null) {
peer.setOpacity(opacity);
}
@@ -3728,7 +3723,6 @@
*
* @since 1.7
*/
- @SuppressWarnings("deprecation")
public void setShape(Shape shape) {
synchronized (getTreeLock()) {
if (shape != null) {
@@ -3746,7 +3740,7 @@
}
}
this.shape = (shape == null) ? null : new Path2D.Float(shape);
- WindowPeer peer = (WindowPeer)getPeer();
+ WindowPeer peer = (WindowPeer) this.peer;
if (peer != null) {
peer.applyShape(shape == null ? null : Region.getInstance(shape, null));
}
@@ -3846,7 +3840,6 @@
* @see GraphicsConfiguration#isTranslucencyCapable()
*/
@Override
- @SuppressWarnings("deprecation")
public void setBackground(Color bgColor) {
Color oldBg = getBackground();
super.setBackground(bgColor);
@@ -3874,7 +3867,7 @@
} else if ((oldAlpha < 255) && (alpha == 255)) {
setLayersOpaque(this, true);
}
- WindowPeer peer = (WindowPeer)getPeer();
+ WindowPeer peer = (WindowPeer) this.peer;
if (peer != null) {
peer.setOpaque(alpha == 255);
}
@@ -3899,10 +3892,9 @@
return bg != null ? bg.getAlpha() == 255 : true;
}
- @SuppressWarnings("deprecation")
private void updateWindow() {
synchronized (getTreeLock()) {
- WindowPeer peer = (WindowPeer)getPeer();
+ WindowPeer peer = (WindowPeer) this.peer;
if (peer != null) {
peer.updateWindow();
}
@@ -4090,7 +4082,6 @@
window.securityWarningHeight = height;
}
- @SuppressWarnings("deprecation")
public void setSecurityWarningPosition(Window window,
Point2D point, float alignmentX, float alignmentY)
{
@@ -4100,7 +4091,7 @@
window.securityWarningAlignmentY = alignmentY;
synchronized (window.getTreeLock()) {
- WindowPeer peer = (WindowPeer)window.getPeer();
+ WindowPeer peer = (WindowPeer) window.peer;
if (peer != null) {
peer.repositionSecurityWarning();
}
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -35,13 +35,15 @@
import java.awt.datatransfer.FlavorMap;
import java.awt.datatransfer.SystemFlavorMap;
import java.awt.datatransfer.Transferable;
-import java.awt.dnd.peer.DragSourceContextPeer;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.security.AccessController;
import java.util.EventListener;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DragSourceContextAccessor;
import sun.awt.dnd.SunDragSourceContextPeer;
import sun.security.action.GetIntegerAction;
@@ -303,22 +305,16 @@
try {
if (flavorMap != null) this.flavorMap = flavorMap;
- DragSourceContextPeer dscp = Toolkit.getDefaultToolkit().createDragSourceContextPeer(trigger);
-
- DragSourceContext dsc = createDragSourceContext(dscp,
- trigger,
- dragCursor,
- dragImage,
- imageOffset,
- transferable,
- dsl
- );
+ DragSourceContext dsc = createDragSourceContext(trigger, dragCursor,
+ dragImage,
+ imageOffset,
+ transferable, dsl);
if (dsc == null) {
throw new InvalidDnDOperationException();
}
-
- dscp.startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
+ DragSourceContextAccessor acc = AWTAccessor.getDragSourceContextAccessor();
+ acc.getPeer(dsc).startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
} catch (RuntimeException e) {
SunDragSourceContextPeer.setDragDropInProgress(false);
throw e;
@@ -442,7 +438,6 @@
* is registered with the created <code>DragSourceContext</code>,
* but <code>NullPointerException</code> is not thrown.
*
- * @param dscp The <code>DragSourceContextPeer</code> for this drag
* @param dgl The <code>DragGestureEvent</code> that triggered the
* drag
* @param dragCursor The initial {@code Cursor} for this drag operation
@@ -473,8 +468,13 @@
* event are equal to <code>DnDConstants.ACTION_NONE</code>.
*/
- protected DragSourceContext createDragSourceContext(DragSourceContextPeer dscp, DragGestureEvent dgl, Cursor dragCursor, Image dragImage, Point imageOffset, Transferable t, DragSourceListener dsl) {
- return new DragSourceContext(dscp, dgl, dragCursor, dragImage, imageOffset, t, dsl);
+ protected DragSourceContext createDragSourceContext(DragGestureEvent dgl,
+ Cursor dragCursor,
+ Image dragImage,
+ Point imageOffset,
+ Transferable t,
+ DragSourceListener dsl) {
+ return new DragSourceContext(dgl, dragCursor, dragImage, imageOffset, t, dsl);
}
/**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -25,24 +25,25 @@
package java.awt.dnd;
+import java.awt.AWTError;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
-
+import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
-
import java.awt.dnd.peer.DragSourceContextPeer;
-
import java.io.IOException;
import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.Serializable;
+import java.util.TooManyListenersException;
-import java.util.TooManyListenersException;
+import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
/**
* The <code>DragSourceContext</code> class is responsible for managing the
@@ -123,6 +124,10 @@
protected static final int CHANGED = 3;
+ static {
+ AWTAccessor.setDragSourceContextAccessor(dsc -> dsc.peer);
+ }
+
/**
* Called from <code>DragSource</code>, this constructor creates a new
* <code>DragSourceContext</code> given the
@@ -155,7 +160,6 @@
* If <code>DragSourceListener</code> is <code>null</code> no exception
* is thrown.
*
- * @param dscp the <code>DragSourceContextPeer</code> for this drag
* @param trigger the triggering event
* @param dragCursor the initial {@code Cursor} for this drag operation
* or {@code null} for the default cursor handling;
@@ -179,10 +183,16 @@
* @throws NullPointerException if dscp, trigger, or t are null, or
* if dragImage is non-null and offset is null
*/
- public DragSourceContext(DragSourceContextPeer dscp,
- DragGestureEvent trigger, Cursor dragCursor,
+ public DragSourceContext(DragGestureEvent trigger, Cursor dragCursor,
Image dragImage, Point offset, Transferable t,
DragSourceListener dsl) {
+ Toolkit toolkit = Toolkit.getDefaultToolkit();
+ if (!(toolkit instanceof ComponentFactory)) {
+ throw new AWTError("Unsupported toolkit: " + toolkit);
+ }
+ DragSourceContextPeer dscp = ((ComponentFactory) toolkit).
+ createDragSourceContextPeer(trigger);
+
if (dscp == null) {
throw new NullPointerException("DragSourceContextPeer");
}
@@ -623,8 +633,7 @@
/*
* fields
*/
-
- private transient DragSourceContextPeer peer;
+ private final transient DragSourceContextPeer peer;
/**
* The event which triggered the start of the drag.
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -49,6 +49,9 @@
import java.awt.peer.LightweightPeer;
import java.awt.dnd.peer.DropTargetPeer;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
/**
* The <code>DropTarget</code> is associated
@@ -204,19 +207,13 @@
if (component == c || component != null && component.equals(c))
return;
- Component old;
- ComponentPeer oldPeer = null;
+ final Component old = component;
- if ((old = component) != null) {
+ if (old != null) {
clearAutoscroll();
component = null;
-
- if (componentPeer != null) {
- oldPeer = componentPeer;
- removeNotify(componentPeer);
- }
-
+ removeNotify();
old.setDropTarget(null);
}
@@ -226,7 +223,7 @@
} catch (Exception e) { // undo the change
if (old != null) {
old.setDropTarget(this);
- addNotify(oldPeer);
+ addNotify();
}
}
}
@@ -494,24 +491,24 @@
* association of the ComponentPeer with the Component may result in
* a malfunction of the DnD system.
**********************************************************************
- *
- * @param peer The Peer of the Component we are associated with!
- *
*/
-
- @SuppressWarnings("deprecation")
- public void addNotify(ComponentPeer peer) {
- if (peer == componentPeer) return;
+ public void addNotify() {
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ ComponentPeer peer = acc.getPeer(component);
+ if (peer == null || peer == componentPeer) {
+ return;
+ }
componentPeer = peer;
+
for (Component c = component;
c != null && peer instanceof LightweightPeer; c = c.getParent()) {
- peer = c.getPeer();
+ peer = acc.getPeer(c);
}
if (peer instanceof DropTargetPeer) {
- nativePeer = peer;
+ nativePeer = (DropTargetPeer) peer;
((DropTargetPeer)peer).addDropTarget(this);
} else {
nativePeer = null;
@@ -530,15 +527,14 @@
* disassociation of the ComponentPeer from the Component may result in
* a malfunction of the DnD system.
**********************************************************************
- *
- * @param peer The Peer of the Component we are being disassociated from!
*/
- public void removeNotify(ComponentPeer peer) {
- if (nativePeer != null)
- ((DropTargetPeer)nativePeer).removeDropTarget(this);
-
- componentPeer = nativePeer = null;
+ public void removeNotify() {
+ if (nativePeer != null) {
+ nativePeer.removeDropTarget(this);
+ }
+ componentPeer = null;
+ nativePeer = null;
synchronized (this) {
if (isDraggingInside) {
@@ -834,7 +830,7 @@
/*
* That Component's "native" Peer
*/
- private transient ComponentPeer nativePeer;
+ private transient DropTargetPeer nativePeer;
/**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -39,6 +39,8 @@
import java.util.Arrays;
import java.util.List;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
/**
* A <code>DropTargetContext</code> is created
@@ -58,6 +60,19 @@
private static final long serialVersionUID = -634158968993743371L;
+ static {
+ AWTAccessor.setDropTargetContextAccessor(new DropTargetContextAccessor() {
+ @Override
+ public void reset(DropTargetContext dtc) {
+ dtc.reset();
+ }
+ @Override
+ public void setDropTargetContextPeer(DropTargetContext dtc,
+ DropTargetContextPeer dtcp) {
+ dtc.setDropTargetContextPeer(dtcp);
+ }
+ });
+ }
/**
* Construct a <code>DropTargetContext</code>
* given a specified <code>DropTarget</code>.
@@ -90,20 +105,9 @@
public Component getComponent() { return dropTarget.getComponent(); }
/**
- * Called when associated with the <code>DropTargetContextPeer</code>.
- *
- * @param dtcp the <code>DropTargetContextPeer</code>
- */
-
- public void addNotify(DropTargetContextPeer dtcp) {
- dropTargetContextPeer = dtcp;
- }
-
- /**
* Called when disassociated with the <code>DropTargetContextPeer</code>.
*/
-
- public void removeNotify() {
+ void reset() {
dropTargetContextPeer = null;
transferable = null;
}
@@ -282,12 +286,18 @@
*
* @return the platform peer
*/
-
DropTargetContextPeer getDropTargetContextPeer() {
return dropTargetContextPeer;
}
/**
+ * Sets the {@code DropTargetContextPeer}
+ */
+ void setDropTargetContextPeer(final DropTargetContextPeer dtcp) {
+ dropTargetContextPeer = dtcp;
+ }
+
+ /**
* Creates a TransferableProxy to proxy for the specified
* Transferable.
*
@@ -412,7 +422,7 @@
*
* @serial
*/
- private DropTarget dropTarget;
+ private final DropTarget dropTarget;
private transient DropTargetContextPeer dropTargetContextPeer;
--- a/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java Wed Jul 05 20:33:55 2017 +0200
@@ -101,6 +101,8 @@
static final int INIT_SIZE = 20;
static final int EXPAND_MAX = 500;
+ static final int EXPAND_MAX_COORDS = EXPAND_MAX * 2;
+ static final int EXPAND_MIN = 10; // ensure > 6 (cubics)
/**
* Constructs a new empty {@code Path2D} object.
@@ -141,6 +143,42 @@
abstract int rectCrossings(double rxmin, double rymin,
double rxmax, double rymax);
+ static byte[] expandPointTypes(byte[] oldPointTypes, int needed) {
+ final int oldSize = oldPointTypes.length;
+ final int newSizeMin = oldSize + needed;
+ if (newSizeMin < oldSize) {
+ // hard overflow failure - we can't even accommodate
+ // new items without overflowing
+ throw new ArrayIndexOutOfBoundsException(
+ "pointTypes exceeds maximum capacity !");
+ }
+ // growth algorithm computation
+ int grow = oldSize;
+ if (grow > EXPAND_MAX) {
+ grow = Math.max(EXPAND_MAX, oldSize >> 3); // 1/8th min
+ } else if (grow < EXPAND_MIN) {
+ grow = EXPAND_MIN;
+ }
+ assert grow > 0;
+
+ int newSize = oldSize + grow;
+ if (newSize < newSizeMin) {
+ // overflow in growth algorithm computation
+ newSize = Integer.MAX_VALUE;
+ }
+ while (true) {
+ try {
+ // try allocating the larger array
+ return Arrays.copyOf(oldPointTypes, newSize);
+ } catch (OutOfMemoryError oome) {
+ if (newSize == newSizeMin) {
+ throw oome;
+ }
+ }
+ newSize = newSizeMin + (newSize - newSizeMin) / 2;
+ }
+ }
+
/**
* The {@code Float} class defines a geometric path with
* coordinates stored in single precision floating point.
@@ -279,31 +317,53 @@
floatCoords[coordindex+1]);
}
+ @Override
void needRoom(boolean needMove, int newCoords) {
- if (needMove && numTypes == 0) {
+ if ((numTypes == 0) && needMove) {
throw new IllegalPathStateException("missing initial moveto "+
"in path definition");
}
- int size = pointTypes.length;
- if (numTypes >= size) {
- int grow = size;
- if (grow > EXPAND_MAX) {
- grow = EXPAND_MAX;
- } else if (grow == 0) {
- grow = 1;
- }
- pointTypes = Arrays.copyOf(pointTypes, size+grow);
+ if (numTypes >= pointTypes.length) {
+ pointTypes = expandPointTypes(pointTypes, 1);
+ }
+ if (numCoords > (floatCoords.length - newCoords)) {
+ floatCoords = expandCoords(floatCoords, newCoords);
+ }
+ }
+
+ static float[] expandCoords(float[] oldCoords, int needed) {
+ final int oldSize = oldCoords.length;
+ final int newSizeMin = oldSize + needed;
+ if (newSizeMin < oldSize) {
+ // hard overflow failure - we can't even accommodate
+ // new items without overflowing
+ throw new ArrayIndexOutOfBoundsException(
+ "coords exceeds maximum capacity !");
}
- size = floatCoords.length;
- if (numCoords + newCoords > size) {
- int grow = size;
- if (grow > EXPAND_MAX * 2) {
- grow = EXPAND_MAX * 2;
+ // growth algorithm computation
+ int grow = oldSize;
+ if (grow > EXPAND_MAX_COORDS) {
+ grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+ } else if (grow < EXPAND_MIN) {
+ grow = EXPAND_MIN;
+ }
+ assert grow > needed;
+
+ int newSize = oldSize + grow;
+ if (newSize < newSizeMin) {
+ // overflow in growth algorithm computation
+ newSize = Integer.MAX_VALUE;
+ }
+ while (true) {
+ try {
+ // try allocating the larger array
+ return Arrays.copyOf(oldCoords, newSize);
+ } catch (OutOfMemoryError oome) {
+ if (newSize == newSizeMin) {
+ throw oome;
+ }
}
- if (grow < newCoords) {
- grow = newCoords;
- }
- floatCoords = Arrays.copyOf(floatCoords, size+grow);
+ newSize = newSizeMin + (newSize - newSizeMin) / 2;
}
}
@@ -1126,31 +1186,53 @@
doubleCoords[coordindex+1]);
}
+ @Override
void needRoom(boolean needMove, int newCoords) {
- if (needMove && numTypes == 0) {
+ if ((numTypes == 0) && needMove) {
throw new IllegalPathStateException("missing initial moveto "+
"in path definition");
}
- int size = pointTypes.length;
- if (numTypes >= size) {
- int grow = size;
- if (grow > EXPAND_MAX) {
- grow = EXPAND_MAX;
- } else if (grow == 0) {
- grow = 1;
- }
- pointTypes = Arrays.copyOf(pointTypes, size+grow);
+ if (numTypes >= pointTypes.length) {
+ pointTypes = expandPointTypes(pointTypes, 1);
+ }
+ if (numCoords > (doubleCoords.length - newCoords)) {
+ doubleCoords = expandCoords(doubleCoords, newCoords);
+ }
+ }
+
+ static double[] expandCoords(double[] oldCoords, int needed) {
+ final int oldSize = oldCoords.length;
+ final int newSizeMin = oldSize + needed;
+ if (newSizeMin < oldSize) {
+ // hard overflow failure - we can't even accommodate
+ // new items without overflowing
+ throw new ArrayIndexOutOfBoundsException(
+ "coords exceeds maximum capacity !");
}
- size = doubleCoords.length;
- if (numCoords + newCoords > size) {
- int grow = size;
- if (grow > EXPAND_MAX * 2) {
- grow = EXPAND_MAX * 2;
+ // growth algorithm computation
+ int grow = oldSize;
+ if (grow > EXPAND_MAX_COORDS) {
+ grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+ } else if (grow < EXPAND_MIN) {
+ grow = EXPAND_MIN;
+ }
+ assert grow > needed;
+
+ int newSize = oldSize + grow;
+ if (newSize < newSizeMin) {
+ // overflow in growth algorithm computation
+ newSize = Integer.MAX_VALUE;
+ }
+ while (true) {
+ try {
+ // try allocating the larger array
+ return Arrays.copyOf(oldCoords, newSize);
+ } catch (OutOfMemoryError oome) {
+ if (newSize == newSizeMin) {
+ throw oome;
+ }
}
- if (grow < newCoords) {
- grow = newCoords;
- }
- doubleCoords = Arrays.copyOf(doubleCoords, size+grow);
+ newSize = newSizeMin + (newSize - newSizeMin) / 2;
}
}
--- a/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java Wed Jul 05 20:33:55 2017 +0200
@@ -431,7 +431,7 @@
/**
* Package-private constructor.
* Merge two property descriptors. Where they conflict, give the
- * second argument (y) priority over the first argumnnt (x).
+ * second argument (y) priority over the first argument (x).
*
* @param x The first (lower priority) PropertyDescriptor
* @param y The second (higher priority) PropertyDescriptor
@@ -439,39 +439,37 @@
IndexedPropertyDescriptor(PropertyDescriptor x, PropertyDescriptor y) {
super(x,y);
- if (x instanceof IndexedPropertyDescriptor) {
- IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor)x;
- try {
- Method xr = ix.getIndexedReadMethod();
- if (xr != null) {
- setIndexedReadMethod(xr);
- }
+ Method tr = null;
+ Method tw = null;
- Method xw = ix.getIndexedWriteMethod();
- if (xw != null) {
- setIndexedWriteMethod(xw);
- }
- } catch (IntrospectionException ex) {
- // Should not happen
- throw new AssertionError(ex);
+ if (x instanceof IndexedPropertyDescriptor) {
+ IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor) x;
+ tr = ix.getIndexedReadMethod();
+ tw = ix.getIndexedWriteMethod();
+ }
+ if (y instanceof IndexedPropertyDescriptor) {
+ IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor) y;
+ Method yr = iy.getIndexedReadMethod();
+ if (isAssignable(tr, yr)) {
+ tr = yr;
+ }
+
+ Method yw = iy.getIndexedWriteMethod();
+ if (isAssignable(tw, yw)) {
+ tw = yw;
}
}
- if (y instanceof IndexedPropertyDescriptor) {
- IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor)y;
- try {
- Method yr = iy.getIndexedReadMethod();
- if (yr != null && yr.getDeclaringClass() == getClass0()) {
- setIndexedReadMethod(yr);
- }
- Method yw = iy.getIndexedWriteMethod();
- if (yw != null && yw.getDeclaringClass() == getClass0()) {
- setIndexedWriteMethod(yw);
- }
- } catch (IntrospectionException ex) {
- // Should not happen
- throw new AssertionError(ex);
+ try {
+ if(tr != null) {
+ setIndexedReadMethod(tr);
}
+ if(tw != null) {
+ setIndexedWriteMethod(tw);
+ }
+ } catch(IntrospectionException ex) {
+ // Should not happen
+ throw new AssertionError(ex);
}
}
--- a/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java Wed Jul 05 20:33:55 2017 +0200
@@ -748,7 +748,7 @@
appendTo(sb, "writeMethod", this.writeMethodRef.get());
}
- private boolean isAssignable(Method m1, Method m2) {
+ boolean isAssignable(Method m1, Method m2) {
if (m1 == null) {
return true; // choose second method
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -53,7 +53,13 @@
@SuppressWarnings("serial") // Same-version serialization only
public abstract class AbstractCellEditor implements CellEditor, Serializable {
+ /**
+ * The list of listeners.
+ */
protected EventListenerList listenerList = new EventListenerList();
+ /**
+ * The change event.
+ */
transient protected ChangeEvent changeEvent = null;
// Force this to be implemented.
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -50,6 +50,9 @@
@SuppressWarnings("serial") // Same-version serialization only
public abstract class AbstractListModel<E> implements ListModel<E>, Serializable
{
+ /**
+ * The listener list.
+ */
protected EventListenerList listenerList = new EventListenerList();
--- a/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -69,7 +69,9 @@
@SuppressWarnings("serial")
public class ButtonGroup implements Serializable {
- // the list of buttons participating in this group
+ /**
+ * The list of buttons participating in this group.
+ */
protected Vector<AbstractButton> buttons = new Vector<AbstractButton>();
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -57,10 +57,19 @@
private final LayoutComparator comparator =
new LayoutComparator();
+ /**
+ * Constructs a {@code DefaultFocusManager}.
+ */
public DefaultFocusManager() {
setDefaultFocusTraversalPolicy(gluePolicy);
}
+ /**
+ * Returns the component after.
+ * @return the component after
+ * @param aContainer a container
+ * @param aComponent a component
+ */
public Component getComponentAfter(Container aContainer,
Component aComponent)
{
@@ -83,6 +92,12 @@
return null;
}
+ /**
+ * Returns the component before.
+ * @return the component before
+ * @param aContainer a container
+ * @param aComponent a component
+ */
public Component getComponentBefore(Container aContainer,
Component aComponent)
{
@@ -105,6 +120,11 @@
return null;
}
+ /**
+ * Returns the first component.
+ * @return the first component
+ * @param aContainer a container
+ */
public Component getFirstComponent(Container aContainer) {
Container root = (aContainer.isFocusCycleRoot())
? aContainer
@@ -125,6 +145,11 @@
return null;
}
+ /**
+ * Returns the last component.
+ * @return the last component
+ * @param aContainer a container
+ */
public Component getLastComponent(Container aContainer) {
Container root = (aContainer.isFocusCycleRoot())
? aContainer
@@ -145,6 +170,12 @@
return null;
}
+ /**
+ * Compares the components by their focus traversal cycle order.
+ * @param a the first component
+ * @param b the second component
+ * @return a comparison of the components by their focus traversal cycle order
+ */
public boolean compareTabOrder(Component a, Component b) {
return (comparator.compare(a, b) < 0);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -84,6 +84,9 @@
*/
private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
+ /**
+ * No focus border
+ */
protected static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -68,8 +68,14 @@
private int lastChangedIndex = MIN;
private BitSet value = new BitSet(32);
+ /**
+ * The list of listeners.
+ */
protected EventListenerList listenerList = new EventListenerList();
+ /**
+ * Whether or not the lead anchor notification is enabled.
+ */
protected boolean leadAnchorNotificationEnabled = true;
/** {@inheritDoc} */
@@ -139,6 +145,8 @@
/**
* Notifies listeners that we have ended a series of adjustments.
+ * @param isAdjusting true if this is the final change in a series of
+ * adjustments
*/
protected void fireValueChanged(boolean isAdjusting) {
if (lastChangedIndex == MIN) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -47,7 +47,8 @@
@SuppressWarnings("serial") // Same-version serialization only
public class DefaultSingleSelectionModel implements SingleSelectionModel,
Serializable {
- /* Only one ModelChangeEvent is needed per model instance since the
+ /**
+ * Only one ModelChangeEvent is needed per model instance since the
* event's only (read-only) state is the source property. The source
* of events generated here is always "this".
*/
@@ -57,12 +58,16 @@
private int index = -1;
- // implements javax.swing.SingleSelectionModel
+ /**
+ * {@inheritDoc}
+ */
public int getSelectedIndex() {
return index;
}
- // implements javax.swing.SingleSelectionModel
+ /**
+ * {@inheritDoc}
+ */
public void setSelectedIndex(int index) {
if (this.index != index) {
this.index = index;
@@ -70,12 +75,16 @@
}
}
- // implements javax.swing.SingleSelectionModel
+ /**
+ * {@inheritDoc}
+ */
public void clearSelection() {
setSelectedIndex(-1);
}
- // implements javax.swing.SingleSelectionModel
+ /**
+ * {@inheritDoc}
+ */
public boolean isSelected() {
boolean ret = false;
if (getSelectedIndex() != -1) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -145,6 +145,7 @@
* necessary state. Normally <b>f</b> will be a JInternalFrame.
*
* @param f the {@code JComponent} being resized
+ * @param direction the direction
*/
void beginResizingFrame(JComponent f, int direction);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -561,6 +561,9 @@
// Accessibility support
////////////////
+ /**
+ * The accessible context.
+ */
protected AccessibleContext accessibleContext = null;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java Wed Jul 05 20:33:55 2017 +0200
@@ -577,6 +577,8 @@
if (!found) {
return;
}
+
+ getEditor().setItem(anObject);
}
// Must toggle the state of this flag since this method
@@ -1319,16 +1321,12 @@
* do not call or override.
*/
public void actionPerformed(ActionEvent e) {
- ComboBoxEditor editor = getEditor();
- if ((editor != null) && (e != null) && (editor == e.getSource()
- || editor.getEditorComponent() == e.getSource())) {
- setPopupVisible(false);
- getModel().setSelectedItem(editor.getItem());
- String oldCommand = getActionCommand();
- setActionCommand("comboBoxEdited");
- fireActionEvent();
- setActionCommand(oldCommand);
- }
+ setPopupVisible(false);
+ getModel().setSelectedItem(getEditor().getItem());
+ String oldCommand = getActionCommand();
+ setActionCommand("comboBoxEdited");
+ fireActionEvent();
+ setActionCommand(oldCommand);
}
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java Wed Jul 05 20:33:55 2017 +0200
@@ -57,6 +57,7 @@
import static javax.swing.ClientPropertyKey.*;
import javax.accessibility.*;
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
import sun.swing.SwingUtilities2;
import sun.swing.UIClientPropertyKey;
@@ -4218,9 +4219,10 @@
* @param c the {@code Component} to be checked
* @return true if this component is lightweight
*/
- @SuppressWarnings("deprecation")
public static boolean isLightweightComponent(Component c) {
- return c.getPeer() instanceof LightweightPeer;
+ // TODO we cannot call c.isLightweight() because it is incorrectly
+ // overriden in DelegateContainer on osx.
+ return AWTAccessor.getComponentAccessor().isLightweight(c);
}
@@ -5033,7 +5035,6 @@
this.paintingChild = paintingChild;
}
- @SuppressWarnings("deprecation")
void _paintImmediately(int x, int y, int w, int h) {
Graphics g;
Container c;
@@ -5159,7 +5160,7 @@
}
// If the clip width or height is negative, don't bother painting
- if(c == null || c.getPeer() == null ||
+ if(c == null || !c.isDisplayable() ||
paintImmediatelyClip.width <= 0 ||
paintImmediatelyClip.height <= 0) {
recycleRectangle(paintImmediatelyClip);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -726,6 +726,8 @@
* URL's can be properly resolved.
*
* @param page the URL of the page
+ * @return a stream for the URL which is about to be loaded
+ * @throws IOException if an I/O problem occurs
*/
protected InputStream getStream(URL page) throws IOException {
final URLConnection conn = page.openConnection();
@@ -1712,10 +1714,17 @@
private AccessibleContext accessibleContext;
+ /**
+ * Returns the accessible text.
+ * @return the accessible text
+ */
public AccessibleText getAccessibleText() {
return new JEditorPaneAccessibleHypertextSupport();
}
+ /**
+ * Constructs an {@code AccessibleJEditorPaneHTML}.
+ */
protected AccessibleJEditorPaneHTML () {
HTMLEditorKit kit = (HTMLEditorKit)JEditorPane.this.getEditorKit();
accessibleContext = kit.getAccessibleContext();
@@ -1791,9 +1800,16 @@
protected class JEditorPaneAccessibleHypertextSupport
extends AccessibleJEditorPane implements AccessibleHypertext {
+ /**
+ * An HTML link.
+ */
public class HTMLLink extends AccessibleHyperlink {
Element element;
+ /**
+ * Constructs a {@code HTMLLink}.
+ * @param e the element
+ */
public HTMLLink(Element e) {
element = e;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -38,7 +38,6 @@
import java.io.ObjectOutputStream;
import java.io.IOException;
-import java.lang.StringBuilder;
import java.beans.PropertyChangeListener;
import sun.awt.AppContext;
import sun.swing.SwingUtilities2;
@@ -1654,7 +1653,7 @@
* <dt><code>DO_NOTHING_ON_CLOSE</code>
* <dd> Do nothing.
* This requires the program to handle the operation
- * in the <code>windowClosing</code> method
+ * in the <code>internalFrameClosing</code> method
* of a registered <code>InternalFrameListener</code> object.
* <dt><code>HIDE_ON_CLOSE</code>
* <dd> Automatically make the internal frame invisible.
--- a/jdk/src/java.desktop/share/classes/javax/swing/JList.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JList.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -2890,6 +2890,9 @@
int leadSelectionIndex;
+ /**
+ * Constructs an {@code AccessibleJList}.
+ */
public AccessibleJList() {
super();
JList.this.addPropertyChangeListener(this);
@@ -3193,6 +3196,11 @@
private ListModel<E> listModel;
private ListCellRenderer<? super E> cellRenderer = null;
+ /**
+ * Constructs an {@code AccessibleJListChild}.
+ * @param parent the parent
+ * @param indexInParent the index in the parent
+ */
public AccessibleJListChild(JList<E> parent, int indexInParent) {
this.parent = parent;
this.setAccessibleParent(parent);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -6803,12 +6803,25 @@
protected class AccessibleJTableModelChange
implements AccessibleTableModelChange {
+ /** The type */
protected int type;
+ /** The first row */
protected int firstRow;
+ /** The last row */
protected int lastRow;
+ /** The first column */
protected int firstColumn;
+ /** The last column */
protected int lastColumn;
+ /**
+ * Constructs an {@code AccessibleJTableModelChange}.
+ * @param type the type
+ * @param firstRow the first row
+ * @param lastRow the last row
+ * @param firstColumn the first column
+ * @param lastColumn the last column
+ */
protected AccessibleJTableModelChange(int type, int firstRow,
int lastRow, int firstColumn,
int lastColumn) {
@@ -6819,22 +6832,42 @@
this.lastColumn = lastColumn;
}
+ /**
+ * Returns the type.
+ * @return the type
+ */
public int getType() {
return type;
}
+ /**
+ * Returns the first row.
+ * @return the first row
+ */
public int getFirstRow() {
return firstRow;
}
+ /**
+ * Returns the last row.
+ * @return the last row
+ */
public int getLastRow() {
return lastRow;
}
+ /**
+ * Returns the first column.
+ * @return the first column
+ */
public int getFirstColumn() {
return firstColumn;
}
+ /**
+ * Returns the last column.
+ * @return the last column
+ */
public int getLastColumn() {
return lastColumn;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -37,6 +37,8 @@
import java.io.Serializable;
+import sun.awt.AWTAccessor;
+
/**
* The "viewport" or "porthole" through which you see the underlying
* information. When you scroll, what moves is the viewport. It is like
@@ -380,7 +382,6 @@
* @param contentRect the <code>Rectangle</code> to display
* @see JComponent#isValidateRoot
* @see java.awt.Component#isValid
- * @see java.awt.Component#getPeer
*/
public void scrollRectToVisible(Rectangle contentRect) {
Component view = getView();
@@ -1448,7 +1449,6 @@
* Returns true if the component needs to be completely repainted after
* a blit and a paint is received.
*/
- @SuppressWarnings("deprecation")
private boolean needsRepaintAfterBlit() {
// Find the first heavy weight ancestor. isObscured and
// canDetermineObscurity are only appropriate for heavy weights.
@@ -1459,7 +1459,8 @@
}
if (heavyParent != null) {
- ComponentPeer peer = heavyParent.getPeer();
+ ComponentPeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(heavyParent);
if (peer != null && peer.canDetermineObscurity() &&
!peer.isObscured()) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -401,7 +401,6 @@
*
* @see JComponent#repaint
*/
- @SuppressWarnings("deprecation")
private void addDirtyRegion0(Container c, int x, int y, int w, int h) {
/* Special cases we don't have to bother with.
*/
@@ -432,7 +431,7 @@
// it could lead to the possibility of getting locks out
// of order and deadlocking.
for (Container p = c; p != null; p = p.getParent()) {
- if (!p.isVisible() || (p.getPeer() == null)) {
+ if (!p.isVisible() || !p.isDisplayable()) {
return;
}
if ((p instanceof Window) || (p instanceof Applet)) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java Wed Jul 05 20:33:55 2017 +0200
@@ -570,7 +570,10 @@
} else if (comp instanceof Container && comp != aContainer) {
Container cont = (Container)comp;
if (cont.isFocusTraversalPolicyProvider()) {
- return cont.getFocusTraversalPolicy().getLastComponent(cont);
+ Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+ if (retComp != null) {
+ return retComp;
+ }
}
}
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -80,8 +80,13 @@
private KeyStroke postTip;
private KeyStroke hideTip;
- // PENDING(ges)
+ /**
+ * Lightweight popup enabled.
+ */
protected boolean lightWeightPopupEnabled = true;
+ /**
+ * Heavyweight popup enabled.
+ */
protected boolean heavyWeightPopupEnabled = false;
ToolTipManager() {
@@ -657,7 +662,13 @@
}
}
+ /**
+ * Inside timer action.
+ */
protected class insideTimerAction implements ActionListener {
+ /**
+ * {@inheritDoc}
+ */
public void actionPerformed(ActionEvent e) {
if(insideComponent != null && insideComponent.isShowing()) {
// Lazy lookup
@@ -681,13 +692,25 @@
}
}
+ /**
+ * Outside timer action.
+ */
protected class outsideTimerAction implements ActionListener {
+ /**
+ * {@inheritDoc}
+ */
public void actionPerformed(ActionEvent e) {
showImmediately = false;
}
}
+ /**
+ * Still inside timer action.
+ */
protected class stillInsideTimerAction implements ActionListener {
+ /**
+ * {@inheritDoc}
+ */
public void actionPerformed(ActionEvent e) {
hideTipWindow();
enterTimer.stop();
--- a/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -1191,6 +1191,10 @@
/** Key bindings are registered under. */
private Object[] bindings;
+ /**
+ * Constructs a {@code LazyInputMap}.
+ * @param bindings the bindings
+ */
public LazyInputMap(Object[] bindings) {
this.bindings = bindings;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -52,10 +52,25 @@
/** Lowered bevel type. */
public static final int LOWERED = 1;
+ /**
+ * The bevel type.
+ */
protected int bevelType;
+ /**
+ * The color to use for the bevel outer highlight.
+ */
protected Color highlightOuter;
+ /**
+ * The color to use for the bevel inner highlight.
+ */
protected Color highlightInner;
+ /**
+ * The color to use for the bevel inner shadow.
+ */
protected Color shadowInner;
+ /**
+ * the color to use for the bevel outer shadow
+ */
protected Color shadowOuter;
/**
@@ -262,6 +277,17 @@
*/
public boolean isBorderOpaque() { return true; }
+ /**
+ * Paints a raised bevel for the specified component with the specified
+ * position and size.
+ *
+ * @param c the component for which the raised bevel is being painted
+ * @param g the paint graphics
+ * @param x the x position of the raised bevel
+ * @param y the y position of the raised bevel
+ * @param width the width of the raised bevel
+ * @param height the height of the raised bevel
+ */
protected void paintRaisedBevel(Component c, Graphics g, int x, int y,
int width, int height) {
Color oldColor = g.getColor();
@@ -291,6 +317,17 @@
}
+ /**
+ * Paints a lowered bevel for the specified component with the specified
+ * position and size.
+ *
+ * @param c the component for which the lowered bevel is being painted
+ * @param g the paint graphics
+ * @param x the x position of the lowered bevel
+ * @param y the y position of the lowered bevel
+ * @param width the width of the lowered bevel
+ * @param height the height of the lowered bevel
+ */
protected void paintLoweredBevel(Component c, Graphics g, int x, int y,
int width, int height) {
Color oldColor = g.getColor();
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -56,7 +56,13 @@
*/
@SuppressWarnings("serial")
public class CompoundBorder extends AbstractBorder {
+ /**
+ * The outside border.
+ */
protected Border outsideBorder;
+ /**
+ * The inside border.
+ */
protected Border insideBorder;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -49,7 +49,22 @@
@SuppressWarnings("serial")
public class EmptyBorder extends AbstractBorder implements Serializable
{
- protected int left, right, top, bottom;
+ /**
+ * The left inset of the border.
+ */
+ protected int left;
+ /**
+ * The right inset of the border.
+ */
+ protected int right;
+ /**
+ * The top inset of the border.
+ */
+ protected int top;
+ /**
+ * The bottom inset of the border.
+ */
+ protected int bottom;
/**
* Creates an empty border with the specified insets.
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -59,8 +59,17 @@
/** Lowered etched type. */
public static final int LOWERED = 1;
+ /**
+ * The type of etch to be drawn by the border.
+ */
protected int etchType;
+ /**
+ * The color to use for the etched highlight.
+ */
protected Color highlight;
+ /**
+ * The color to use for the etched shadow.
+ */
protected Color shadow;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -56,8 +56,17 @@
private static Border blackLine;
private static Border grayLine;
+ /**
+ * Thickness of the border.
+ */
protected int thickness;
+ /**
+ * Color of the border.
+ */
protected Color lineColor;
+ /**
+ * Whether or not the border has rounded corners.
+ */
protected boolean roundedCorners;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -49,7 +49,13 @@
@SuppressWarnings("serial")
public class MatteBorder extends EmptyBorder
{
+ /**
+ * The color rendered for the border.
+ */
protected Color color;
+ /**
+ * The icon to be used for tiling the border.
+ */
protected Icon tileIcon;
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -70,11 +70,29 @@
@SuppressWarnings("serial")
public class TitledBorder extends AbstractBorder
{
+ /**
+ * The title the border should display.
+ */
protected String title;
+ /**
+ * The border.
+ */
protected Border border;
+ /**
+ * The position for the title.
+ */
protected int titlePosition;
+ /**
+ * The justification for the title.
+ */
protected int titleJustification;
+ /**
+ * The font for rendering the title.
+ */
protected Font titleFont;
+ /**
+ * The color of the title.
+ */
protected Color titleColor;
private final JLabel label;
@@ -117,13 +135,19 @@
*/
static public final int TRAILING = 5;
- // Space between the border and the component's edge
+ /**
+ * Space between the border and the component's edge
+ */
static protected final int EDGE_SPACING = 2;
- // Space between the border and text
+ /**
+ * Space between the border and text
+ */
static protected final int TEXT_SPACING = 2;
- // Horizontal inset of text that is left or right justified
+ /**
+ * Horizontal inset of text that is left or right justified
+ */
static protected final int TEXT_INSET_H = 5;
/**
@@ -676,6 +700,11 @@
return justification;
}
+ /**
+ * Returns default font of the titled border.
+ * @return default font of the titled border
+ * @param c the component
+ */
protected Font getFont(Component c) {
Font font = getTitleFont();
if (font != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -37,6 +37,9 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
public class ActionMapUIResource extends ActionMap implements UIResource {
+ /**
+ * Constructs an {@code ActionMapUIResource}.
+ */
public ActionMapUIResource() {
}
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -38,7 +38,7 @@
import javax.swing.plaf.UIResource;
-/*
+/**
* A Border wrapper class which implements UIResource. UI
* classes which set border properties should use this class
* to wrap any borders specified as defaults.
@@ -67,6 +67,10 @@
static Border raisedBevel;
static Border blackLine;
+ /**
+ * Returns a etched border UI resource.
+ * @return a etched border UI resource
+ */
public static Border getEtchedBorderUIResource() {
if (etched == null) {
etched = new EtchedBorderUIResource();
@@ -74,6 +78,10 @@
return etched;
}
+ /**
+ * Returns a lowered bevel border UI resource.
+ * @return a lowered bevel border UI resource
+ */
public static Border getLoweredBevelBorderUIResource() {
if (loweredBevel == null) {
loweredBevel = new BevelBorderUIResource(BevelBorder.LOWERED);
@@ -81,6 +89,10 @@
return loweredBevel;
}
+ /**
+ * Returns a raised bevel border UI resource.
+ * @return a raised bevel border UI resource
+ */
public static Border getRaisedBevelBorderUIResource() {
if (raisedBevel == null) {
raisedBevel = new BevelBorderUIResource(BevelBorder.RAISED);
@@ -88,6 +100,10 @@
return raisedBevel;
}
+ /**
+ * Returns a black line border UI resource.
+ * @return a black line border UI resource
+ */
public static Border getBlackLineBorderUIResource() {
if (blackLine == null) {
blackLine = new LineBorderUIResource(Color.black);
@@ -122,7 +138,15 @@
return delegate.isBorderOpaque();
}
+ /**
+ * A compound border UI resource.
+ */
public static class CompoundBorderUIResource extends CompoundBorder implements UIResource {
+ /**
+ * Constructs a {@code CompoundBorderUIResource}.
+ * @param outsideBorder the outside border
+ * @param insideBorder the inside border
+ */
@ConstructorProperties({"outsideBorder", "insideBorder"})
public CompoundBorderUIResource(Border outsideBorder, Border insideBorder) {
super(outsideBorder, insideBorder);
@@ -130,23 +154,49 @@
}
+ /**
+ * An empty border UI resource.
+ */
public static class EmptyBorderUIResource extends EmptyBorder implements UIResource {
+ /**
+ * Constructs a {@code EmptyBorderUIResource}.
+ * @param top the top inset of the border
+ * @param left the left inset of the border
+ * @param bottom the bottom inset of the border
+ * @param right the right inset of the border
+ */
public EmptyBorderUIResource(int top, int left, int bottom, int right) {
super(top, left, bottom, right);
}
+ /**
+ * Constructs a {@code EmptyBorderUIResource}.
+ * @param insets the insets of the border
+ */
@ConstructorProperties({"borderInsets"})
public EmptyBorderUIResource(Insets insets) {
super(insets);
}
}
+ /**
+ * A line border UI resource.
+ */
public static class LineBorderUIResource extends LineBorder implements UIResource {
+ /**
+ * Constructs a {@code LineBorderUIResource}.
+ * @param color the color for the border
+ */
public LineBorderUIResource(Color color) {
super(color);
}
+ /**
+ * Constructs a {@code LineBorderUIResource}.
+ * @param color the color for the border
+ * @param thickness the thickness of the border
+ */
@ConstructorProperties({"lineColor", "thickness"})
public LineBorderUIResource(Color color, int thickness) {
super(color, thickness);
@@ -154,16 +204,37 @@
}
+ /**
+ * A bevel border UI resource.
+ */
public static class BevelBorderUIResource extends BevelBorder implements UIResource {
+ /**
+ * Constructs a {@code BevelBorderUIResource}.
+ * @param bevelType the type of bevel for the border
+ */
public BevelBorderUIResource(int bevelType) {
super(bevelType);
}
+ /**
+ * Constructs a {@code BevelBorderUIResource}.
+ * @param bevelType the type of bevel for the border
+ * @param highlight the color to use for the bevel highlight
+ * @param shadow the color to use for the bevel shadow
+ */
public BevelBorderUIResource(int bevelType, Color highlight, Color shadow) {
super(bevelType, highlight, shadow);
}
+ /**
+ * Constructs a {@code BevelBorderUIResource}.
+ * @param bevelType the type of bevel for the border
+ * @param highlightOuter the color to use for the bevel outer highlight
+ * @param highlightInner the color to use for the bevel inner highlight
+ * @param shadowOuter the color to use for the bevel outer shadow
+ * @param shadowInner the color to use for the bevel inner shadow
+ */
@ConstructorProperties({"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"})
public BevelBorderUIResource(int bevelType,
Color highlightOuter, Color highlightInner,
@@ -172,57 +243,124 @@
}
}
+ /**
+ * An etched border UI resource.
+ */
public static class EtchedBorderUIResource extends EtchedBorder implements UIResource {
+ /**
+ * Constructs an {@code EtchedBorderUIResource}.
+ */
public EtchedBorderUIResource() {
super();
}
+ /**
+ * Constructs an {@code EtchedBorderUIResource}.
+ * @param etchType the type of etch to be drawn by the border
+ */
public EtchedBorderUIResource(int etchType) {
super(etchType);
}
+ /**
+ * Constructs an {@code EtchedBorderUIResource}.
+ * @param highlight the color to use for the etched highlight
+ * @param shadow the color to use for the etched shadow
+ */
public EtchedBorderUIResource(Color highlight, Color shadow) {
super(highlight, shadow);
}
+ /**
+ * Constructs an {@code EtchedBorderUIResource}.
+ * @param etchType the type of etch to be drawn by the border
+ * @param highlight the color to use for the etched highlight
+ * @param shadow the color to use for the etched shadow
+ */
@ConstructorProperties({"etchType", "highlightColor", "shadowColor"})
public EtchedBorderUIResource(int etchType, Color highlight, Color shadow) {
super(etchType, highlight, shadow);
}
}
+ /**
+ * A matte border UI resource.
+ */
public static class MatteBorderUIResource extends MatteBorder implements UIResource {
+ /**
+ * Constructs a {@code MatteBorderUIResource}.
+ * @param top the top inset of the border
+ * @param left the left inset of the border
+ * @param bottom the bottom inset of the border
+ * @param right the right inset of the border
+ * @param color the color rendered for the border
+ */
public MatteBorderUIResource(int top, int left, int bottom, int right,
Color color) {
super(top, left, bottom, right, color);
}
+ /**
+ * Constructs a {@code MatteBorderUIResource}.
+ * @param top the top inset of the border
+ * @param left the left inset of the border
+ * @param bottom the bottom inset of the border
+ * @param right the right inset of the border
+ * @param tileIcon the icon to be used for tiling the border
+ */
public MatteBorderUIResource(int top, int left, int bottom, int right,
Icon tileIcon) {
super(top, left, bottom, right, tileIcon);
}
+ /**
+ * Constructs a {@code MatteBorderUIResource}.
+ * @param tileIcon the icon to be used for tiling the border
+ */
public MatteBorderUIResource(Icon tileIcon) {
super(tileIcon);
}
}
+ /**
+ * A titled border UI resource.
+ */
public static class TitledBorderUIResource extends TitledBorder implements UIResource {
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param title the title the border should display
+ */
public TitledBorderUIResource(String title) {
super(title);
}
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param border the border
+ */
public TitledBorderUIResource(Border border) {
super(border);
}
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param border the border
+ * @param title the title the border should display
+ */
public TitledBorderUIResource(Border border, String title) {
super(border, title);
}
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param border the border
+ * @param title the title the border should display
+ * @param titleJustification the justification fro the title
+ * @param titlePosition the position for the title
+ */
public TitledBorderUIResource(Border border,
String title,
int titleJustification,
@@ -230,6 +368,14 @@
super(border, title, titleJustification, titlePosition);
}
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param border the border
+ * @param title the title the border should display
+ * @param titleJustification the justification fro the title
+ * @param titlePosition the position for the title
+ * @param titleFont the font for rendering the title
+ */
public TitledBorderUIResource(Border border,
String title,
int titleJustification,
@@ -238,6 +384,15 @@
super(border, title, titleJustification, titlePosition, titleFont);
}
+ /**
+ * Constructs a {@code TitledBorderUIResource}.
+ * @param border the border
+ * @param title the title the border should display
+ * @param titleJustification the justification fro the title
+ * @param titlePosition the position for the title
+ * @param titleFont the font for rendering the title
+ * @param titleColor the color of the title
+ */
@ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
public TitledBorderUIResource(Border border,
String title,
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -28,7 +28,7 @@
import java.awt.Color;
import java.beans.ConstructorProperties;
-/*
+/**
* A subclass of Color that implements UIResource. UI
* classes that create colors should use this class.
* <p>
@@ -48,19 +48,39 @@
@SuppressWarnings("serial") // Same-version serialization only
public class ColorUIResource extends Color implements UIResource
{
+ /**
+ * Constructs a {@code ColorUIResource}.
+ * @param r the red component
+ * @param g the green component
+ * @param b the blue component
+ */
@ConstructorProperties({"red", "green", "blue"})
public ColorUIResource(int r, int g, int b) {
super(r, g, b);
}
+ /**
+ * Constructs a {@code ColorUIResource}.
+ * @param rgb the combined RGB components
+ */
public ColorUIResource(int rgb) {
super(rgb);
}
+ /**
+ * Constructs a {@code ColorUIResource}.
+ * @param r the red component
+ * @param g the green component
+ * @param b the blue component
+ */
public ColorUIResource(float r, float g, float b) {
super(r, g, b);
}
+ /**
+ * Constructs a {@code ColorUIResource}.
+ * @param c the color
+ */
public ColorUIResource(Color c) {
super(c.getRGB(), (c.getRGB() & 0xFF000000) != 0xFF000000);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -38,6 +38,10 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
public class ComponentInputMapUIResource extends ComponentInputMap implements UIResource {
+ /**
+ * Constructs a {@code ComponentInputMapUIResource}.
+ * @param component a non-null JComponent
+ */
public ComponentInputMapUIResource(JComponent component) {
super(component);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -29,7 +29,7 @@
import javax.swing.plaf.UIResource;
-/*
+/**
* A subclass of <code>Dimension</code> that implements
* <code>UIResource</code>. UI classes that use
* <code>Dimension</code> values for default properties
@@ -51,6 +51,11 @@
@SuppressWarnings("serial") // Same-version serialization only
public class DimensionUIResource extends Dimension implements UIResource
{
+ /**
+ * Constructs a {@code DimensionUIResource}.
+ * @param width the width
+ * @param height the height
+ */
public DimensionUIResource(int width, int height) {
super(width, height);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -38,13 +38,42 @@
public abstract class FileChooserUI extends ComponentUI
{
+ /**
+ * Returns an accept-all file filter.
+ * @param fc the file chooser
+ * @return an accept-all file filter
+ */
public abstract FileFilter getAcceptAllFileFilter(JFileChooser fc);
+ /**
+ * Returns a file view.
+ * @param fc the file chooser
+ * @return a file view
+ */
public abstract FileView getFileView(JFileChooser fc);
+ /**
+ * Returns approve button text.
+ * @param fc the file chooser
+ * @return approve button text.
+ */
public abstract String getApproveButtonText(JFileChooser fc);
+ /**
+ * Returns the dialog title.
+ * @param fc the file chooser
+ * @return the dialog title.
+ */
public abstract String getDialogTitle(JFileChooser fc);
+ /**
+ * Rescan the current directory.
+ * @param fc the file chooser
+ */
public abstract void rescanCurrentDirectory(JFileChooser fc);
+ /**
+ * Ensure the file in question is visible.
+ * @param fc the file chooser
+ * @param f the file
+ */
public abstract void ensureFileIsVisible(JFileChooser fc, File f);
/**
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -50,10 +50,20 @@
@SuppressWarnings("serial") // Same-version serialization only
public class FontUIResource extends Font implements UIResource
{
+ /**
+ * Constructs a {@code FontUIResource}.
+ * @param name the font name
+ * @param style the style constant for the font
+ * @param size the point size of the font
+ */
public FontUIResource(String name, int style, int size) {
super(name, style, size);
}
+ /**
+ * Constructs a {@code FontUIResource}.
+ * @param font the font
+ */
public FontUIResource(Font font) {
super(font);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -37,6 +37,9 @@
*/
@SuppressWarnings("serial") // Same-version serialization only
public class InputMapUIResource extends InputMap implements UIResource {
+ /**
+ * Constructs an {@code InputMapUIResource}.
+ */
public InputMapUIResource() {
}
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -29,7 +29,7 @@
import javax.swing.plaf.UIResource;
-/*
+/**
* A subclass of Insets that implements UIResource. UI
* classes that use Insets values for default properties
* should use this class.
@@ -50,6 +50,13 @@
@SuppressWarnings("serial") // Same-version serialization only
public class InsetsUIResource extends Insets implements UIResource
{
+ /**
+ * Constructs an {@code InsetsUIResource}.
+ * @param top the inset from the top
+ * @param left the inset from the left
+ * @param bottom the inset from the bottom
+ * @param right the inset from the right
+ */
public InsetsUIResource(int top, int left, int bottom, int right) {
super(top, left, bottom, right);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. 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
@@ -730,6 +730,15 @@
* This method is to be overridden instead of {@code JLayer.imageUpdate}.
* <p>
* <b>Note:</b> This method is usually called <b>not</b> on the Event Dispatching Thread.
+ *
+ * @param img the image being observed
+ * @param infoflags see imageUpdate for information
+ * @param x the x coordinate
+ * @param y the y coordinate
+ * @param w the width
+ * @param h the height
+ * @param l a {@code JLayer} component
+ * @return false if the infoflags indicate that the image is completely loaded; true otherwise
*/
public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h, JLayer<? extends V> l) {
return l.imageUpdate(img, infoflags, x, y, w, h);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -35,7 +35,25 @@
* @author Amy Fowler
*/
public abstract class TabbedPaneUI extends ComponentUI {
+ /**
+ * Returns the tab for the coordinate.
+ * @param pane the pane
+ * @param x the x coordinate
+ * @param y the y coordinate
+ * @return the tab for the coordinate
+ */
public abstract int tabForCoordinate(JTabbedPane pane, int x, int y);
+ /**
+ * Returns the rectangle for the tab bounds.
+ * @param pane the pane
+ * @param index the index
+ * @return the rectangle for the tab bounds
+ */
public abstract Rectangle getTabBounds(JTabbedPane pane, int index);
+ /**
+ * Returns the tab run count.
+ * @param pane the pane
+ * @return the tab run count
+ */
public abstract int getTabRunCount(JTabbedPane pane);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -992,7 +992,7 @@
getDisplaySize();
if (sameBaseline) {
Insets insets = c.getInsets();
- height = height - insets.top - insets.bottom;
+ height = Math.max(height - insets.top - insets.bottom, 0);
if (!comboBox.isEditable()) {
ListCellRenderer<Object> renderer = comboBox.getRenderer();
if (renderer == null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -222,12 +222,14 @@
/**
* Obsolete - not used.
+ * @param e list data event
*/
public void intervalAdded(ListDataEvent e) {
}
/**
* Obsolete - not used.
+ * @param e list data event
*/
public void intervalRemoved(ListDataEvent e) {
}
@@ -241,7 +243,12 @@
ShellFolder.sort(v);
}
- // Obsolete - not used
+ /**
+ * Obsolete - not used
+ * @return a comparison of the file names
+ * @param a a file
+ * @param b another file
+ */
protected boolean lt(File a, File b) {
// First ignore case when comparing
int diff = a.getName().toLowerCase().compareTo(b.getName().toLowerCase());
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -50,23 +50,39 @@
public class BasicFileChooserUI extends FileChooserUI {
/* FileView icons */
+ /** Directory icon */
protected Icon directoryIcon = null;
+ /** File icon */
protected Icon fileIcon = null;
+ /** Computer icon */
protected Icon computerIcon = null;
+ /** Hard drive icon */
protected Icon hardDriveIcon = null;
+ /** Floppy drive icon */
protected Icon floppyDriveIcon = null;
+ /** New folder icon */
protected Icon newFolderIcon = null;
+ /** Up folder icon */
protected Icon upFolderIcon = null;
+ /** Home folder icon */
protected Icon homeFolderIcon = null;
+ /** List view icon */
protected Icon listViewIcon = null;
+ /** Details view icon */
protected Icon detailsViewIcon = null;
+ /** View menu icon */
protected Icon viewMenuIcon = null;
+ /** Save button mnemonic */
protected int saveButtonMnemonic = 0;
+ /** Open button mnemonic */
protected int openButtonMnemonic = 0;
+ /** Cancel button mnemonic */
protected int cancelButtonMnemonic = 0;
+ /** Update button mnemonic */
protected int updateButtonMnemonic = 0;
+ /** Help button mnemonic */
protected int helpButtonMnemonic = 0;
/**
@@ -77,10 +93,15 @@
*/
protected int directoryOpenButtonMnemonic = 0;
+ /** Save button text */
protected String saveButtonText = null;
+ /** Open button text */
protected String openButtonText = null;
+ /** Cancel button text */
protected String cancelButtonText = null;
+ /** Update button text */
protected String updateButtonText = null;
+ /** Help button text */
protected String helpButtonText = null;
/**
@@ -91,13 +112,20 @@
*/
protected String directoryOpenButtonText = null;
+ /** Open dialog title text */
private String openDialogTitleText = null;
+ /** Save dialog title text */
private String saveDialogTitleText = null;
+ /** Save button tool tip text */
protected String saveButtonToolTipText = null;
+ /** Open button tool tip text */
protected String openButtonToolTipText = null;
+ /** Cancel button tool tip text */
protected String cancelButtonToolTipText = null;
+ /** Update button tool tip text */
protected String updateButtonToolTipText = null;
+ /** Help button tool tip text */
protected String helpButtonToolTipText = null;
/**
@@ -158,9 +186,17 @@
return new BasicFileChooserUI((JFileChooser) c);
}
+ /**
+ * Constructs a {@code BasicFileChooserUI}.
+ * @param b file chooser
+ */
public BasicFileChooserUI(JFileChooser b) {
}
+ /**
+ * Installs the UI.
+ * @param c the component
+ */
public void installUI(JComponent c) {
accessoryPanel = new JPanel(new BorderLayout());
filechooser = (JFileChooser) c;
@@ -175,6 +211,10 @@
filechooser.applyComponentOrientation(filechooser.getComponentOrientation());
}
+ /**
+ * Uninstalls the UI.
+ * @param c the component
+ */
public void uninstallUI(JComponent c) {
uninstallListeners(filechooser);
uninstallComponents(filechooser);
@@ -190,12 +230,24 @@
handler = null;
}
+ /**
+ * Installs the components.
+ * @param fc the file chooser
+ */
public void installComponents(JFileChooser fc) {
}
+ /**
+ * Uninstalls the components.
+ * @param fc the file chooser
+ */
public void uninstallComponents(JFileChooser fc) {
}
+ /**
+ * Installs the listeners.
+ * @param fc the file chooser
+ */
protected void installListeners(JFileChooser fc) {
propertyChangeListener = createPropertyChangeListener(fc);
if(propertyChangeListener != null) {
@@ -241,6 +293,10 @@
}
+ /**
+ * Uninstalls the listeners.
+ * @param fc the file chooser
+ */
protected void uninstallListeners(JFileChooser fc) {
if(propertyChangeListener != null) {
fc.removePropertyChangeListener(propertyChangeListener);
@@ -252,6 +308,10 @@
}
+ /**
+ * Installs the defaults.
+ * @param fc the file chooser
+ */
protected void installDefaults(JFileChooser fc) {
installIcons(fc);
installStrings(fc);
@@ -264,6 +324,10 @@
LookAndFeel.installProperty(fc, "opaque", Boolean.FALSE);
}
+ /**
+ * Installs the icons.
+ * @param fc the file chooser
+ */
protected void installIcons(JFileChooser fc) {
directoryIcon = UIManager.getIcon("FileView.directoryIcon");
fileIcon = UIManager.getIcon("FileView.fileIcon");
@@ -279,6 +343,10 @@
viewMenuIcon = UIManager.getIcon("FileChooser.viewMenuIcon");
}
+ /**
+ * Installs the strings.
+ * @param fc the file chooser
+ */
protected void installStrings(JFileChooser fc) {
Locale l = fc.getLocale();
@@ -315,6 +383,10 @@
directoryOpenButtonToolTipText = UIManager.getString("FileChooser.directoryOpenButtonToolTipText",l);
}
+ /**
+ * Uninstalls the defaults.
+ * @param fc the file chooser
+ */
protected void uninstallDefaults(JFileChooser fc) {
uninstallIcons(fc);
uninstallStrings(fc);
@@ -323,6 +395,10 @@
}
}
+ /**
+ * Uninstalls the icons.
+ * @param fc the file chooser
+ */
protected void uninstallIcons(JFileChooser fc) {
directoryIcon = null;
fileIcon = null;
@@ -338,6 +414,10 @@
viewMenuIcon = null;
}
+ /**
+ * Uninstalls the strings.
+ * @param fc the file chooser
+ */
protected void uninstallStrings(JFileChooser fc) {
saveButtonText = null;
openButtonText = null;
@@ -354,6 +434,9 @@
directoryOpenButtonToolTipText = null;
}
+ /**
+ * Creates the model.
+ */
protected void createModel() {
if (model != null) {
model.invalidateFileCache();
@@ -361,50 +444,102 @@
model = new BasicDirectoryModel(getFileChooser());
}
+ /**
+ * Returns the model.
+ * @return the model
+ */
public BasicDirectoryModel getModel() {
return model;
}
+ /**
+ * Creates the property change listener.
+ * @param fc the file chooser
+ * @return the property change listener
+ */
public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
return null;
}
+ /**
+ * Returns the file name.
+ * @return the file name
+ */
public String getFileName() {
return null;
}
+ /**
+ * Returns the directory name.
+ * @return the directory name
+ */
public String getDirectoryName() {
return null;
}
+ /**
+ * Sets the file name.
+ * @param filename the file name
+ */
public void setFileName(String filename) {
}
+ /**
+ * Sets the directory name.
+ * @param dirname the file name
+ */
public void setDirectoryName(String dirname) {
}
+ /**
+ * {@inheritDoc}
+ */
public void rescanCurrentDirectory(JFileChooser fc) {
}
+ /**
+ * {@inheritDoc}
+ */
public void ensureFileIsVisible(JFileChooser fc, File f) {
}
+ /**
+ * Returns the file chooser.
+ * @return the file chooser
+ */
public JFileChooser getFileChooser() {
return filechooser;
}
+ /**
+ * Returns the accessory panel.
+ * @return the accessory panel
+ */
public JPanel getAccessoryPanel() {
return accessoryPanel;
}
+ /**
+ * Returns the approve button.
+ * @param fc the file chooser
+ * @return the approve button
+ */
protected JButton getApproveButton(JFileChooser fc) {
return null;
}
+ /**
+ * {@inheritDoc}
+ */
public JButton getDefaultButton(JFileChooser fc) {
return getApproveButton(fc);
}
+ /**
+ * Returns the approve button tool tip.
+ * @param fc the file chooser
+ * @return the approve button tool tip
+ */
public String getApproveButtonToolTipText(JFileChooser fc) {
String tooltipText = fc.getApproveButtonToolTipText();
if(tooltipText != null) {
@@ -419,6 +554,9 @@
return null;
}
+ /**
+ * Clears the icon cache.
+ */
public void clearIconCache() {
fileView.clearIconCache();
}
@@ -435,11 +573,22 @@
return handler;
}
+ /**
+ * Creates a double click listener.
+ * @param fc the file chooser
+ * @param list the list
+ * @return a double click listener
+ */
protected MouseListener createDoubleClickListener(JFileChooser fc,
JList<?> list) {
return new Handler(list);
}
+ /**
+ * Creates a list selection listener.
+ * @param fc the file chooser
+ * @return a list selection listener
+ */
public ListSelectionListener createListSelectionListener(JFileChooser fc) {
return getHandler();
}
@@ -566,12 +715,19 @@
}
}
+ /**
+ * A double click listener.
+ */
protected class DoubleClickListener extends MouseAdapter {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
Handler handler;
+ /**
+ * Constucts a {@code DoubleClickListener}.
+ * @param list the lsit
+ */
public DoubleClickListener(JList<?> list) {
handler = new Handler(list);
}
@@ -587,16 +743,21 @@
handler.mouseEntered(e);
}
+ /** {@inheritDoc} */
public void mouseClicked(MouseEvent e) {
handler.mouseClicked(e);
}
}
+ /**
+ * A selection listener.
+ */
protected class SelectionListener implements ListSelectionListener {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /** {@inheritDoc} */
public void valueChanged(ListSelectionEvent e) {
getHandler().valueChanged(e);
}
@@ -672,6 +833,8 @@
/**
* Returns the title of this dialog
+ * @param fc the file chooser
+ * @return the title of this dialog
*/
public String getDialogTitle(JFileChooser fc) {
String dialogTitle = fc.getDialogTitle();
@@ -686,7 +849,11 @@
}
}
-
+ /**
+ * Returns the approve button mnemonic.
+ * @param fc the file chooser
+ * @return the approve button mnemonic
+ */
public int getApproveButtonMnemonic(JFileChooser fc) {
int mnemonic = fc.getApproveButtonMnemonic();
if (mnemonic > 0) {
@@ -700,6 +867,7 @@
}
}
+ /** {@inheritDoc} */
public String getApproveButtonText(JFileChooser fc) {
String buttonText = fc.getApproveButtonText();
if (buttonText != null) {
@@ -718,6 +886,10 @@
// ***** Directory Actions *****
// *****************************
+ /**
+ * Returns a new folder action.
+ * @return a new folder action
+ */
public Action getNewFolderAction() {
if (newFolderAction == null) {
newFolderAction = new NewFolderAction();
@@ -730,22 +902,42 @@
return newFolderAction;
}
+ /**
+ * Returns a go home action.
+ * @return a go home action
+ */
public Action getGoHomeAction() {
return goHomeAction;
}
+ /**
+ * Returns a change to parent directory action.
+ * @return a change to parent directory action
+ */
public Action getChangeToParentDirectoryAction() {
return changeToParentDirectoryAction;
}
+ /**
+ * Returns an approve selection action.
+ * @return an approve selection action
+ */
public Action getApproveSelectionAction() {
return approveSelectionAction;
}
+ /**
+ * Returns a cancel selection action.
+ * @return a cancel selection action
+ */
public Action getCancelSelectionAction() {
return cancelSelectionAction;
}
+ /**
+ * Returns an update action.
+ * @return an update action
+ */
public Action getUpdateAction() {
return updateAction;
}
@@ -756,9 +948,11 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class NewFolderAction extends AbstractAction {
+ /** Constructs a {@code NewFolderAction}. */
protected NewFolderAction() {
super(FilePane.ACTION_NEW_FOLDER);
}
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
if (readOnly) {
return;
@@ -799,6 +993,7 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class GoHomeAction extends AbstractAction {
+ /** Constructs a {@code GoHomeAction}. */
protected GoHomeAction() {
super("Go Home");
}
@@ -808,12 +1003,17 @@
}
}
+ /**
+ * Change to parent directory action.
+ */
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class ChangeToParentDirectoryAction extends AbstractAction {
+ /** Constructs a {@code ChangeToParentDirectoryAction}. */
protected ChangeToParentDirectoryAction() {
super("Go Up");
putValue(Action.ACTION_COMMAND_KEY, FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY);
}
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
getFileChooser().changeToParentDirectory();
}
@@ -824,9 +1024,11 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class ApproveSelectionAction extends AbstractAction {
+ /** Constructs an {@code ApproveSelectionAction}. */
protected ApproveSelectionAction() {
super(FilePane.ACTION_APPROVE_SELECTION);
}
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
if (isDirectorySelected()) {
File dir = getDirectory();
@@ -1133,6 +1335,7 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class CancelSelectionAction extends AbstractAction {
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
getFileChooser().cancelSelection();
}
@@ -1143,6 +1346,7 @@
*/
@SuppressWarnings("serial") // Superclass is not serializable across versions
protected class UpdateAction extends AbstractAction {
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
JFileChooser fc = getFileChooser();
fc.setCurrentDirectory(fc.getFileSystemView().createFileObject(getDirectoryName()));
@@ -1188,15 +1392,27 @@
// *****************************************
// ***** default AcceptAll file filter *****
// *****************************************
+ /**
+ * Accept all file filter.
+ */
protected class AcceptAllFileFilter extends FileFilter {
+ /** Constructs an {@code AcceptAllFileFilter}. */
public AcceptAllFileFilter() {
}
+ /**
+ * Returns true.
+ * @param f the file
+ * @return true
+ */
public boolean accept(File f) {
return true;
}
+ /**
+ * {@inheritDoc}
+ */
public String getDescription() {
return UIManager.getString("FileChooser.acceptAllFileFilterText");
}
@@ -1206,18 +1422,26 @@
// ***********************
// * FileView operations *
// ***********************
+ /**
+ * A basic file view.
+ */
protected class BasicFileView extends FileView {
/* FileView type descriptions */
- // PENDING(jeff) - pass in the icon cache size
+ /** The icon cache */
protected Hashtable<File,Icon> iconCache = new Hashtable<File,Icon>();
+ /** Constructs a {@code BasicFileView}. */
public BasicFileView() {
}
+ /**
+ * Clears the icon cache.
+ */
public void clearIconCache() {
iconCache = new Hashtable<File,Icon>();
}
+ /** {@inheritDoc} */
public String getName(File f) {
// Note: Returns display name rather than file name
String fileName = null;
@@ -1227,11 +1451,12 @@
return fileName;
}
-
+ /** {@inheritDoc} */
public String getDescription(File f) {
return f.getName();
}
+ /** {@inheritDoc} */
public String getTypeDescription(File f) {
String type = getFileChooser().getFileSystemView().getSystemTypeDescription(f);
if (type == null) {
@@ -1244,10 +1469,20 @@
return type;
}
+ /**
+ * Returns the cached icon for the file.
+ * @param f the file
+ * @return the cached icon for the file
+ */
public Icon getCachedIcon(File f) {
return iconCache.get(f);
}
+ /**
+ * Caches an icon for a file.
+ * @param f the file
+ * @param i the icon
+ */
public void cacheIcon(File f, Icon i) {
if(f == null || i == null) {
return;
@@ -1255,6 +1490,7 @@
iconCache.put(f, i);
}
+ /** {@inheritDoc} */
public Icon getIcon(File f) {
Icon icon = getCachedIcon(f);
if(icon != null) {
@@ -1278,6 +1514,11 @@
return icon;
}
+ /**
+ * Returns whether or not a file is hidden.
+ * @param f the file
+ * @return whether or not a file is hidden
+ */
public Boolean isHidden(File f) {
String name = f.getName();
if(name != null && name.charAt(0) == '.') {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -42,22 +42,31 @@
*/
public class BasicInternalFrameUI extends InternalFrameUI
{
-
+ /** frame */
protected JInternalFrame frame;
private Handler handler;
+ /** Border listener */
protected MouseInputAdapter borderListener;
+ /** Property change listener */
protected PropertyChangeListener propertyChangeListener;
+ /** Internal frame layout */
protected LayoutManager internalFrameLayout;
+ /** Component listener */
protected ComponentListener componentListener;
+ /** Glass pane dispatcher */
protected MouseInputListener glassPaneDispatcher;
private InternalFrameListener internalFrameListener;
+ /** North pane */
protected JComponent northPane;
+ /** South pane */
protected JComponent southPane;
+ /** West pane */
protected JComponent westPane;
+ /** East pane */
protected JComponent eastPane;
-
+ /** Title pane */
protected BasicInternalFrameTitlePane titlePane; // access needs this
private static DesktopManager sharedDesktopManager;
@@ -85,10 +94,19 @@
/////////////////////////////////////////////////////////////////////////////
// ComponentUI Interface Implementation methods
/////////////////////////////////////////////////////////////////////////////
+ /**
+ * Returns a component UI.
+ * @param b a component
+ * @return a component UI
+ */
public static ComponentUI createUI(JComponent b) {
return new BasicInternalFrameUI((JInternalFrame)b);
}
+ /**
+ * Constructs a {@code BasicInternalFrameUI}.
+ * @param b the internal frame
+ */
public BasicInternalFrameUI(JInternalFrame b) {
LookAndFeel laf = UIManager.getLookAndFeel();
if (laf instanceof BasicLookAndFeel) {
@@ -96,6 +114,10 @@
}
}
+ /**
+ * Installs the UI.
+ * @param c the component
+ */
public void installUI(JComponent c) {
frame = (JInternalFrame)c;
@@ -108,6 +130,10 @@
LookAndFeel.installProperty(frame, "opaque", Boolean.TRUE);
}
+ /**
+ * Uninstalls the UI.
+ * @param c the component
+ */
public void uninstallUI(JComponent c) {
if(c != frame)
throw new IllegalComponentStateException(
@@ -124,6 +150,9 @@
frame = null;
}
+ /**
+ * Installs the defaults.
+ */
protected void installDefaults(){
Icon frameIcon = frame.getFrameIcon();
if (frameIcon == null || frameIcon instanceof UIResource) {
@@ -144,6 +173,9 @@
LookAndFeel.installBorder(frame, "InternalFrame.border");
}
+ /**
+ * Installs the keyboard actions.
+ */
protected void installKeyboardActions(){
createInternalFrameListener();
if (internalFrameListener != null) {
@@ -184,6 +216,9 @@
BasicLookAndFeel.installAudioActionMap(map);
}
+ /**
+ * Installs the components.
+ */
protected void installComponents(){
setNorthPane(createNorthPane(frame));
setSouthPane(createSouthPane(frame));
@@ -192,6 +227,7 @@
}
/**
+ * Installs the listeners.
* @since 1.3
*/
protected void installListeners() {
@@ -257,6 +293,9 @@
return null;
}
+ /**
+ * Uninstalls the defaults.
+ */
protected void uninstallDefaults() {
Icon frameIcon = frame.getFrameIcon();
if (frameIcon instanceof UIResource) {
@@ -267,6 +306,9 @@
LookAndFeel.uninstallBorder(frame);
}
+ /**
+ * Uninstalls the components.
+ */
protected void uninstallComponents(){
setNorthPane(null);
setSouthPane(null);
@@ -279,6 +321,7 @@
}
/**
+ * Uninstalls the listeners.
* @since 1.3
*/
protected void uninstallListeners() {
@@ -298,6 +341,9 @@
borderListener = null;
}
+ /**
+ * Uninstalls the keyboard actions.
+ */
protected void uninstallKeyboardActions(){
if (internalFrameListener != null) {
frame.removeInternalFrameListener(internalFrameListener);
@@ -321,22 +367,38 @@
frame.setCursor(s);
}
+ /**
+ * Creates the layout manager.
+ * @return the layout manager
+ */
protected LayoutManager createLayoutManager(){
return getHandler();
}
+ /**
+ * Creates the property change listener.
+ * @return the property change listener
+ */
protected PropertyChangeListener createPropertyChangeListener(){
return getHandler();
}
-
-
+ /**
+ * Returns the preferred size.
+ * @param x the component
+ * @return the preferred size
+ */
public Dimension getPreferredSize(JComponent x) {
if(frame == x)
return frame.getLayout().preferredLayoutSize(x);
return new Dimension(100, 100);
}
+ /**
+ * Returns the minimum size.
+ * @param x the component
+ * @return the minimum size
+ */
public Dimension getMinimumSize(JComponent x) {
if(frame == x) {
return frame.getLayout().minimumLayoutSize(x);
@@ -344,6 +406,11 @@
return new Dimension(0, 0);
}
+ /**
+ * Returns the maximum size.
+ * @param x the component
+ * @return the maximum size
+ */
public Dimension getMaximumSize(JComponent x) {
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
@@ -371,60 +438,114 @@
}
}
+ /**
+ * Deinstalls the mouse handlers.
+ * @param c the component
+ */
protected void deinstallMouseHandlers(JComponent c) {
c.removeMouseListener(borderListener);
c.removeMouseMotionListener(borderListener);
}
+ /**
+ * Installs the mouse handlers.
+ * @param c the component
+ */
protected void installMouseHandlers(JComponent c) {
c.addMouseListener(borderListener);
c.addMouseMotionListener(borderListener);
}
+ /**
+ * Creates the north pane.
+ * @param w the internal frame
+ * @return the north pane
+ */
protected JComponent createNorthPane(JInternalFrame w) {
titlePane = new BasicInternalFrameTitlePane(w);
return titlePane;
}
+ /**
+ * Creates the north pane.
+ * @param w the internal frame
+ * @return the north pane
+ */
protected JComponent createSouthPane(JInternalFrame w) {
return null;
}
+ /**
+ * Creates the west pane.
+ * @param w the internal frame
+ * @return the west pane
+ */
protected JComponent createWestPane(JInternalFrame w) {
return null;
}
+ /**
+ * Creates the east pane.
+ * @param w the internal frame
+ * @return the east pane
+ */
protected JComponent createEastPane(JInternalFrame w) {
return null;
}
-
+ /**
+ * Creates the border listener.
+ * @param w the internal frame
+ * @return the border listener
+ */
protected MouseInputAdapter createBorderListener(JInternalFrame w) {
return new BorderListener();
}
+ /**
+ * Creates the internal frame listener.
+ */
protected void createInternalFrameListener(){
internalFrameListener = getHandler();
}
+ /**
+ * Returns whether or no the key binding is registered.
+ * @return whether or no the key binding is registered
+ */
protected final boolean isKeyBindingRegistered(){
return keyBindingRegistered;
}
+ /**
+ * Sets the key binding registration.
+ * @param b new value for key binding registration
+ */
protected final void setKeyBindingRegistered(boolean b){
keyBindingRegistered = b;
}
+ /**
+ * Returns whether or no the key binding is active.
+ * @return whether or no the key binding is active
+ */
public final boolean isKeyBindingActive(){
return keyBindingActive;
}
+ /**
+ * Sets the key binding activity.
+ * @param b new value for key binding activity
+ */
protected final void setKeyBindingActive(boolean b){
keyBindingActive = b;
}
+ /**
+ * Setup the menu open key.
+ */
protected void setupMenuOpenKey(){
// PENDING(hania): Why are these WHEN_IN_FOCUSED_WINDOWs? Shouldn't
// they be WHEN_ANCESTOR_OF_FOCUSED_COMPONENT?
@@ -437,13 +558,24 @@
//SwingUtilities.replaceUIActionMap(frame, actionMap);
}
+ /**
+ * Setup the menu close key.
+ */
protected void setupMenuCloseKey(){
}
+ /**
+ * Returns the north pane.
+ * @return the north pane
+ */
public JComponent getNorthPane() {
return northPane;
}
+ /**
+ * Sets the north pane.
+ * @param c the new north pane
+ */
public void setNorthPane(JComponent c) {
if (northPane != null &&
northPane instanceof BasicInternalFrameTitlePane) {
@@ -456,30 +588,57 @@
}
}
+ /**
+ * Returns the south pane.
+ * @return the south pane
+ */
public JComponent getSouthPane() {
return southPane;
}
+ /**
+ * Sets the south pane.
+ * @param c the new south pane
+ */
public void setSouthPane(JComponent c) {
southPane = c;
}
+ /**
+ * Returns the west pane.
+ * @return the west pane
+ */
public JComponent getWestPane() {
return westPane;
}
+ /**
+ * Sets the west pane.
+ * @param c the new west pane
+ */
public void setWestPane(JComponent c) {
westPane = c;
}
+ /**
+ * Returns the east pane.
+ * @return the east pane
+ */
public JComponent getEastPane() {
return eastPane;
}
+ /**
+ * Sets the east pane.
+ * @param c the new east pane
+ */
public void setEastPane(JComponent c) {
eastPane = c;
}
+ /**
+ * Internal frame property change listener.
+ */
public class InternalFramePropertyChangeListener implements
PropertyChangeListener {
// NOTE: This class exists only for backward compatibility. All
@@ -495,27 +654,45 @@
}
}
+ /**
+ * Internal frame layout.
+ */
public class InternalFrameLayout implements LayoutManager {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /**
+ * {@inheritDoc}
+ */
public void addLayoutComponent(String name, Component c) {
getHandler().addLayoutComponent(name, c);
}
+ /**
+ * {@inheritDoc}
+ */
public void removeLayoutComponent(Component c) {
getHandler().removeLayoutComponent(c);
}
+ /**
+ * {@inheritDoc}
+ */
public Dimension preferredLayoutSize(Container c) {
return getHandler().preferredLayoutSize(c);
}
+ /**
+ * {@inheritDoc}
+ */
public Dimension minimumLayoutSize(Container c) {
return getHandler().minimumLayoutSize(c);
}
+ /**
+ * {@inheritDoc}
+ */
public void layoutContainer(Container c) {
getHandler().layoutContainer(c);
}
@@ -527,6 +704,7 @@
* find the JDesktop component and returns the desktopManager from
* it. If this fails, it will return a default DesktopManager that
* should work in arbitrary parents.
+ * @return the proper DesktopManager
*/
protected DesktopManager getDesktopManager() {
if(frame.getDesktopPane() != null
@@ -537,6 +715,10 @@
return sharedDesktopManager;
}
+ /**
+ * Creates the desktop manager.
+ * @return the desktop manager
+ */
protected DesktopManager createDesktopManager(){
return new DefaultDesktopManager();
}
@@ -653,7 +835,7 @@
Rectangle startingBounds;
int resizeDir;
-
+ /** resize none */
protected final int RESIZE_NONE = 0;
private boolean discardRelease = false;
@@ -1114,6 +1296,9 @@
} /// End BorderListener Class
+ /**
+ * Component handler.
+ */
protected class ComponentHandler implements ComponentListener {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
@@ -1124,92 +1309,155 @@
getHandler().componentResized(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void componentMoved(ComponentEvent e) {
getHandler().componentMoved(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void componentShown(ComponentEvent e) {
getHandler().componentShown(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void componentHidden(ComponentEvent e) {
getHandler().componentHidden(e);
}
}
+ /**
+ * Creates a component listener.
+ * @return a component listener
+ */
protected ComponentListener createComponentListener() {
return getHandler();
}
+ /**
+ * Glass pane dispatcher.
+ */
protected class GlassPaneDispatcher implements MouseInputListener {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /**
+ * {@inheritDoc}
+ */
public void mousePressed(MouseEvent e) {
getHandler().mousePressed(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseEntered(MouseEvent e) {
getHandler().mouseEntered(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseMoved(MouseEvent e) {
getHandler().mouseMoved(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseExited(MouseEvent e) {
getHandler().mouseExited(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseClicked(MouseEvent e) {
getHandler().mouseClicked(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseReleased(MouseEvent e) {
getHandler().mouseReleased(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void mouseDragged(MouseEvent e) {
getHandler().mouseDragged(e);
}
}
+ /**
+ * Creates a {@code GlassPaneDispatcher}.
+ * @return a {@code GlassPaneDispatcher}
+ */
protected MouseInputListener createGlassPaneDispatcher() {
return null;
}
-
+ /**
+ * Basic internal frame listener.
+ */
protected class BasicInternalFrameListener implements InternalFrameListener
{
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameClosing(InternalFrameEvent e) {
getHandler().internalFrameClosing(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameClosed(InternalFrameEvent e) {
getHandler().internalFrameClosed(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameOpened(InternalFrameEvent e) {
getHandler().internalFrameOpened(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameIconified(InternalFrameEvent e) {
getHandler().internalFrameIconified(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameDeiconified(InternalFrameEvent e) {
getHandler().internalFrameDeiconified(e);
}
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameActivated(InternalFrameEvent e) {
getHandler().internalFrameActivated(e);
}
-
+ /**
+ * {@inheritDoc}
+ */
public void internalFrameDeactivated(InternalFrameEvent e) {
getHandler().internalFrameDeactivated(e);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -875,30 +875,38 @@
if (dumpStack == true)
Thread.dumpStack();
}
+ /** Mouse input handler */
protected class MouseInputHandler implements MouseInputListener {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /** {@inheritDoc} */
public void mouseClicked(MouseEvent e) {
getHandler().mouseClicked(e);
}
+ /** {@inheritDoc} */
public void mousePressed(MouseEvent e) {
getHandler().mousePressed(e);
}
+ /** {@inheritDoc} */
public void mouseReleased(MouseEvent e) {
getHandler().mouseReleased(e);
}
+ /** {@inheritDoc} */
public void mouseEntered(MouseEvent e) {
getHandler().mouseEntered(e);
}
+ /** {@inheritDoc} */
public void mouseExited(MouseEvent e) {
getHandler().mouseExited(e);
}
+ /** {@inheritDoc} */
public void mouseDragged(MouseEvent e) {
getHandler().mouseDragged(e);
}
+ /** {@inheritDoc} */
public void mouseMoved(MouseEvent e) {
getHandler().mouseMoved(e);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -136,7 +136,7 @@
/**
* Creates a new {@code BasicOptionPaneUI} instance.
- *
+ * @param x the component
* @return a new {@code BasicOptionPaneUI} instance
*/
public static ComponentUI createUI(JComponent x) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -60,35 +60,59 @@
// NOTE: DO NOT use this field directly, SynthScrollBarUI assumes you'll
// call getMinimumThumbSize to access it.
+ /** Minimum thumb size */
protected Dimension minimumThumbSize;
+ /** Maximum thumb size */
protected Dimension maximumThumbSize;
+ /** Thumb highlight color */
protected Color thumbHighlightColor;
+ /** Thumb light shadow color */
protected Color thumbLightShadowColor;
+ /** Thumb dark shadow color */
protected Color thumbDarkShadowColor;
+ /** Thumb color */
protected Color thumbColor;
+ /** Track color */
protected Color trackColor;
+ /** Track highlight color */
protected Color trackHighlightColor;
+ /** Scrollbar */
protected JScrollBar scrollbar;
+ /** Increment button */
protected JButton incrButton;
+ /** Decrement button */
protected JButton decrButton;
+ /** Dragging */
protected boolean isDragging;
+ /** Track listener */
protected TrackListener trackListener;
+ /** Button listener */
protected ArrowButtonListener buttonListener;
+ /** Model listener */
protected ModelListener modelListener;
+ /** Thumb rectangle */
protected Rectangle thumbRect;
+ /** Track rectangle */
protected Rectangle trackRect;
+ /** Track highlight */
protected int trackHighlight;
+ /** No highlight */
protected static final int NO_HIGHLIGHT = 0;
+ /** Decrease highlight */
protected static final int DECREASE_HIGHLIGHT = 1;
+ /** Increase highlight */
protected static final int INCREASE_HIGHLIGHT = 2;
+ /** Scroll listener */
protected ScrollListener scrollListener;
+ /** Property change listener */
protected PropertyChangeListener propertyChangeListener;
+ /** Scroll timer */
protected Timer scrollTimer;
private final static int scrollSpeedThrottle = 60; // delay in milli seconds
@@ -148,12 +172,18 @@
map.put(new Actions(Actions.MAX_SCROLL));
}
-
+ /**
+ * Creates the UI.
+ * @param c the component
+ * @return the UI
+ */
public static ComponentUI createUI(JComponent c) {
return new BasicScrollBarUI();
}
-
+ /**
+ * Configures the scroll bar colors.
+ */
protected void configureScrollBarColors()
{
LookAndFeel.installColors(scrollbar, "ScrollBar.background",
@@ -166,7 +196,10 @@
trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight");
}
-
+ /**
+ * Installs the UI.
+ * @param c the component
+ */
public void installUI(JComponent c) {
scrollbar = (JScrollBar)c;
thumbRect = new Rectangle(0, 0, 0, 0);
@@ -177,6 +210,10 @@
installKeyboardActions();
}
+ /**
+ * Uninstalls the UI.
+ * @param c the component
+ */
public void uninstallUI(JComponent c) {
scrollbar = (JScrollBar)c;
uninstallListeners();
@@ -189,7 +226,9 @@
decrButton = null;
}
-
+ /**
+ * Installs the defaults.
+ */
protected void installDefaults()
{
scrollBarWidth = UIManager.getInt("ScrollBar.width");
@@ -240,7 +279,9 @@
}
}
-
+ /**
+ * Installs the components.
+ */
protected void installComponents(){
switch (scrollbar.getOrientation()) {
case JScrollBar.VERTICAL:
@@ -264,12 +305,17 @@
scrollbar.setEnabled(scrollbar.isEnabled());
}
+ /**
+ * Uninstalls the components.
+ */
protected void uninstallComponents(){
scrollbar.remove(incrButton);
scrollbar.remove(decrButton);
}
-
+ /**
+ * Installs the listeners.
+ */
protected void installListeners(){
trackListener = createTrackListener();
buttonListener = createArrowButtonListener();
@@ -294,7 +340,9 @@
scrollTimer.setInitialDelay(300); // default InitialDelay?
}
-
+ /**
+ * Installs the keyboard actions.
+ */
protected void installKeyboardActions(){
LazyActionMap.installLazyActionMap(scrollbar, BasicScrollBarUI.class,
"ScrollBar.actionMap");
@@ -307,6 +355,9 @@
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap);
}
+ /**
+ * Uninstalls the keyboard actions.
+ */
protected void uninstallKeyboardActions(){
SwingUtilities.replaceUIInputMap(scrollbar, JComponent.WHEN_FOCUSED,
null);
@@ -343,7 +394,9 @@
return null;
}
-
+ /**
+ * Uninstall the listeners.
+ */
protected void uninstallListeners() {
scrollTimer.stop();
scrollTimer = null;
@@ -363,7 +416,9 @@
handler = null;
}
-
+ /**
+ * Uninstalls the defaults.
+ */
protected void uninstallDefaults(){
LookAndFeel.uninstallBorder(scrollbar);
if (scrollbar.getLayout() == this) {
@@ -379,22 +434,42 @@
return handler;
}
+ /**
+ * Creates a track listener.
+ * @return a track listener
+ */
protected TrackListener createTrackListener(){
return new TrackListener();
}
+ /**
+ * Creates an arrow button listener.
+ * @return an arrow button listener
+ */
protected ArrowButtonListener createArrowButtonListener(){
return new ArrowButtonListener();
}
+ /**
+ * Creates a model listener.
+ * @return a model listener
+ */
protected ModelListener createModelListener(){
return new ModelListener();
}
+ /**
+ * Creates a scroll listener.
+ * @return a scroll listener
+ */
protected ScrollListener createScrollListener(){
return new ScrollListener();
}
+ /**
+ * Creates a property change listener.
+ * @return a property change listener
+ */
protected PropertyChangeListener createPropertyChangeListener() {
return getHandler();
}
@@ -470,6 +545,11 @@
return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
+ /**
+ * Creates a decrease button.
+ * @param orientation the orientation
+ * @return a decrease button
+ */
protected JButton createDecreaseButton(int orientation) {
return new BasicArrowButton(orientation,
UIManager.getColor("ScrollBar.thumb"),
@@ -478,6 +558,11 @@
UIManager.getColor("ScrollBar.thumbHighlight"));
}
+ /**
+ * Creates an increase button.
+ * @param orientation the orientation
+ * @return an increase button
+ */
protected JButton createIncreaseButton(int orientation) {
return new BasicArrowButton(orientation,
UIManager.getColor("ScrollBar.thumb"),
@@ -487,6 +572,10 @@
}
+ /**
+ * Paints the decrease highlight.
+ * @param g the graphics
+ */
protected void paintDecreaseHighlight(Graphics g)
{
Insets insets = scrollbar.getInsets();
@@ -519,6 +608,10 @@
}
+ /**
+ * Paints the increase highlight.
+ * @param g the graphics
+ */
protected void paintIncreaseHighlight(Graphics g)
{
Insets insets = scrollbar.getInsets();
@@ -552,6 +645,12 @@
}
+ /**
+ * Paints the track.
+ * @param g the graphics
+ * @param c the component
+ * @param trackBounds the track bounds
+ */
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)
{
g.setColor(trackColor);
@@ -565,7 +664,12 @@
}
}
-
+ /**
+ * Paints the thumb.
+ * @param g the graphics
+ * @param c the component
+ * @param thumbBounds the thumb bounds
+ */
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
{
if(thumbBounds.isEmpty() || !scrollbar.isEnabled()) {
@@ -644,6 +748,10 @@
return (useCachedValue) ? scrollBarValue : sb.getValue();
}
+ /**
+ * Laysouts a vertical scroll bar.
+ * @param sb the scroll bar
+ */
protected void layoutVScrollbar(JScrollBar sb)
{
Dimension sbSize = sb.getSize();
@@ -742,7 +850,10 @@
}
}
-
+ /**
+ * Laysouts a vertical scroll bar.
+ * @param sb the scroll bar
+ */
protected void layoutHScrollbar(JScrollBar sb)
{
Dimension sbSize = sb.getSize();
@@ -966,6 +1077,10 @@
scrollbar.setValue(newValue);
}
+ /**
+ * Scrolls by block.
+ * @param direction the direction to scroll
+ */
protected void scrollByBlock(int direction)
{
scrollByBlock(scrollbar, direction);
@@ -1033,6 +1148,10 @@
}
}
+ /**
+ * Scrolls by unit.
+ * @param direction the direction to scroll
+ */
protected void scrollByUnit(int direction) {
scrollByUnits(scrollbar, direction, 1, false);
}
@@ -1050,7 +1169,6 @@
/**
* A listener to listen for model changes.
- *
*/
protected class ModelListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
@@ -1069,10 +1187,15 @@
protected class TrackListener
extends MouseAdapter implements MouseMotionListener
{
+ /** The offset */
protected transient int offset;
- protected transient int currentMouseX, currentMouseY;
+ /** Current mouse x position */
+ protected transient int currentMouseX;
+ /** Current mouse y position */
+ protected transient int currentMouseY;
private transient int direction = +1;
+ /** {@inheritDoc} */
public void mouseReleased(MouseEvent e)
{
if (isDragging) {
@@ -1339,6 +1462,7 @@
}
}
+ /** {@inheritDoc} */
public void mouseMoved(MouseEvent e) {
if (!isDragging) {
updateThumbState(e.getX(), e.getY());
@@ -1406,19 +1530,34 @@
int direction = +1;
boolean useBlockIncrement;
+ /** Constructs a {@code ScrollListener}. */
public ScrollListener() {
direction = +1;
useBlockIncrement = false;
}
+ /**
+ * Constructs a {@code ScrollListener}.
+ * @param dir direction
+ * @param block use block increment
+ */
public ScrollListener(int dir, boolean block) {
direction = dir;
useBlockIncrement = block;
}
+ /**
+ * Sets the direction.
+ * @param direction the new direction
+ */
public void setDirection(int direction) { this.direction = direction; }
+ /**
+ * Sets the scrolling by block
+ * @param block whether or not to scroll by block
+ */
public void setScrollByBlock(boolean block) { this.useBlockIncrement = block; }
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
if(useBlockIncrement) {
scrollByBlock(direction);
@@ -1497,13 +1636,14 @@
}
}
+ /** Property change handler */
public class PropertyChangeHandler implements PropertyChangeListener
{
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
-
+ /** {@inheritDoc} */
public void propertyChange(PropertyChangeEvent e) {
getHandler().propertyChange(e);
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -746,6 +746,9 @@
}
}
+ /**
+ * Property change handler.
+ */
public class PropertyChangeHandler implements PropertyChangeListener
{
@@ -754,6 +757,9 @@
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /**
+ * {@inheritDoc}
+ */
public void propertyChange(PropertyChangeEvent e)
{
getHandler().propertyChange(e);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -47,33 +47,55 @@
// Old actions forward to an instance of this.
private static final Actions SHARED_ACTION = new Actions();
+ /** Positive scroll */
public static final int POSITIVE_SCROLL = +1;
+ /** Negative scroll */
public static final int NEGATIVE_SCROLL = -1;
+ /** Minimum scroll */
public static final int MIN_SCROLL = -2;
+ /** Maximum scroll */
public static final int MAX_SCROLL = +2;
+ /** Scroll timer */
protected Timer scrollTimer;
+ /** Slider */
protected JSlider slider;
+ /** Focus insets */
protected Insets focusInsets = null;
+ /** Inset cache */
protected Insets insetCache = null;
+ /** Left-to-right cache */
protected boolean leftToRightCache = true;
+ /** Focus rectangle */
protected Rectangle focusRect = null;
+ /** Content rectangle */
protected Rectangle contentRect = null;
+ /** Label rectangle */
protected Rectangle labelRect = null;
+ /** Tick rectangle */
protected Rectangle tickRect = null;
+ /** Track rectangle */
protected Rectangle trackRect = null;
+ /** Thumb rectangle */
protected Rectangle thumbRect = null;
- protected int trackBuffer = 0; // The distance that the track is from the side of the control
+ /** The distance that the track is from the side of the control */
+ protected int trackBuffer = 0;
private transient boolean isDragging;
+ /** Track listener */
protected TrackListener trackListener;
+ /** Change listener */
protected ChangeListener changeListener;
+ /** Component listener */
protected ComponentListener componentListener;
+ /** Focus listener */
protected FocusListener focusListener;
+ /** Scroll listener */
protected ScrollListener scrollListener;
+ /** Property chane listener */
protected PropertyChangeListener propertyChangeListener;
private Handler handler;
private int lastValue;
@@ -93,15 +115,26 @@
*/
private boolean sameLabelBaselines;
-
+ /**
+ * Returns the shadow color.
+ * @return the shadow color
+ */
protected Color getShadowColor() {
return shadowColor;
}
+ /**
+ * Returns the highlight color.
+ * @return the highlight color
+ */
protected Color getHighlightColor() {
return highlightColor;
}
+ /**
+ * Returns the focus color.
+ * @return the focus color
+ */
protected Color getFocusColor() {
return focusColor;
}
@@ -119,13 +152,26 @@
/////////////////////////////////////////////////////////////////////////////
// ComponentUI Interface Implementation methods
/////////////////////////////////////////////////////////////////////////////
+ /**
+ * Creates a UI.
+ * @param b a component
+ * @return a UI
+ */
public static ComponentUI createUI(JComponent b) {
return new BasicSliderUI((JSlider)b);
}
+ /**
+ * Constructs a {@code BasicSliderUI}.
+ * @param b a slider
+ */
public BasicSliderUI(JSlider b) {
}
+ /**
+ * Installs a UI.
+ * @param c a component
+ */
public void installUI(JComponent c) {
slider = (JSlider) c;
@@ -162,6 +208,10 @@
calculateGeometry(); // This figures out where the labels, ticks, track, and thumb are.
}
+ /**
+ * Uninstalls a UI.
+ * @param c a component
+ */
public void uninstallUI(JComponent c) {
if ( c != slider )
throw new IllegalComponentStateException(
@@ -193,6 +243,10 @@
slider = null;
}
+ /**
+ * Installs the defaults.
+ * @param slider a slider
+ */
protected void installDefaults( JSlider slider ) {
LookAndFeel.installBorder(slider, "Slider.border");
LookAndFeel.installColorsAndFont(slider, "Slider.background",
@@ -208,32 +262,66 @@
if (focusInsets == null) focusInsets = new InsetsUIResource(2,2,2,2);
}
+ /**
+ * Uninstalls the defaults.
+ * @param slider a slider
+ */
protected void uninstallDefaults(JSlider slider) {
LookAndFeel.uninstallBorder(slider);
focusInsets = null;
}
+ /**
+ * Creates a track listener.
+ * @return a track listener
+ * @param slider a slider
+ */
protected TrackListener createTrackListener(JSlider slider) {
return new TrackListener();
}
+ /**
+ * Creates a change listener.
+ * @return a change listener
+ * @param slider a slider
+ */
protected ChangeListener createChangeListener(JSlider slider) {
return getHandler();
}
+ /**
+ * Creates a composite listener.
+ * @return a composite listener
+ * @param slider a slider
+ */
protected ComponentListener createComponentListener(JSlider slider) {
return getHandler();
}
+ /**
+ * Creates a focus listener.
+ * @return a focus listener
+ * @param slider a slider
+ */
protected FocusListener createFocusListener(JSlider slider) {
return getHandler();
}
+ /**
+ * Creates a scroll listener.
+ * @return a scroll listener
+ * @param slider a slider
+ */
protected ScrollListener createScrollListener( JSlider slider ) {
return new ScrollListener();
}
+ /**
+ * Creates a property change listener.
+ * @return a property change listener
+ * @param slider a slider
+ */
protected PropertyChangeListener createPropertyChangeListener(
JSlider slider) {
return getHandler();
@@ -246,6 +334,10 @@
return handler;
}
+ /**
+ * Installs listeners.
+ * @param slider a slider
+ */
protected void installListeners( JSlider slider ) {
slider.addMouseListener(trackListener);
slider.addMouseMotionListener(trackListener);
@@ -255,6 +347,10 @@
slider.getModel().addChangeListener(changeListener);
}
+ /**
+ * Uninstalls listeners.
+ * @param slider a slider
+ */
protected void uninstallListeners( JSlider slider ) {
slider.removeMouseListener(trackListener);
slider.removeMouseMotionListener(trackListener);
@@ -265,6 +361,10 @@
handler = null;
}
+ /**
+ * Installs keyboard actions.
+ * @param slider a slider
+ */
protected void installKeyboardActions( JSlider slider ) {
InputMap km = getInputMap(JComponent.WHEN_FOCUSED, slider);
SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, km);
@@ -302,6 +402,10 @@
map.put(new Actions(Actions.MAX_SCROLL_INCREMENT));
}
+ /**
+ * Uninstalls keyboard actions.
+ * @param slider a slider
+ */
protected void uninstallKeyboardActions( JSlider slider ) {
SwingUtilities.replaceUIActionMap(slider, null);
SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED,
@@ -430,6 +534,10 @@
return sameLabelBaselines;
}
+ /**
+ * Returns the preferred horizontal size.
+ * @return the preferred horizontal size
+ */
public Dimension getPreferredHorizontalSize() {
Dimension horizDim = (Dimension)DefaultLookup.get(slider,
this, "Slider.horizontalSize");
@@ -439,6 +547,10 @@
return horizDim;
}
+ /**
+ * Returns the preferred vertical size.
+ * @return the preferred vertical size
+ */
public Dimension getPreferredVerticalSize() {
Dimension vertDim = (Dimension)DefaultLookup.get(slider,
this, "Slider.verticalSize");
@@ -448,6 +560,10 @@
return vertDim;
}
+ /**
+ * Returns the minimum horizontal size.
+ * @return the minimum horizontal size
+ */
public Dimension getMinimumHorizontalSize() {
Dimension minHorizDim = (Dimension)DefaultLookup.get(slider,
this, "Slider.minimumHorizontalSize");
@@ -457,6 +573,10 @@
return minHorizDim;
}
+ /**
+ * Returns the minimum vertical size.
+ * @return the minimum vertical size
+ */
public Dimension getMinimumVerticalSize() {
Dimension minVertDim = (Dimension)DefaultLookup.get(slider,
this, "Slider.minimumVerticalSize");
@@ -466,6 +586,11 @@
return minVertDim;
}
+ /**
+ * Returns the preferred size.
+ * @param c a component
+ * @return the preferred size
+ */
public Dimension getPreferredSize(JComponent c) {
recalculateIfInsetsChanged();
Dimension d;
@@ -485,6 +610,11 @@
return d;
}
+ /**
+ * Returns the minimum size.
+ * @param c a component
+ * @return the minimum size
+ */
public Dimension getMinimumSize(JComponent c) {
recalculateIfInsetsChanged();
Dimension d;
@@ -505,6 +635,11 @@
return d;
}
+ /**
+ * Returns the maximum size.
+ * @param c a component
+ * @return the maximum size
+ */
public Dimension getMaximumSize(JComponent c) {
Dimension d = getPreferredSize(c);
if ( slider.getOrientation() == JSlider.VERTICAL ) {
@@ -517,6 +652,9 @@
return d;
}
+ /**
+ * Calculates the geometry.
+ */
protected void calculateGeometry() {
calculateFocusRect();
calculateContentRect();
@@ -528,6 +666,9 @@
calculateThumbLocation();
}
+ /**
+ * Calculates the focus rectangle.
+ */
protected void calculateFocusRect() {
focusRect.x = insetCache.left;
focusRect.y = insetCache.top;
@@ -535,11 +676,17 @@
focusRect.height = slider.getHeight() - (insetCache.top + insetCache.bottom);
}
+ /**
+ * Calculates the thumb size rectangle.
+ */
protected void calculateThumbSize() {
Dimension size = getThumbSize();
thumbRect.setSize( size.width, size.height );
}
+ /**
+ * Calculates the content rectangle.
+ */
protected void calculateContentRect() {
contentRect.x = focusRect.x + focusInsets.left;
contentRect.y = focusRect.y + focusInsets.top;
@@ -564,6 +711,9 @@
return result;
}
+ /**
+ * Calculates the thumb location.
+ */
protected void calculateThumbLocation() {
if ( slider.getSnapToTicks() ) {
int sliderValue = slider.getValue();
@@ -603,6 +753,9 @@
}
}
+ /**
+ * Calculates the track buffer.
+ */
protected void calculateTrackBuffer() {
if ( slider.getPaintLabels() && slider.getLabelTable() != null ) {
Component highLabel = getHighestValueLabel();
@@ -627,7 +780,9 @@
}
}
-
+ /**
+ * Calculates the track rectangle.
+ */
protected void calculateTrackRect() {
int centerSpacing; // used to center sliders added using BorderLayout.CENTER (bug 4275631)
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -671,6 +826,9 @@
return 8;
}
+ /**
+ * Calculates the tick rectangle.
+ */
protected void calculateTickRect() {
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
tickRect.x = trackRect.x;
@@ -691,6 +849,9 @@
}
}
+ /**
+ * Calculates the label rectangle.
+ */
protected void calculateLabelRect() {
if ( slider.getPaintLabels() ) {
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -733,6 +894,10 @@
}
}
+ /**
+ * Returns the thumb size.
+ * @return the thumb size
+ */
protected Dimension getThumbSize() {
Dimension size = new Dimension();
@@ -748,16 +913,24 @@
return size;
}
+ /**
+ * A property change handler.
+ */
public class PropertyChangeHandler implements PropertyChangeListener {
// NOTE: This class exists only for backward compatibility. All
// its functionality has been moved into Handler. If you need to add
// new functionality add it to the Handler, but make sure this
// class calls into the Handler.
+ /** {@inheritDoc} */
public void propertyChange( PropertyChangeEvent e ) {
getHandler().propertyChange(e);
}
}
+ /**
+ * Returns the width of the widest label.
+ * @return the width of the widest label
+ */
protected int getWidthOfWidestLabel() {
@SuppressWarnings("rawtypes")
Dictionary dictionary = slider.getLabelTable();
@@ -772,6 +945,10 @@
return widest;
}
+ /**
+ * Returns the height of the tallest label.
+ * @return the height of the tallest label
+ */
protected int getHeightOfTallestLabel() {
@SuppressWarnings("rawtypes")
Dictionary dictionary = slider.getLabelTable();
@@ -786,6 +963,10 @@
return tallest;
}
+ /**
+ * Returns the width of the highest value label.
+ * @return the width of the highest value label
+ */
protected int getWidthOfHighValueLabel() {
Component label = getHighestValueLabel();
int width = 0;
@@ -797,6 +978,10 @@
return width;
}
+ /**
+ * Returns the width of the lowest value label.
+ * @return the width of the lowest value label
+ */
protected int getWidthOfLowValueLabel() {
Component label = getLowestValueLabel();
int width = 0;
@@ -808,6 +993,10 @@
return width;
}
+ /**
+ * Returns the height of the highest value label.
+ * @return the height of the highest value label
+ */
protected int getHeightOfHighValueLabel() {
Component label = getHighestValueLabel();
int height = 0;
@@ -819,6 +1008,10 @@
return height;
}
+ /**
+ * Returns the height of the lowest value label.
+ * @return the height of the lowest value label
+ */
protected int getHeightOfLowValueLabel() {
Component label = getLowestValueLabel();
int height = 0;
@@ -830,6 +1023,10 @@
return height;
}
+ /**
+ * Draws inverted.
+ * @return the inverted-ness
+ */
protected boolean drawInverted() {
if (slider.getOrientation()==JSlider.HORIZONTAL) {
if(BasicGraphicsUtils.isLeftToRight(slider)) {
@@ -960,6 +1157,9 @@
}
}
+ /**
+ * Recalculates if the insets have changed.
+ */
protected void recalculateIfInsetsChanged() {
Insets newInsets = slider.getInsets();
if ( !newInsets.equals( insetCache ) ) {
@@ -968,6 +1168,9 @@
}
}
+ /**
+ * Recalculates if the orientation has changed.
+ */
protected void recalculateIfOrientationChanged() {
boolean ltr = BasicGraphicsUtils.isLeftToRight(slider);
if ( ltr!=leftToRightCache ) {
@@ -976,6 +1179,10 @@
}
}
+ /**
+ * Paints focus.
+ * @param g the graphics
+ */
public void paintFocus(Graphics g) {
g.setColor( getFocusColor() );
@@ -983,6 +1190,10 @@
focusRect.width, focusRect.height );
}
+ /**
+ * Paints track.
+ * @param g the graphics
+ */
public void paintTrack(Graphics g) {
Rectangle trackBounds = trackRect;
@@ -1023,6 +1234,10 @@
}
}
+ /**
+ * Paints ticks.
+ * @param g the graphics
+ */
public void paintTicks(Graphics g) {
Rectangle tickBounds = tickRect;
@@ -1120,22 +1335,50 @@
}
}
+ /**
+ * Paints minor tick for horizontal slider.
+ * @param g the graphics
+ * @param tickBounds the tick bounds
+ * @param x the x coordinate
+ */
protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
}
+ /**
+ * Paints major tick for horizontal slider.
+ * @param g the graphics
+ * @param tickBounds the tick bounds
+ * @param x the x coordinate
+ */
protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
g.drawLine( x, 0, x, tickBounds.height - 2 );
}
+ /**
+ * Paints minor tick for vertical slider.
+ * @param g the graphics
+ * @param tickBounds the tick bounds
+ * @param y the y coordinate
+ */
protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
}
+ /**
+ * Paints major tick for vertical slider.
+ * @param g the graphics
+ * @param tickBounds the tick bounds
+ * @param y the y coordinate
+ */
protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
g.drawLine( 0, y, tickBounds.width - 2, y );
}
+ /**
+ * Paints the labels.
+ * @param g the graphics
+ */
public void paintLabels( Graphics g ) {
Rectangle labelBounds = labelRect;
@@ -1222,6 +1465,10 @@
g.translate( 0, -labelTop );
}
+ /**
+ * Paints the thumb.
+ * @param g the graphics
+ */
public void paintThumb(Graphics g) {
Rectangle knobBounds = thumbRect;
int w = knobBounds.width;
@@ -1330,6 +1577,11 @@
// Used exclusively by setThumbLocation()
private static Rectangle unionRect = new Rectangle();
+ /**
+ * Sets the thumb location.
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
public void setThumbLocation(int x, int y) {
unionRect.setBounds( thumbRect );
@@ -1339,6 +1591,10 @@
slider.repaint( unionRect.x, unionRect.y, unionRect.width, unionRect.height );
}
+ /**
+ * Scrolls by block.
+ * @param direction the direction
+ */
public void scrollByBlock(int direction) {
synchronized(slider) {
int blockIncrement =
@@ -1360,6 +1616,10 @@
}
}
+ /**
+ * Scrolls by unit.
+ * @param direction the direction
+ */
public void scrollByUnit(int direction) {
synchronized(slider) {
int delta = ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL);
@@ -1384,6 +1644,11 @@
scrollByBlock( dir );
}
+ /**
+ * Returns the x position for a value.
+ * @param value the value
+ * @return the x position for a value
+ */
protected int xPositionForValue( int value ) {
int min = slider.getMinimum();
int max = slider.getMaximum();
@@ -1409,6 +1674,11 @@
return xPosition;
}
+ /**
+ * Returns the y position for a value.
+ * @param value the value
+ * @return the y position for a value
+ */
protected int yPositionForValue( int value ) {
return yPositionForValue(value, trackRect.y, trackRect.height);
}
@@ -1605,9 +1875,16 @@
* Instantiate it only within subclasses of <code>Foo</code>.
*/
public class TrackListener extends MouseInputAdapter {
+ /** The offset */
protected transient int offset;
- protected transient int currentMouseX, currentMouseY;
+ /** Current mouse x. */
+ protected transient int currentMouseX;
+ /** Current mouse y. */
+ protected transient int currentMouseY;
+ /**
+ * {@inheritDoc}
+ */
public void mouseReleased(MouseEvent e) {
if (!slider.isEnabled()) {
return;
@@ -1736,6 +2013,11 @@
}
}
+ /**
+ * Returns if scrolling should occur
+ * @param direction the direction.
+ * @return if scrolling should occur
+ */
public boolean shouldScroll(int direction) {
Rectangle r = thumbRect;
if (slider.getOrientation() == JSlider.VERTICAL) {
@@ -1772,9 +2054,9 @@
}
/**
- * Set the models value to the position of the top/left
- * of the thumb relative to the origin of the track.
- */
+ * Set the models value to the position of the top/left
+ * of the thumb relative to the origin of the track.
+ */
public void mouseDragged(MouseEvent e) {
int thumbMiddle;
@@ -1839,6 +2121,7 @@
}
}
+ /** {@inheritDoc} */
public void mouseMoved(MouseEvent e) { }
}
@@ -1855,24 +2138,41 @@
int direction = POSITIVE_SCROLL;
boolean useBlockIncrement;
+ /**
+ * Constructs a {@code ScrollListener}
+ */
public ScrollListener() {
direction = POSITIVE_SCROLL;
useBlockIncrement = true;
}
+ /**
+ * Constructs a {@code ScrollListener}
+ * @param dir the direction
+ * @param block whether or not to scroll by block
+ */
public ScrollListener(int dir, boolean block) {
direction = dir;
useBlockIncrement = block;
}
+ /**
+ * Sets the direction.
+ * @param direction the new direction
+ */
public void setDirection(int direction) {
this.direction = direction;
}
+ /**
+ * Sets scrolling by block
+ * @param block the new scroll by block value
+ */
public void setScrollByBlock(boolean block) {
this.useBlockIncrement = block;
}
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
if (useBlockIncrement) {
scrollByBlock(direction);
@@ -1945,16 +2245,24 @@
boolean block;
JSlider slider;
+ /**
+ * Constructs an {@code ActionScroller}.
+ * @param slider a slider
+ * @param dir the direction
+ * @param block block scrolling or not
+ */
public ActionScroller( JSlider slider, int dir, boolean block) {
this.dir = dir;
this.block = block;
this.slider = slider;
}
+ /** {@inheritDoc} */
public void actionPerformed(ActionEvent e) {
SHARED_ACTION.scroll(slider, BasicSliderUI.this, dir, block);
}
+ /** {@inheritDoc} */
public boolean isEnabled() {
boolean b = true;
if (slider != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -27,6 +27,8 @@
package javax.swing.plaf.basic;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.swing.DefaultLookup;
import sun.swing.UIAction;
import javax.swing.*;
@@ -1191,7 +1193,6 @@
* Should be messaged before the dragging session starts, resets
* lastDragLocation and dividerSize.
*/
- @SuppressWarnings("deprecation")
protected void startDragging() {
Component leftC = splitPane.getLeftComponent();
Component rightC = splitPane.getRightComponent();
@@ -1199,10 +1200,11 @@
beginDragDividerLocation = getDividerLocation(splitPane);
draggingHW = false;
- if(leftC != null && (cPeer = leftC.getPeer()) != null &&
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ if(leftC != null && (cPeer = acc.getPeer(leftC)) != null &&
!(cPeer instanceof LightweightPeer)) {
draggingHW = true;
- } else if(rightC != null && (cPeer = rightC.getPeer()) != null
+ } else if(rightC != null && (cPeer = acc.getPeer(rightC)) != null
&& !(cPeer instanceof LightweightPeer)) {
draggingHW = true;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -56,22 +56,33 @@
// Instance variables initialized at installation
+ /** The tab pane */
protected JTabbedPane tabPane;
+ /** Highlight color */
protected Color highlight;
+ /** Light highlight color */
protected Color lightHighlight;
+ /** Shadow color */
protected Color shadow;
+ /** Dark shadow color */
protected Color darkShadow;
+ /** Focus color */
protected Color focus;
private Color selectedColor;
+ /** Text icon gap */
protected int textIconGap;
-
+ /** Tab run overlay */
protected int tabRunOverlay;
+ /** Tab insets */
protected Insets tabInsets;
+ /** Selected tab insets */
protected Insets selectedTabPadInsets;
+ /** Tab area insets */
protected Insets tabAreaInsets;
+ /** Content border insets */
protected Insets contentBorderInsets;
private boolean tabsOverlapBorder;
private boolean tabsOpaque = true;
@@ -120,19 +131,28 @@
// Transient variables (recalculated each time TabbedPane is layed out)
-
+ /** Tab runs */
protected int tabRuns[] = new int[10];
+ /** Run count */
protected int runCount = 0;
+ /** Selected run */
protected int selectedRun = -1;
+ /** Tab rects */
protected Rectangle rects[] = new Rectangle[0];
+ /** Maximum tab height */
protected int maxTabHeight;
+ /** Maximum tab width */
protected int maxTabWidth;
// Listeners
+ /** Tab change listener */
protected ChangeListener tabChangeListener;
+ /** Property change listener */
protected PropertyChangeListener propertyChangeListener;
+ /** Mouse change listener */
protected MouseListener mouseListener;
+ /** Focus change listener */
protected FocusListener focusListener;
// Private instance data
@@ -190,6 +210,11 @@
// UI creation
+ /**
+ * Create a UI.
+ * @param c a component
+ * @return a UI
+ */
public static ComponentUI createUI(JComponent c) {
return new BasicTabbedPaneUI();
}
@@ -355,6 +380,9 @@
tabContainer = null;
}
+ /**
+ * Install the defaults.
+ */
protected void installDefaults() {
LookAndFeel.installColorsAndFont(tabPane, "TabbedPane.background",
"TabbedPane.foreground", "TabbedPane.font");
@@ -389,6 +417,9 @@
if (contentBorderInsets == null) contentBorderInsets = new Insets(2,2,3,3);
}
+ /**
+ * Uninstall the defaults.
+ */
protected void uninstallDefaults() {
highlight = null;
lightHighlight = null;
@@ -401,6 +432,9 @@
contentBorderInsets = null;
}
+ /**
+ * Install the listeners.
+ */
protected void installListeners() {
if ((propertyChangeListener = createPropertyChangeListener()) != null) {
tabPane.addPropertyChangeListener(propertyChangeListener);
@@ -421,6 +455,9 @@
}
}
+ /**
+ * Uninstall the listeners.
+ */
protected void uninstallListeners() {
if (mouseListener != null) {
tabPane.removeMouseListener(mouseListener);
@@ -448,18 +485,34 @@
handler = null;
}
+ /**
+ * Creates a mouse listener.
+ * @return a mouse listener
+ */
protected MouseListener createMouseListener() {
return getHandler();
}
+ /**
+ * Creates a focus listener.
+ * @return a focus listener
+ */
protected FocusListener createFocusListener() {
return getHandler();
}
+ /**
+ * Creates a change listener.
+ * @return a change listener
+ */
protected ChangeListener createChangeListener() {
return getHandler();
}
+ /**
+ * Creates a property change listener.
+ * @return a property change listener
+ */
protected PropertyChangeListener createPropertyChangeListener() {
return getHandler();
}
@@ -471,6 +524,9 @@
return handler;
}
+ /**
+ * Installs the keyboard actions.
+ */
protected void installKeyboardActions() {
InputMap km = getInputMap(JComponent.
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
@@ -498,6 +554,9 @@
return null;
}
+ /**
+ * Uninstalls the keyboard actions.
+ */
protected void uninstallKeyboardActions() {
SwingUtilities.replaceUIActionMap(tabPane, null);
SwingUtilities.replaceUIInputMap(tabPane, JComponent.
@@ -844,6 +903,15 @@
}
}
+ /**
+ * Paints a tab.
+ * @param g the graphics
+ * @param tabPlacement the tab placement
+ * @param rects rectangles
+ * @param tabIndex the tab index
+ * @param iconRect the icon rectangle
+ * @param textRect the text rectangle
+ */
protected void paintTab(Graphics g, int tabPlacement,
Rectangle[] rects, int tabIndex,
Rectangle iconRect, Rectangle textRect) {
@@ -1012,6 +1080,18 @@
}
}
+ /**
+ * Laysout a label.
+ * @param tabPlacement the tab placement
+ * @param metrics the font metric
+ * @param tabIndex the tab index
+ * @param title the title
+ * @param icon the icon
+ * @param tabRect the tab rectangle
+ * @param iconRect the icon rectangle
+ * @param textRect the text rectangle
+ * @param isSelected selection status
+ */
protected void layoutLabel(int tabPlacement,
FontMetrics metrics, int tabIndex,
String title, Icon icon,
@@ -1045,6 +1125,15 @@
textRect.y += yNudge;
}
+ /**
+ * Paints an icon.
+ * @param g the graphics
+ * @param tabPlacement the tab placement
+ * @param tabIndex the tab index
+ * @param icon the icon
+ * @param iconRect the icon rectangle
+ * @param isSelected selection status
+ */
protected void paintIcon(Graphics g, int tabPlacement,
int tabIndex, Icon icon, Rectangle iconRect,
boolean isSelected ) {
@@ -1053,6 +1142,17 @@
}
}
+ /**
+ * Paints text.
+ * @param g the graphics
+ * @param tabPlacement the tab placement
+ * @param font the font
+ * @param metrics the font metrics
+ * @param tabIndex the tab index
+ * @param title the title
+ * @param textRect the text rectangle
+ * @param isSelected selection status
+ */
protected void paintText(Graphics g, int tabPlacement,
Font font, FontMetrics metrics, int tabIndex,
String title, Rectangle textRect,
@@ -1096,7 +1196,13 @@
}
}
-
+ /**
+ * Returns the tab label shift x.
+ * @param tabPlacement the tab placement
+ * @param tabIndex the tab index
+ * @param isSelected selection status
+ * @return the tab label shift x
+ */
protected int getTabLabelShiftX(int tabPlacement, int tabIndex, boolean isSelected) {
Rectangle tabRect = rects[tabIndex];
String propKey = (isSelected ? "selectedLabelShift" : "labelShift");
@@ -1115,6 +1221,13 @@
}
}
+ /**
+ * Returns the tab label shift y.
+ * @param tabPlacement the tab placement
+ * @param tabIndex the tab index
+ * @param isSelected selection status
+ * @return the tab label shift y
+ */
protected int getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected) {
Rectangle tabRect = rects[tabIndex];
int nudge = (isSelected ? DefaultLookup.getInt(tabPane, this, "TabbedPane.selectedLabelShift", -1) :
@@ -1132,6 +1245,16 @@
}
}
+ /**
+ * Paints the focus indicator.
+ * @param g the graphics
+ * @param tabPlacement the tab placement
+ * @param rects rectangles
+ * @param tabIndex the tab index
+ * @param iconRect the icon rectangle
+ * @param textRect the text rectangle
+ * @param isSelected selection status
+ */
protected void paintFocusIndicator(Graphics g, int tabPlacement,
Rectangle[] rects, int tabIndex,
Rectangle iconRect, Rectangle textRect,
@@ -1245,6 +1368,18 @@
}
}
+ /**
+ * Paints the tab background.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabIndex the index of the tab with respect to other tabs
+ * @param x the x coordinate of tab
+ * @param y the y coordinate of tab
+ * @param w the width of the tab
+ * @param h the height of the tab
+ * @param isSelected a {@code boolean} which determines whether or not
+ * the tab is selected
+ */
protected void paintTabBackground(Graphics g, int tabPlacement,
int tabIndex,
int x, int y, int w, int h,
@@ -1267,6 +1402,12 @@
}
}
+ /**
+ * Paints the content border.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param selectedIndex the tab index of the selected component
+ */
protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
int width = tabPane.getWidth();
int height = tabPane.getHeight();
@@ -1329,6 +1470,16 @@
}
+ /**
+ * Paints the content border top edge.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param selectedIndex the tab index of the selected component
+ * @param x the x coordinate of tab
+ * @param y the y coordinate of tab
+ * @param w the width of the tab
+ * @param h the height of the tab
+ */
protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
int selectedIndex,
int x, int y, int w, int h) {
@@ -1358,6 +1509,16 @@
}
}
+ /**
+ * Paints the content border left edge.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param selectedIndex the tab index of the selected component
+ * @param x the x coordinate of tab
+ * @param y the y coordinate of tab
+ * @param w the width of the tab
+ * @param h the height of the tab
+ */
protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
int selectedIndex,
int x, int y, int w, int h) {
@@ -1384,6 +1545,16 @@
}
}
+ /**
+ * Paints the content border bottom edge.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param selectedIndex the tab index of the selected component
+ * @param x the x coordinate of tab
+ * @param y the y coordinate of tab
+ * @param w the width of the tab
+ * @param h the height of the tab
+ */
protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
int selectedIndex,
int x, int y, int w, int h) {
@@ -1417,6 +1588,16 @@
}
+ /**
+ * Paints the content border right edge.
+ * @param g the graphics context in which to paint
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param selectedIndex the tab index of the selected component
+ * @param x the x coordinate of tab
+ * @param y the y coordinate of tab
+ * @param w the width of the tab
+ * @param h the height of the tab
+ */
protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
int selectedIndex,
int x, int y, int w, int h) {
@@ -1618,10 +1799,18 @@
// BasicTabbedPaneUI methods
+ /**
+ * Returns the visible component.
+ * @return the visible component
+ */
protected Component getVisibleComponent() {
return visibleComponent;
}
+ /**
+ * Sets the visible component.
+ * @param component the component
+ */
protected void setVisibleComponent(Component component) {
if (visibleComponent != null
&& visibleComponent != component
@@ -1636,6 +1825,10 @@
visibleComponent = component;
}
+ /**
+ * Assure the rectangles are created.
+ * @param tabCount the tab count
+ */
protected void assureRectsCreated(int tabCount) {
int rectArrayLen = rects.length;
if (tabCount != rectArrayLen ) {
@@ -1650,6 +1843,9 @@
}
+ /**
+ * Expands the tab runs array.
+ */
protected void expandTabRunsArray() {
int rectLen = tabRuns.length;
int[] newArray = new int[rectLen+10];
@@ -1657,6 +1853,12 @@
tabRuns = newArray;
}
+ /**
+ * Returns the run for a tab.
+ * @param tabCount the tab count
+ * @param tabIndex the tab index.
+ * @return the run for a tab
+ */
protected int getRunForTab(int tabCount, int tabIndex) {
for (int i = 0; i < runCount; i++) {
int first = tabRuns[i];
@@ -1668,6 +1870,12 @@
return 0;
}
+ /**
+ * Returns the last tab in a run.
+ * @param tabCount the tab count
+ * @param run the run
+ * @return the last tab in a run
+ */
protected int lastTabInRun(int tabCount, int run) {
if (runCount == 1) {
return tabCount - 1;
@@ -1679,22 +1887,49 @@
return tabRuns[nextRun]-1;
}
+ /**
+ * Returns the tab run overlay.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the tab run overlay
+ */
protected int getTabRunOverlay(int tabPlacement) {
return tabRunOverlay;
}
+ /**
+ * Returns the tab run indent.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param run the tab run
+ * @return the tab run indent
+ */
protected int getTabRunIndent(int tabPlacement, int run) {
return 0;
}
+ /**
+ * Returns whether or not the tab run should be padded.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param run the tab run
+ * @return whether or not the tab run should be padded
+ */
protected boolean shouldPadTabRun(int tabPlacement, int run) {
return runCount > 1;
}
+ /**
+ * Returns whether or not the tab run should be rotated.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return whether or not the tab run should be rotated
+ */
protected boolean shouldRotateTabRuns(int tabPlacement) {
return true;
}
+ /**
+ * Returns the icon for a tab.
+ * @param tabIndex the index of the tab
+ * @return the icon for a tab
+ */
protected Icon getIconForTab(int tabIndex) {
return (!tabPane.isEnabled() || !tabPane.isEnabledAt(tabIndex))?
tabPane.getDisabledIconAt(tabIndex) : tabPane.getIconAt(tabIndex);
@@ -1718,6 +1953,13 @@
return null;
}
+ /**
+ * Calculates the tab height.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabIndex the index of the tab with respect to other tabs
+ * @param fontHeight the font height
+ * @return the tab height
+ */
protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
int height = 0;
Component c = tabPane.getTabComponentAt(tabIndex);
@@ -1743,6 +1985,11 @@
return height;
}
+ /**
+ * Calculates the maximum tab height.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the maximum tab height
+ */
protected int calculateMaxTabHeight(int tabPlacement) {
FontMetrics metrics = getFontMetrics();
int tabCount = tabPane.getTabCount();
@@ -1754,6 +2001,13 @@
return result;
}
+ /**
+ * Calculates the tab width.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabIndex the index of the tab with respect to other tabs
+ * @param metrics the font metrics
+ * @return the tab width
+ */
protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
Insets tabInsets = getTabInsets(tabPlacement, tabIndex);
int width = tabInsets.left + tabInsets.right + 3;
@@ -1778,6 +2032,11 @@
return width;
}
+ /**
+ * Calculates the maximum tab width.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the maximum tab width
+ */
protected int calculateMaxTabWidth(int tabPlacement) {
FontMetrics metrics = getFontMetrics();
int tabCount = tabPane.getTabCount();
@@ -1788,6 +2047,13 @@
return result;
}
+ /**
+ * Calculates the tab area height.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param horizRunCount horizontal run count
+ * @param maxTabHeight maximum tab height
+ * @return the tab area height
+ */
protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount, int maxTabHeight) {
Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1797,6 +2063,13 @@
0);
}
+ /**
+ * Calculates the tab area width.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param vertRunCount vertical run count
+ * @param maxTabWidth maximum tab width
+ * @return the tab area width
+ */
protected int calculateTabAreaWidth(int tabPlacement, int vertRunCount, int maxTabWidth) {
Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1806,24 +2079,49 @@
0);
}
+ /**
+ * Returns the tab insets.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabIndex the tab index
+ * @return the tab insets
+ */
protected Insets getTabInsets(int tabPlacement, int tabIndex) {
return tabInsets;
}
+ /**
+ * Returns the selected tab pad insets.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the selected tab pad insets
+ */
protected Insets getSelectedTabPadInsets(int tabPlacement) {
rotateInsets(selectedTabPadInsets, currentPadInsets, tabPlacement);
return currentPadInsets;
}
+ /**
+ * Returns the tab area insets.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the pad area insets
+ */
protected Insets getTabAreaInsets(int tabPlacement) {
rotateInsets(tabAreaInsets, currentTabAreaInsets, tabPlacement);
return currentTabAreaInsets;
}
+ /**
+ * Returns the content border insets.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @return the content border insets
+ */
protected Insets getContentBorderInsets(int tabPlacement) {
return contentBorderInsets;
}
+ /**
+ * Returns the font metrics.
+ * @return the font metrics
+ */
protected FontMetrics getFontMetrics() {
Font font = tabPane.getFont();
return tabPane.getFontMetrics(font);
@@ -1832,6 +2130,10 @@
// Tab Navigation methods
+ /**
+ * Navigate the selected tab.
+ * @param direction the direction
+ */
protected void navigateSelectedTab(int direction) {
int tabPlacement = tabPane.getTabPlacement();
int current = DefaultLookup.getBoolean(tabPane, this,
@@ -1910,6 +2212,10 @@
}
}
+ /**
+ * Select the next tab in the run.
+ * @param current the current tab
+ */
protected void selectNextTabInRun(int current) {
int tabCount = tabPane.getTabCount();
int tabIndex = getNextTabIndexInRun(tabCount, current);
@@ -1920,6 +2226,10 @@
navigateTo(tabIndex);
}
+ /**
+ * Select the previous tab in the run.
+ * @param current the current tab
+ */
protected void selectPreviousTabInRun(int current) {
int tabCount = tabPane.getTabCount();
int tabIndex = getPreviousTabIndexInRun(tabCount, current);
@@ -1930,6 +2240,10 @@
navigateTo(tabIndex);
}
+ /**
+ * Select the next tab.
+ * @param current the current tab
+ */
protected void selectNextTab(int current) {
int tabIndex = getNextTabIndex(current);
@@ -1939,6 +2253,10 @@
navigateTo(tabIndex);
}
+ /**
+ * Select the previous tab.
+ * @param current the current tab
+ */
protected void selectPreviousTab(int current) {
int tabIndex = getPreviousTabIndex(current);
@@ -1948,6 +2266,12 @@
navigateTo(tabIndex);
}
+ /**
+ * Selects an adjacent run of tabs.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabIndex the index of the tab with respect to other tabs
+ * @param offset selection offset
+ */
protected void selectAdjacentRunTab(int tabPlacement,
int tabIndex, int offset) {
if ( runCount < 2 ) {
@@ -2026,6 +2350,14 @@
return focusIndex;
}
+ /**
+ * Returns the tab run offset.
+ * @param tabPlacement the placement (left, right, bottom, top) of the tab
+ * @param tabCount the tab count
+ * @param tabIndex the index of the tab with respect to other tabs
+ * @param forward forward or not
+ * @return the tab run offset
+ */
protected int getTabRunOffset(int tabPlacement, int tabCount,
int tabIndex, boolean forward) {
int run = getRunForTab(tabCount, tabIndex);
@@ -2092,15 +2424,31 @@
return offset;
}
+ /**
+ * Returns the previous tab index.
+ * @param base the base
+ * @return the previous tab index
+ */
protected int getPreviousTabIndex(int base) {
int tabIndex = (base - 1 >= 0? base - 1 : tabPane.getTabCount() - 1);
return (tabIndex >= 0? tabIndex : 0);
}
+ /**
+ * Returns the next tab index.
+ * @param base the base
+ * @return the next tab index
+ */
protected int getNextTabIndex(int base) {
return (base+1)%tabPane.getTabCount();
}
+ /**
+ * Returns the next tab index in the run.
+ * @param tabCount the tab count
+ * @param base the base
+ * @return the next tab index in the run
+ */
protected int getNextTabIndexInRun(int tabCount, int base) {
if (runCount < 2) {
return getNextTabIndex(base);
@@ -2113,6 +2461,12 @@
return next;
}
+ /**
+ * Returns the previous tab index in the run.
+ * @param tabCount the tab count
+ * @param base the base
+ * @return the previous tab index in the run
+ */
protected int getPreviousTabIndexInRun(int tabCount, int base) {
if (runCount < 2) {
return getPreviousTabIndex(base);
@@ -2125,15 +2479,31 @@
return getPreviousTabIndex(base);
}
+ /**
+ * Returns the previous tab run.
+ * @param baseRun the base run
+ * @return the previous tab run
+ */
protected int getPreviousTabRun(int baseRun) {
int runIndex = (baseRun - 1 >= 0? baseRun - 1 : runCount - 1);
return (runIndex >= 0? runIndex : 0);
}
+ /**
+ * Returns the next tab run.
+ * @param baseRun the base run
+ * @return the next tab run
+ */
protected int getNextTabRun(int baseRun) {
return (baseRun+1)%runCount;
}
+ /**
+ * Rotates the insets.
+ * @param topInsets the top insets
+ * @param targetInsets the target insets
+ * @param targetPlacement the target placement
+ */
protected static void rotateInsets(Insets topInsets, Insets targetInsets, int targetPlacement) {
switch(targetPlacement) {
@@ -2292,6 +2662,11 @@
return calculateSize(true);
}
+ /**
+ * Returns the calculated size.
+ * @param minimum use the minimum size or preferred size
+ * @return the calculated size
+ */
protected Dimension calculateSize(boolean minimum) {
int tabPlacement = tabPane.getTabPlacement();
Insets insets = tabPane.getInsets();
@@ -2346,6 +2721,12 @@
}
+ /**
+ * Returns the preferred tab area height.
+ * @param tabPlacement the tab placement
+ * @param width the width
+ * @return the preferred tab area height
+ */
protected int preferredTabAreaHeight(int tabPlacement, int width) {
FontMetrics metrics = getFontMetrics();
int tabCount = tabPane.getTabCount();
@@ -2370,6 +2751,12 @@
return total;
}
+ /**
+ * Returns the preferred tab area width.
+ * @param tabPlacement the tab placement
+ * @param height the height
+ * @return the preferred tab area widty
+ */
protected int preferredTabAreaWidth(int tabPlacement, int height) {
FontMetrics metrics = getFontMetrics();
int tabCount = tabPane.getTabCount();
@@ -2395,6 +2782,7 @@
return total;
}
+ /** {@inheritDoc} */
@SuppressWarnings("deprecation")
public void layoutContainer(Container parent) {
/* Some of the code in this method deals with changing the
@@ -2517,6 +2905,9 @@
}
}
+ /**
+ * Calculates the layout info.
+ */
public void calculateLayoutInfo() {
int tabCount = tabPane.getTabCount();
assureRectsCreated(tabCount);
@@ -2556,6 +2947,11 @@
}
}
+ /**
+ * Calculate the tab rectangles.
+ * @param tabPlacement the tab placement
+ * @param tabCount the tab count
+ */
protected void calculateTabRects(int tabPlacement, int tabCount) {
FontMetrics metrics = getFontMetrics();
Dimension size = tabPane.getSize();
@@ -2741,9 +3137,11 @@
}
- /*
- * Rotates the run-index array so that the selected run is run[0]
- */
+ /**
+ * Rotates the run-index array so that the selected run is run[0].
+ * @param tabPlacement the tab placement
+ * @param selectedRun the selected run
+ */
protected void rotateTabRuns(int tabPlacement, int selectedRun) {
for (int i = 0; i < selectedRun; i++) {
int save = tabRuns[0];
@@ -2754,6 +3152,13 @@
}
}
+ /**
+ * Normalizes the tab runs.
+ * @param tabPlacement the tab placement
+ * @param tabCount the tab count
+ * @param start the start
+ * @param max the max
+ */
protected void normalizeTabRuns(int tabPlacement, int tabCount,
int start, int max) {
boolean verticalTabRuns = (tabPlacement == LEFT || tabPlacement == RIGHT);
@@ -2822,6 +3227,13 @@
}
}
+ /**
+ * Pads the tab run.
+ * @param tabPlacement the tab placement
+ * @param start the start
+ * @param end the end
+ * @param max the max
+ */
protected void padTabRun(int tabPlacement, int start, int end, int max) {
Rectangle lastRect = rects[end];
if (tabPlacement == TOP || tabPlacement == BOTTOM) {
@@ -2853,6 +3265,11 @@
}
}
+ /**
+ * Pads selected tab.
+ * @param tabPlacement the tab placement
+ * @param selectedIndex the selected index
+ */
protected void padSelectedTab(int tabPlacement, int selectedIndex) {
if (selectedIndex >= 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java Wed Jul 05 20:33:55 2017 +0200
@@ -102,6 +102,7 @@
*/
@SuppressWarnings("serial") // Same-version serialization only
public abstract class BasicTextUI extends TextUI implements ViewFactory {
+ private static final int DEFAULT_CARET_MARGIN = 1;
/**
* Creates a new UI.
@@ -204,6 +205,12 @@
evt.getPropertyName().equals("enabled")) {
updateBackground((JTextComponent)evt.getSource());
+ } else if (evt.getPropertyName().equals("caretWidth")) {
+ Object value = evt.getNewValue();
+ if (value instanceof Number) {
+ int width = ((Number) value).intValue();
+ if (width >= 0) caretMargin = width;
+ }
}
}
@@ -794,6 +801,20 @@
installDefaults();
installDefaults2();
+ // margin required to show caret in the rightmost position
+ caretMargin = -1;
+ Object property = UIManager.get("Caret.width");
+ if (property instanceof Number) {
+ caretMargin = ((Number) property).intValue();
+ }
+ property = c.getClientProperty("caretWidth");
+ if (property instanceof Number) {
+ caretMargin = ((Number) property).intValue();
+ }
+ if (caretMargin < 0) {
+ caretMargin = DEFAULT_CARET_MARGIN;
+ }
+
// attach to the model and editor
editor.addPropertyChangeListener(updateHandler);
Document doc = editor.getDocument();
@@ -924,7 +945,7 @@
rootView.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
d.width = (int) Math.min((long) rootView.getPreferredSpan(View.X_AXIS) +
- (long) i.left + (long) i.right, Integer.MAX_VALUE);
+ (long) i.left + (long) i.right + caretMargin, Integer.MAX_VALUE);
d.height = (int) Math.min((long) rootView.getPreferredSpan(View.Y_AXIS) +
(long) i.top + (long) i.bottom, Integer.MAX_VALUE);
} finally {
@@ -1323,6 +1344,7 @@
private final DragListener dragListener = getDragListener();
private static final Position.Bias[] discardBias = new Position.Bias[1];
private DefaultCaret dropCaret;
+ private int caretMargin;
/**
* Root view that acts as a gateway between the component
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -308,9 +308,8 @@
*
* If no such listeners exist, this method returns an empty array.
*
- * @param listenerType the type of listeners requested; this parameter
- * should specify an interface that descends from
- * <code>java.util.EventListener</code>
+ * @param <T> the listener type
+ * @param listenerType the type of listeners requested
* @return an array of all objects registered as
* <code><em>Foo</em>Listener</code>s on this component,
* or an empty array if no such
@@ -905,6 +904,8 @@
* Returns the root element of the bidirectional structure for this
* document. Its children represent character runs with a given
* Unicode bidi level.
+ * @return the root element of the bidirectional structure for this
+ * document
*/
public Element getBidiRootElement() {
return bidiRoot;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -186,7 +186,7 @@
/**
* Returns the first offset to be output.
- *
+ * @return the first offset to be output
* @since 1.3
*/
public int getStartOffset() {
@@ -195,7 +195,7 @@
/**
* Returns the last offset to be output.
- *
+ * @return the last offset to be output
* @since 1.3
*/
public int getEndOffset() {
@@ -213,7 +213,7 @@
/**
* Returns the Writer that is used to output the content.
- *
+ * @return the Writer that is used to output the content
* @since 1.3
*/
protected Writer getWriter() {
@@ -257,6 +257,9 @@
* by subclasses. Its responsibility is to
* iterate over the elements and use the write()
* methods to generate output in the desired format.
+ * @throws IOException if an I/O problem has occurred
+ * @throws BadLocationException for an invalid location within
+ * the document
*/
abstract protected void write() throws IOException, BadLocationException;
@@ -314,7 +317,7 @@
/**
* Returns the maximum line length.
- *
+ * @return the maximum line length
* @since 1.3
*/
protected int getLineLength() {
@@ -323,7 +326,7 @@
/**
* Sets the current line length.
- *
+ * @param length the new line length
* @since 1.3
*/
protected void setCurrentLineLength(int length) {
@@ -333,7 +336,7 @@
/**
* Returns the current line length.
- *
+ * @return the current line length
* @since 1.3
*/
protected int getCurrentLineLength() {
@@ -344,7 +347,7 @@
* Returns true if the current line should be considered empty. This
* is true when <code>getCurrentLineLength</code> == 0 ||
* <code>indent</code> has been invoked on an empty line.
- *
+ * @return true if the current line should be considered empty
* @since 1.3
*/
protected boolean isLineEmpty() {
@@ -355,7 +358,7 @@
* Sets whether or not lines can be wrapped. This can be toggled
* during the writing of lines. For example, outputting HTML might
* set this to false when outputting a quoted string.
- *
+ * @param newValue new value for line wrapping
* @since 1.3
*/
protected void setCanWrapLines(boolean newValue) {
@@ -365,7 +368,7 @@
/**
* Returns whether or not the lines can be wrapped. If this is false
* no lineSeparator's will be output.
- *
+ * @return whether or not the lines can be wrapped
* @since 1.3
*/
protected boolean getCanWrapLines() {
@@ -385,7 +388,7 @@
/**
* Returns the amount of space to indent.
- *
+ * @return the amount of space to indent
* @since 1.3
*/
protected int getIndentSpace() {
@@ -396,7 +399,7 @@
* Sets the String used to represent newlines. This is initialized
* in the constructor from either the Document, or the System property
* line.separator.
- *
+ * @param value the new line separator
* @since 1.3
*/
public void setLineSeparator(String value) {
@@ -405,7 +408,7 @@
/**
* Returns the string used to represent newlines.
- *
+ * @return the string used to represent newlines
* @since 1.3
*/
public String getLineSeparator() {
@@ -446,7 +449,7 @@
* Returns the current indentation level. That is, the number of times
* <code>incrIndent</code> has been invoked minus the number of times
* <code>decrIndent</code> has been invoked.
- *
+ * @return the current indentation level
* @since 1.3
*/
protected int getIndentLevel() {
@@ -514,7 +517,7 @@
/**
* Writes the line separator. This invokes <code>output</code> directly
* as well as setting the <code>lineLength</code> to 0.
- *
+ * @throws IOException on any I/O error
* @since 1.3
*/
protected void writeLineSeparator() throws IOException {
@@ -539,6 +542,10 @@
* and won't fit in which case the line length will exceed
* <code>getLineLength</code>.
*
+ * @param chars characters to output
+ * @param startIndex starting index
+ * @param length length of output
+ * @throws IOException on any I/O error
* @since 1.3
*/
protected void write(char[] chars, int startIndex, int length)
@@ -686,6 +693,10 @@
* <code>writeLineSeparator</code> to write out a newline, which will
* property update the current line length.
*
+ * @param content characters to output
+ * @param start starting index
+ * @param length length of output
+ * @throws IOException on any I/O error
* @since 1.3
*/
protected void output(char[] content, int start, int length)
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -71,6 +71,7 @@
* Fetch the major axis (the axis the children
* are tiled along). This will have a value of
* either X_AXIS or Y_AXIS.
+ * @return the major axis
*/
public int getMajorAxis() {
return axis;
@@ -80,6 +81,7 @@
* Fetch the minor axis (the axis orthogonal
* to the tiled axis). This will have a value of
* either X_AXIS or Y_AXIS.
+ * @return the minor axis
*/
public int getMinorAxis() {
return (axis == X_AXIS) ? Y_AXIS : X_AXIS;
@@ -87,6 +89,7 @@
/**
* Get the top part of the margin around the view.
+ * @return the top part of the margin around the view
*/
public float getTopInset() {
return topInset;
@@ -103,6 +106,7 @@
/**
* Get the bottom part of the margin around the view.
+ * @return the bottom part of the margin around the view
*/
public float getBottomInset() {
return bottomInset;
@@ -119,6 +123,7 @@
/**
* Get the left part of the margin around the view.
+ * @return the left part of the margin around the view
*/
public float getLeftInset() {
return leftInset;
@@ -135,6 +140,7 @@
/**
* Get the right part of the margin around the view.
+ * @return the right part of the margin around the view
*/
public float getRightInset() {
return rightInset;
@@ -154,6 +160,7 @@
*
* @param axis the axis to determine the total insets along,
* either X_AXIS or Y_AXIS.
+ * @return the span along an axis that is taken up by the insets
* @since 1.4
*/
protected float getInsetSpan(int axis) {
@@ -173,6 +180,7 @@
* considered to be accurate and incremental changes will be
* added into the total as they are calculated.
*
+ * @param isEstimated new value for the estimatedMajorSpan property
* @since 1.4
*/
protected void setEstimatedMajorSpan(boolean isEstimated) {
@@ -181,6 +189,7 @@
/**
* Is the major span currently estimated?
+ * @return whether or not the major span currently estimated
*
* @since 1.4
*/
@@ -194,6 +203,8 @@
*
* @param index the child index. This should be a
* value >= 0 and < getViewCount().
+ * @return the object representing the layout state of
+ * of the child at the given index
*/
protected ChildState getChildState(int index) {
synchronized(stats) {
@@ -206,6 +217,7 @@
/**
* Fetch the queue to use for layout.
+ * @return the queue to use for layout
*/
protected LayoutQueue getLayoutQueue() {
return LayoutQueue.getDefaultQueue();
@@ -214,7 +226,9 @@
/**
* New ChildState records are created through
* this method to allow subclasses the extend
- * the ChildState records to do/hold more
+ * the ChildState records to do/hold more.
+ * @param v the view
+ * @return new child state
*/
protected ChildState createChildState(View v) {
return new ChildState(v);
@@ -237,6 +251,8 @@
* not estimated, it is updated by the given delta to reflect
* the incremental change. The delta is ignored if the
* major span is estimated.
+ * @param cs the child state
+ * @param delta the delta
*/
protected synchronized void majorRequirementChange(ChildState cs, float delta) {
if (estimatedMajorSpan == false) {
@@ -254,6 +270,7 @@
* might be the GUI thread if it is trying to update
* something immediately (such as to perform a
* model/view translation).
+ * @param cs the child state
*/
protected synchronized void minorRequirementChange(ChildState cs) {
minorChanged = true;
@@ -418,6 +435,7 @@
* where there is a child view for each child element.
*
* @param pos the position >= 0
+ * @param b the position bias
* @return index of the view representing the given position, or
* -1 if no view represents that position
*/
@@ -946,6 +964,7 @@
* This is called by a ChildState object that has
* changed it's major span. This can therefore be
* called by multiple threads.
+ * @param cs the child state
*/
public synchronized void childChanged(ChildState cs) {
if (lastValidOffset == null) {
@@ -958,6 +977,7 @@
/**
* Paint the children that intersect the clip area.
+ * @param g the rendering surface to use
*/
public synchronized void paintChildren(Graphics g) {
Rectangle clip = g.getClipBounds();
@@ -987,6 +1007,9 @@
* Fetch the allocation to use for a child view.
* This will update the offsets for all children
* not yet updated before the given index.
+ * @param index the child index
+ * @param a the allocation
+ * @return the allocation to use for a child view
*/
public synchronized Shape getChildAllocation(int index, Shape a) {
if (a == null) {
@@ -1031,6 +1054,8 @@
* Fetch the allocation to use for a child view.
* <em>This does not update the offsets in the ChildState
* records.</em>
+ * @param index the index
+ * @return the allocation to use for a child view
*/
protected Shape getChildAllocation(int index) {
ChildState cs = getChildState(index);
@@ -1057,6 +1082,7 @@
* Copy the currently allocated shape into the Rectangle
* used to store the current allocation. This would be
* a floating point rectangle in a Java2D-specific implementation.
+ * @param a the allocation
*/
protected void setAllocation(Shape a) {
if (a instanceof Rectangle) {
@@ -1072,6 +1098,7 @@
* along the major axis. Make sure that offsets are set
* on the ChildState objects up to the given target span
* past the desired offset.
+ * @param targetOffset the target offset
*
* @return index of the view representing the given visual
* location (targetOffset), or -1 if no view represents
@@ -1201,6 +1228,7 @@
* Construct a child status. This needs to start
* out as fairly large so we don't falsely begin with
* the idea that all of the children are visible.
+ * @param v the view
* @since 1.4
*/
public ChildState(View v) {
@@ -1212,7 +1240,8 @@
}
/**
- * Fetch the child view this record represents
+ * Fetch the child view this record represents.
+ * @return the child view this record represents
*/
public View getChildView() {
return child;
@@ -1322,6 +1351,7 @@
/**
* What is the span along the minor axis.
+ * @return the span along the minor axis
*/
public float getMinorSpan() {
if (max < minorSpan) {
@@ -1333,6 +1363,7 @@
/**
* What is the offset along the minor axis
+ * @return the offset along the minor axis
*/
public float getMinorOffset() {
if (max < minorSpan) {
@@ -1345,13 +1376,15 @@
/**
* What is the span along the major axis.
+ * @return the span along the major axis
*/
public float getMajorSpan() {
return span;
}
/**
- * Get the offset along the major axis
+ * Get the offset along the major axis.
+ * @return the offset along the major axis
*/
public float getMajorOffset() {
return offset;
@@ -1361,6 +1394,7 @@
* This method should only be called by the ChildLocator,
* it is simply a convenient place to hold the cached
* location.
+ * @param offs offsets
*/
public void setMajorOffset(float offs) {
offset = offs;
@@ -1394,6 +1428,7 @@
/**
* Has the child view been laid out.
+ * @return whether or not the child view been laid out.
*/
public boolean isLayoutValid() {
return (minorValid && majorValid && childSizeValid);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -134,6 +134,7 @@
/**
* Determines if the layout is valid along the given axis.
+ * @return if the layout is valid along the given axis
*
* @param axis either <code>View.X_AXIS</code> or <code>View.Y_AXIS</code>
*
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -38,15 +38,28 @@
String charSetSpec;
boolean charSetKey;
+ /**
+ * Constructs a {@code ChangedCharSetException}.
+ * @param charSetSpec name of the char set specification
+ * @param charSetKey char set key
+ */
public ChangedCharSetException(String charSetSpec, boolean charSetKey) {
this.charSetSpec = charSetSpec;
this.charSetKey = charSetKey;
}
+ /**
+ * Returns the char set specification.
+ * @return the char set specification
+ */
public String getCharSetSpec() {
return charSetSpec;
}
+ /**
+ * Returns the char set key.
+ * @return the char set key
+ */
public boolean keyEqualsCharSet() {
return charSetKey;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -85,6 +85,8 @@
* This would result from a call to setParent or
* as a result of being notified that attributes
* have changed.
+ * @return the component that is associated with
+ * this view
*/
protected Component createComponent() {
AttributeSet attr = getElement().getAttributes();
@@ -94,6 +96,7 @@
/**
* Fetch the component associated with the view.
+ * @return the component associated with the view
*/
public final Component getComponent() {
return createdC;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -825,10 +825,8 @@
* <pre>ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));</pre>
*
* If no such listeners exist, this method returns an empty array.
- *
- * @param listenerType the type of listeners requested; this parameter
- * should specify an interface that descends from
- * <code>java.util.EventListener</code>
+ * @param <T> the listener type
+ * @param listenerType the type of listeners requested
* @return an array of all objects registered as
* <code><em>Foo</em>Listener</code>s on this component,
* or an empty array if no such
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -97,6 +97,9 @@
private JFormattedTextField.AbstractFormatter nullFormat;
+ /**
+ * Constructs a {@code DefaultFormatterFactory}.
+ */
public DefaultFormatterFactory() {
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -336,11 +336,16 @@
* (if the offsets are in a highlighted region that is). For this to
* work the painter supplied must be an instance of
* LayeredHighlightPainter.
+ * @param newValue the new value
*/
public void setDrawsLayeredHighlights(boolean newValue) {
drawsLayeredHighlights = newValue;
}
+ /**
+ * Return the draw layered highlights.
+ * @return the draw layered highlights
+ */
public boolean getDrawsLayeredHighlights() {
return drawsLayeredHighlights;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -122,6 +122,7 @@
* structure (i.e. the structure reported by the
* <code>getDefaultRootElement</code> method. If the
* document contained any data it will first be removed.
+ * @param data the element data
*/
protected void create(ElementSpec[] data) {
try {
@@ -1104,6 +1105,9 @@
*/
public static final int BUFFER_SIZE_DEFAULT = 4096;
+ /**
+ * The element buffer.
+ */
protected ElementBuffer buffer;
/** Styles listening to. */
@@ -2524,6 +2528,12 @@
* Element.
*/
public static class AttributeUndoableEdit extends AbstractUndoableEdit {
+ /**
+ * Constructs an {@code AttributeUndoableEdit}.
+ * @param element the element
+ * @param newAttributes the new attributes
+ * @param isReplacing true if all the attributes in the element were removed first.
+ */
public AttributeUndoableEdit(Element element, AttributeSet newAttributes,
boolean isReplacing) {
super();
@@ -2561,13 +2571,21 @@
as.addAttributes(copy);
}
- // AttributeSet containing additional entries, must be non-mutable!
+ /**
+ * AttributeSet containing additional entries, must be non-mutable!
+ */
protected AttributeSet newAttributes;
- // Copy of the AttributeSet the Element contained.
+ /**
+ * Copy of the AttributeSet the Element contained.
+ */
protected AttributeSet copy;
- // true if all the attributes in the element were removed first.
+ /**
+ * true if all the attributes in the element were removed first.
+ */
protected boolean isReplacing;
- // Efected Element.
+ /**
+ * Affected Element.
+ */
protected Element element;
}
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -70,6 +70,8 @@
* rows are tiled (the axis of the default flow
* rows themselves). This is typically used
* by the <code>FlowStrategy</code>.
+ * @return the axis along which views should be
+ * flowed
*/
public int getFlowAxis() {
if (getAxis() == Y_AXIS) {
@@ -89,6 +91,8 @@
*
* @param index the index of the row being updated.
* This should be a value >= 0 and < getViewCount().
+ * @return the constraining span to flow against for
+ * the given child index
* @see #getFlowStart
*/
public int getFlowSpan(int index) {
@@ -104,6 +108,8 @@
* @param index the index of the row being updated.
* This should be a value >= 0 and < getViewCount().
+ * @return the location along the flow axis that the
+ * flow span will start at
* @see #getFlowSpan
*/
public int getFlowStart(int index) {
@@ -116,6 +122,8 @@
* called by the FlowStrategy when new children
* are added or removed (i.e. rows are added or
* removed) in the process of updating the flow.
+ * @return a View that should be used to hold a
+ * a rows worth of children in a flow
*/
protected abstract View createRow();
@@ -359,6 +367,7 @@
* strategy should update the appropriate changed region (which
* depends upon the strategy used for repair).
*
+ * @param fv the flow view
* @param e the change information from the associated document
* @param alloc the current allocation of the view inside of the insets.
* This value will be null if the view has not yet been displayed.
@@ -385,6 +394,7 @@
* Gives notification that something was removed from the document
* in a location that the given flow view is responsible for.
*
+ * @param fv the flow view
* @param e the change information from the associated document
* @param alloc the current allocation of the view inside of the insets.
* @see View#removeUpdate
@@ -426,6 +436,8 @@
/**
* This method gives flow strategies access to the logical
* view of the FlowView.
+ * @param fv the FlowView
+ * @return the logical view of the FlowView
*/
protected View getLogicalView(FlowView fv) {
return fv.layoutPool;
@@ -495,6 +507,7 @@
* the adjustRow method will be called to perform adjustments
* to the row to try and make it fit into the given span.
*
+ * @param fv the flow view
* @param rowIndex the index of the row to fill in with views. The
* row is assumed to be empty on entry.
* @param pos The current position in the children of
@@ -578,6 +591,7 @@
* the row. If a forced break is encountered, the
* break will be positioned there.
*
+ * @param fv the flow view
* @param rowIndex the row to adjust to the current layout
* span.
* @param desiredSpan the current layout span >= 0
@@ -654,6 +668,8 @@
* @param startOffset the start location for the view being created
* @param spanLeft the about of span left to fill in the row
* @param rowIndex the row the view will be placed into
+ * @return a view that can be used to represent the current piece
+ * of the flow
*/
protected View createView(FlowView fv, int startOffset, int spanLeft, int rowIndex) {
// Get the child view that contains the given starting position
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -758,6 +758,8 @@
* to subclasses.
*
* @param positions the UndoPosRef instances to reset
+ * @param offset where the string was inserted
+ * @param length length of inserted string
*/
@SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
protected void updateUndoPositions(Vector positions, int offset,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -102,6 +102,7 @@
* Fetch the currently installed glyph painter.
* If a painter has not yet been installed, and
* a default was not yet needed, null is returned.
+ * @return the currently installed glyph painter
*/
public GlyphPainter getGlyphPainter() {
return painter;
@@ -109,6 +110,7 @@
/**
* Sets the painter to use for rendering glyphs.
+ * @param p the painter to use for rendering glyphs
*/
public void setGlyphPainter(GlyphPainter p) {
painter = p;
@@ -144,6 +146,7 @@
* be returned. This is implemented to call
* <code>StyledDocument.getBackground</code> if the associated
* document is a styled document, otherwise it returns null.
+ * @return the background color to use to render the glyphs
*/
public Color getBackground() {
Document doc = getDocument();
@@ -165,6 +168,7 @@
* is not a StyledDocument, the associated components foreground
* color is used. If there is no associated component, null
* is returned.
+ * @return the foreground color to use to render the glyphs
*/
public Color getForeground() {
Document doc = getDocument();
@@ -187,6 +191,7 @@
* is not a StyledDocument, the associated components font
* is used. If there is no associated component, null
* is returned.
+ * @return the font that the glyphs should be based upon
*/
public Font getFont() {
Document doc = getDocument();
@@ -204,6 +209,7 @@
/**
* Determine if the glyphs should be underlined. If true,
* an underline should be drawn through the baseline.
+ * @return if the glyphs should be underlined
*/
public boolean isUnderline() {
AttributeSet attr = getAttributes();
@@ -214,6 +220,7 @@
* Determine if the glyphs should have a strikethrough
* line. If true, a line should be drawn through the center
* of the glyphs.
+ * @return if the glyphs should have a strikethrough line
*/
public boolean isStrikeThrough() {
AttributeSet attr = getAttributes();
@@ -222,6 +229,7 @@
/**
* Determine if the glyphs should be rendered as superscript.
+ * @return if the glyphs should be rendered as superscript
*/
public boolean isSubscript() {
AttributeSet attr = getAttributes();
@@ -230,6 +238,7 @@
/**
* Determine if the glyphs should be rendered as subscript.
+ * @return if the glyphs should be rendered as subscript
*/
public boolean isSuperscript() {
AttributeSet attr = getAttributes();
@@ -238,6 +247,7 @@
/**
* Fetch the TabExpander to use if tabs are present in this view.
+ * @return the TabExpander to use if tabs are present in this view
*/
public TabExpander getTabExpander() {
return expander;
@@ -1148,17 +1158,43 @@
/**
* Determine the span the glyphs given a start location
* (for tab expansion).
+ * @param v the {@code GlyphView}
+ * @param p0 the beginning position
+ * @param p1 the ending position
+ * @param e how to expand the tabs when encountered
+ * @param x the X coordinate
+ * @return the span the glyphs given a start location
*/
public abstract float getSpan(GlyphView v, int p0, int p1, TabExpander e, float x);
+ /**
+ * Returns of the height.
+ * @param v the {@code GlyphView}
+ * @return of the height
+ */
public abstract float getHeight(GlyphView v);
+ /**
+ * Returns of the ascent.
+ * @param v the {@code GlyphView}
+ * @return of the ascent
+ */
public abstract float getAscent(GlyphView v);
+ /**
+ * Returns of the descent.
+ * @param v the {@code GlyphView}
+ * @return of the descent
+ */
public abstract float getDescent(GlyphView v);
/**
* Paint the glyphs representing the given range.
+ * @param v the {@code GlyphView}
+ * @param g the graphics context
+ * @param a the current allocation of the view
+ * @param p0 the beginning position
+ * @param p1 the ending position
*/
public abstract void paint(GlyphView v, Graphics g, Shape a, int p0, int p1);
@@ -1231,6 +1267,7 @@
* @param v the <code>GlyphView</code> to provide a painter for
* @param p0 the starting document offset >= 0
* @param p1 the ending document offset >= p0
+ * @return a painter to use for the given GlyphView
*/
public GlyphPainter getPainter(GlyphView v, int p0, int p1) {
return this;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -124,6 +124,9 @@
}
+ /**
+ * A highlight.
+ */
public interface Highlight {
/**
@@ -148,5 +151,4 @@
public HighlightPainter getPainter();
}
-
};
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -536,6 +536,7 @@
* Sets the <code>NavigationFilter</code>. <code>NavigationFilter</code>
* is used by <code>DefaultCaret</code> and the default cursor movement
* actions as a way to restrict the cursor movement.
+ * @param filter the filter
*
* @since 1.4
*/
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -161,6 +161,7 @@
/**
* Fetches the <code>FontMetrics</code> used for this view.
+ * @return the <code>FontMetrics</code> used for this view
* @deprecated FontMetrics are not used for glyph rendering
* when running in the JDK.
*/
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -56,6 +56,15 @@
* Layered highlight renderer.
*/
static public abstract class LayerPainter implements Highlighter.HighlightPainter {
+ /**
+ * @return a shape
+ * @param g Graphics used to draw
+ * @param p0 starting offset of view
+ * @param p1 ending offset of view
+ * @param viewBounds Bounds of View
+ * @param editor JTextComponent
+ * @param view View instance being rendered
+ */
public abstract Shape paintLayer(Graphics g, int p0, int p1,
Shape viewBounds,JTextComponent editor,
View view);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -51,6 +51,7 @@
/**
* Fetch the default layout queue.
+ * @return the default layout queue
*/
public static LayoutQueue getDefaultQueue() {
AppContext ac = AppContext.getAppContext();
@@ -78,6 +79,7 @@
/**
* Add a task that is not needed immediately because
* the results are not believed to be visible.
+ * @param task the task to add to the queue
*/
public synchronized void addTask(Runnable task) {
if (worker == null) {
@@ -104,7 +106,8 @@
}
/**
- * Used by the worker thread to get a new task to execute
+ * Used by the worker thread to get a new task to execute.
+ * @return a task from the queue
*/
protected synchronized Runnable waitForWork() {
while (tasks.size() == 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -199,7 +199,7 @@
* Creates a <code>MaskFormatter</code> with the specified mask.
* A <code>ParseException</code>
* will be thrown if <code>mask</code> is an invalid mask.
- *
+ * @param mask the mask
* @throws ParseException if mask does not contain valid mask characters
*/
public MaskFormatter(String mask) throws ParseException {
@@ -211,6 +211,7 @@
* Sets the mask dictating the legal characters.
* This will throw a <code>ParseException</code> if <code>mask</code> is
* not valid.
+ * @param mask the mask
*
* @throws ParseException if mask does not contain valid mask characters
*/
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -246,6 +246,7 @@
* <code>rowIndex</code> gives the index of the view that corresponds
* that should be looked in.
* @param pos position into the model
+ * @param b the bias
* @param a the allocated region to render into
* @param direction one of the following values:
* <ul>
@@ -256,6 +257,7 @@
* in this method
* @param rowIndex the index of the view
* @param x the x coordinate of interest
+ * @throws BadLocationException if a bad location is encountered
* @return the closest model position to <code>x</code>
*/
// NOTE: This will not properly work if ParagraphView contains
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -520,6 +520,9 @@
* view. The longest line is checked to see if it has
* changed.
*
+ * @param changes the change information from the associated document
+ * @param a the current allocation of the view
+ * @param f the factory to use to rebuild if the view has children
* @since 1.4
*/
protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f) {
@@ -608,6 +611,7 @@
* @param a the region allocated for the view to render into
* @param line the line number to find the region of. This must
* be a valid line number in the model.
+ * @return the rectangle that represents the given line
* @since 1.4
*/
protected Rectangle lineToRect(Shape a, int line) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -479,9 +479,9 @@
* behavior of SmallAttributeSet. This can be reimplemented
* to return an AttributeSet that provides some sort of
* attribute conversion.
- *
* @param a The set of attributes to be represented in the
* the compact form.
+ * @return a compact set of attributes that might be shared
*/
protected SmallAttributeSet createSmallAttributeSet(AttributeSet a) {
return new SmallAttributeSet(a);
@@ -498,6 +498,8 @@
*
* @param a The set of attributes to be represented in the
* the larger form.
+ * @return a large set of attributes that should trade off
+ * space for time
*/
protected MutableAttributeSet createLargeAttributeSet(AttributeSet a) {
return new SimpleAttributeSet(a);
@@ -558,6 +560,9 @@
/**
* Context-specific handling of writing out attributes
+ * @param out the output stream
+ * @param a the attribute set
+ * @exception IOException on any I/O error
*/
public void writeAttributes(ObjectOutputStream out,
AttributeSet a) throws IOException {
@@ -566,6 +571,13 @@
/**
* Context-specific handling of reading in attributes
+ * @param in the object stream to read the attribute data from.
+ * @param a the attribute set to place the attribute
+ * definitions in.
+ * @exception ClassNotFoundException passed upward if encountered
+ * when reading the object stream.
+ * @exception IOException passed upward if encountered when
+ * reading the object stream.
*/
public void readAttributes(ObjectInputStream in,
MutableAttributeSet a) throws ClassNotFoundException, IOException {
@@ -685,6 +697,9 @@
/**
* Returns the object previously registered with
* <code>registerStaticAttributeKey</code>.
+ * @param key the object key
+ * @return Returns the object previously registered with
+ * {@code registerStaticAttributeKey}
*/
public static Object getStaticAttribute(Object key) {
if (thawKeyMap == null || key == null) {
@@ -694,9 +709,11 @@
}
/**
- * Returns the String that <code>key</code> will be registered with
+ * Returns the String that <code>key</code> will be registered with.
* @see #getStaticAttribute
* @see #registerStaticAttributeKey
+ * @param key the object key
+ * @return the String that {@code key} will be registered with
*/
public static Object getStaticAttributeKey(Object key) {
return key.getClass().getName() + "." + key.toString();
@@ -772,11 +789,19 @@
*/
public class SmallAttributeSet implements AttributeSet {
+ /**
+ * Constructs a SmallAttributeSet.
+ * @param attributes the attributes
+ */
public SmallAttributeSet(Object[] attributes) {
this.attributes = attributes;
updateResolveParent();
}
+ /**
+ * Constructs a SmallAttributeSet.
+ * @param attrs the attributes
+ */
public SmallAttributeSet(AttributeSet attrs) {
int n = attrs.getAttributeCount();
Object[] tbl = new Object[2 * n];
@@ -818,7 +843,8 @@
// --- Object methods -------------------------
/**
- * Returns a string showing the key/value pairs
+ * Returns a string showing the key/value pairs.
+ * @return a string showing the key/value pairs
*/
public String toString() {
String s = "{";
@@ -1382,7 +1408,8 @@
/**
* Return an array of all the listeners of the given type that
* were added to this model.
- *
+ * @param <T> the listener type
+ * @param listenerType the type of listeners requested
* @return all of the objects receiving <em>listenerType</em> notifications
* from this model
*
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -288,6 +288,8 @@
* are in <code>set</code>.<p>
* This is called anytime the caret moves over a different location.
*
+ * @param element the element
+ * @param set the attributes
*/
protected void createInputAttributes(Element element,
MutableAttributeSet set) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -58,6 +58,7 @@
/**
* Creates and returns an instance of TabSet. The array of Tabs
* passed in must be sorted in ascending order.
+ * @param tabs the TabStops to initialize the TabSet
*/
public TabSet(TabStop[] tabs) {
// PENDING(sky): If this becomes a problem, make it sort.
@@ -73,6 +74,7 @@
/**
* Returns the number of Tab instances the receiver contains.
+ * @return the number of Tab instances the receiver contains
*/
public int getTabCount() {
return (tabs == null) ? 0 : tabs.length;
@@ -82,6 +84,8 @@
* Returns the TabStop at index <code>index</code>. This will throw an
* IllegalArgumentException if <code>index</code> is outside the range
* of tabs.
+ * @param index which TapStop to return
+ * @return the TabStop at index {@code index}
*/
public TabStop getTab(int index) {
int numTabs = getTabCount();
@@ -95,6 +99,8 @@
/**
* Returns the Tab instance after <code>location</code>. This will
* return null if there are no tabs after <code>location</code>.
+ * @param location location to find a Tab after
+ * @return the Tab instance after {@code location}
*/
public TabStop getTabAfter(float location) {
int index = getTabIndexAfter(location);
@@ -103,6 +109,9 @@
}
/**
+ * Returns the index of the TabStop <code>tab</code>, or -1 if
+ * <code>tab</code> is not contained in the receiver.
+ * @param tab the TabStop to find
* @return the index of the TabStop <code>tab</code>, or -1 if
* <code>tab</code> is not contained in the receiver.
*/
@@ -117,6 +126,8 @@
/**
* Returns the index of the Tab to be used after <code>location</code>.
* This will return -1 if there are no tabs after <code>location</code>.
+ * @param location location to find a Tab after
+ * @return the index of the Tab to be used after <code>location</code>
*/
public int getTabIndexAfter(float location) {
int current, min, max;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -59,6 +59,7 @@
* RIGHT_TAB, just includes decimal as additional character to look for.
*/
public static final int ALIGN_DECIMAL = 4;
+ /** Align bar */
public static final int ALIGN_BAR = 5;
/* Bar tabs (whatever they are) are actually a separate kind of tab
@@ -66,11 +67,17 @@
properties are mutually exclusive, so the reader treats barness
as being a kind of alignment. */
+ /** Lead none */
public static final int LEAD_NONE = 0;
+ /** Lead dots */
public static final int LEAD_DOTS = 1;
+ /** Lead hyphens */
public static final int LEAD_HYPHENS = 2;
+ /** Lead underline */
public static final int LEAD_UNDERLINE = 3;
+ /** Lead thickline */
public static final int LEAD_THICKLINE = 4;
+ /** Lead equals */
public static final int LEAD_EQUALS = 5;
/** Tab type. */
@@ -82,6 +89,7 @@
/**
* Creates a tab at position <code>pos</code> with a default alignment
* and default leader.
+ * @param pos position of the tab
*/
public TabStop(float pos) {
this(pos, ALIGN_LEFT, LEAD_NONE);
@@ -90,6 +98,9 @@
/**
* Creates a tab with the specified position <code>pos</code>,
* alignment <code>align</code> and leader <code>leader</code>.
+ * @param pos position of the tab
+ * @param align alignment of the tab
+ * @param leader leader of the tab
*/
public TabStop(float pos, int align, int leader) {
alignment = align;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -311,6 +311,23 @@
justificationData);
}
+ /**
+ * Determines the relative offset into the given text that
+ * best represents the given span in the view coordinate
+ * system.
+ *
+ * @param s the source of the text
+ * @param metrics the font metrics to use for the calculation
+ * @param x0 the starting view location representing the start
+ * of the given text >= 0.
+ * @param x the target view location to translate to an
+ * offset into the text >= 0.
+ * @param e how to expand the tabs. If this value is null,
+ * tabs will be expanded as a space character.
+ * @param startOffset starting offset of the text in the document >= 0
+ * @param round whether or not to round
+ * @return the offset into the text >= 0
+ */
public static final int getTabbedTextOffset(Segment s,
FontMetrics metrics,
int x0, int x, TabExpander e,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/View.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/View.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -381,6 +381,7 @@
/**
* Removes one of the children at the given position.
* This is a convenience call to <code>replace</code>.
+ * @param i the position
* @since 1.3
*/
public void remove(int i) {
@@ -444,6 +445,7 @@
* position.
*
* @param pos the position >= 0
+ * @param b the bias
* @return index of the view representing the given position, or
* -1 if no view represents that position
* @since 1.3
@@ -480,6 +482,7 @@
* the {@code BadLocationException} will be thrown.
*
* @param pos the position to convert
+ * @param b the bias
* @param a the allocated region in which to render
* @param direction the direction from the current position that can
* be thought of as the arrow keys typically found on a keyboard.
@@ -490,6 +493,7 @@
* <li>SwingConstants.NORTH
* <li>SwingConstants.SOUTH
* </ul>
+ * @param biasRet the returned bias
* @return the location within the model that best represents the next
* location visual position
* @exception BadLocationException the given position is not a valid
@@ -662,6 +666,7 @@
* @param x the X coordinate >= 0
* @param y the Y coordinate >= 0
* @param a the allocated region in which to render
+ * @param biasReturn the returned bias
* @return the location within the model that best represents the
* given point in the view >= 0. The <code>biasReturn</code>
* argument will be
@@ -864,6 +869,7 @@
* for the purpose of rendering or layout, and should always
* access them through the <code>AttributeSet</code> returned
* by this method.
+ * @return the attributes to use when rendering
*/
public AttributeSet getAttributes() {
return elem.getAttributes();
@@ -1026,6 +1032,10 @@
* Returns the tooltip text at the specified location. The default
* implementation returns the value from the child View identified by
* the passed in location.
+ * @param x the x coordinate
+ * @param y the y coordinate
+ * @param allocation current allocation of the View.
+ * @return the tooltip text at the specified location
*
* @since 1.4
* @see JTextComponent#getToolTipText
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -228,6 +228,9 @@
* It will either break at word or character boundaries
* depending upon the break argument given at
* construction.
+ * @param p0 the starting document location
+ * @param p1 the ending document location to use
+ * @return the break position
*/
protected int calculateBreakPosition(int p0, int p1) {
int p;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. 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
@@ -94,6 +94,7 @@
/**
* Get the current maximum zone size.
+ * @return the current maximum zone size
*/
public int getMaximumZoneSize() {
return maxZoneSize;
@@ -117,6 +118,8 @@
/**
* Get the current setting of the number of zones
* allowed to be loaded at the same time.
+ * @return current setting of the number of zones
+ * allowed to be loaded at the same time
*/
public int getMaxZonesLoaded() {
return maxZonesLoaded;
@@ -184,6 +187,9 @@
* child elements of the element this view is responsible for.
* Therefore, the default implementation is to return
* true if the view has children.
+ * param zone the child view
+ * @param zone the zone
+ * @return whether or not the zone is in the loaded state.
*/
protected boolean isZoneLoaded(View zone) {
return (zone.getViewCount() > 0);
@@ -203,6 +209,8 @@
* @param p1 the end of the desired zone. This should
* be > getStartOffset() and <= getEndOffset(). This
* value should also be > p0.
+ * @return a view to represent a zone for the given range within
+ * the model
*/
protected View createZone(int p0, int p1) {
Document doc = getDocument();
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java Wed Jul 05 20:33:55 2017 +0200
@@ -126,7 +126,7 @@
if (children[i].length() > 1) {
relativeChildren[i] =
Integer.parseInt(children[i].substring(
- 0, children[i].length()-1));
+ 0, children[i].length()-1).trim());
relativeTotals += relativeChildren[i];
} else {
relativeChildren[i] = 1;
@@ -136,7 +136,11 @@
percentChildren[i] = parseDigits(children[i]);
percentTotals += percentChildren[i];
} else {
- absoluteChildren[i] = Integer.parseInt(children[i]);
+ String value = children[i].toLowerCase();
+ if (value.endsWith("px")) {
+ value = value.substring(0, value.length()-2).trim();
+ }
+ absoluteChildren[i] = Integer.parseInt(value);
}
}
if (percentTotals > 100) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java Wed Jul 05 20:33:55 2017 +0200
@@ -192,10 +192,9 @@
case '|':
case '&': {
Element e = (Element) token;
- if (valSet == null) {
+ if (valSet == null || valSet.length <= Element.getMaxIndex()) {
valSet = new boolean[Element.getMaxIndex() + 1];
val = new boolean[valSet.length];
- // All Element instances are created before this ever executes
}
if (valSet[e.index]) {
return val[e.index];
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. 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
@@ -29,8 +29,10 @@
import javax.accessibility.AccessibleContext;
import java.awt.*;
-import java.awt.KeyboardFocusManager;
-import java.awt.DefaultKeyboardFocusManager;
+import java.awt.dnd.DragSourceContext;
+import java.awt.dnd.DropTargetContext;
+import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.dnd.peer.DropTargetContextPeer;
import java.awt.event.InputEvent;
import java.awt.event.InvocationEvent;
import java.awt.event.KeyEvent;
@@ -38,6 +40,7 @@
import java.awt.image.BufferStrategy;
import java.awt.peer.ComponentPeer;
+import java.awt.peer.MenuComponentPeer;
import java.lang.reflect.InvocationTargetException;
import java.security.AccessControlContext;
@@ -171,7 +174,7 @@
/**
* Returns the peer of the component.
*/
- ComponentPeer getPeer(Component comp);
+ <T extends ComponentPeer> T getPeer(Component comp);
/**
* Sets the peer of the component to the specified peer.
@@ -481,6 +484,11 @@
void setAppContext(MenuComponent menuComp, AppContext appContext);
/**
+ * Returns the peer of the menu component.
+ */
+ <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp);
+
+ /**
* Returns the menu container of the menu component.
*/
MenuContainer getParent(MenuComponent menuComp);
@@ -781,6 +789,31 @@
}
/*
+ * An accessor object for the DragSourceContext class
+ */
+ public interface DragSourceContextAccessor {
+ /**
+ * Returns the peer of the DragSourceContext.
+ */
+ DragSourceContextPeer getPeer(DragSourceContext dsc);
+ }
+
+ /*
+ * An accessor object for the DropTargetContext class
+ */
+ public interface DropTargetContextAccessor {
+ /**
+ * Resets the DropTargetContext.
+ */
+ void reset(DropTargetContext dtc);
+ /**
+ * Sets the {@code DropTargetContextPeer}
+ */
+ void setDropTargetContextPeer(DropTargetContext dtc,
+ DropTargetContextPeer dtcp);
+ }
+
+ /*
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/
@@ -811,6 +844,8 @@
private static InvocationEventAccessor invocationEventAccessor;
private static SystemColorAccessor systemColorAccessor;
private static AccessibleContextAccessor accessibleContextAccessor;
+ private static DragSourceContextAccessor dragSourceContextAccessor;
+ private static DropTargetContextAccessor dropTargetContextAccessor;
/*
* Set an accessor object for the java.awt.Component class.
@@ -1271,4 +1306,39 @@
public static void setAccessibleContextAccessor(AccessibleContextAccessor accessor) {
AWTAccessor.accessibleContextAccessor = accessor;
}
+
+ /*
+ * Get the accessor object for the java.awt.dnd.DragSourceContext class.
+ */
+ public static DragSourceContextAccessor getDragSourceContextAccessor() {
+ if (dragSourceContextAccessor == null) {
+ unsafe.ensureClassInitialized(DragSourceContext.class);
+ }
+ return dragSourceContextAccessor;
+ }
+
+ /*
+ * Set the accessor object for the java.awt.dnd.DragSourceContext class.
+ */
+ public static void setDragSourceContextAccessor(DragSourceContextAccessor accessor) {
+ AWTAccessor.dragSourceContextAccessor = accessor;
+ }
+
+ /*
+ * Get the accessor object for the java.awt.dnd.DropTargetContext class.
+ */
+ public static DropTargetContextAccessor getDropTargetContextAccessor() {
+ if (dropTargetContextAccessor == null) {
+ unsafe.ensureClassInitialized(DropTargetContext.class);
+ }
+ return dropTargetContextAccessor;
+ }
+
+ /*
+ * Set the accessor object for the java.awt.dnd.DropTargetContext class.
+ */
+ public static void setDropTargetContextAccessor(DropTargetContextAccessor accessor) {
+ AWTAccessor.dropTargetContextAccessor = accessor;
+ }
+
}
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java Wed Jul 05 20:33:55 2017 +0200
@@ -26,7 +26,6 @@
package sun.awt;
import java.awt.AWTEvent;
-
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.HashSet;
@@ -34,9 +33,9 @@
import java.util.Map;
import java.util.Set;
+import sun.awt.util.ThreadGroupUtils;
import sun.misc.InnocuousThread;
import sun.util.logging.PlatformLogger;
-import sun.awt.util.ThreadGroupUtils;
/**
* This class is to let AWT shutdown automatically when a user is done
@@ -218,10 +217,7 @@
synchronized (activationLock) {
synchronized (mainLock) {
if (!isReadyToShutdown() && blockerThread == null) {
- AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
- activateBlockerThread();
- return null;
- });
+ activateBlockerThread();
} else {
mainLock.notifyAll();
timeoutPassed = false;
@@ -337,21 +333,22 @@
/**
* Creates and starts a new blocker thread. Doesn't return until
* the new blocker thread starts.
- *
- * Must be called with {@link sun.security.util.SecurityConstants#MODIFY_THREADGROUP_PERMISSION}
*/
private void activateBlockerThread() {
- Thread thread;
- String name = "AWT-Shutdown";
- if (System.getSecurityManager() == null) {
- thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, name);
- } else {
- thread = new InnocuousThread(this, name);
- }
- thread.setContextClassLoader(null);
- thread.setDaemon(false);
- blockerThread = thread;
- thread.start();
+ AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
+ Thread thread;
+ String name = "AWT-Shutdown";
+ if (System.getSecurityManager() == null) {
+ thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this,
+ name);
+ } else {
+ thread = new InnocuousThread(this, name);
+ }
+ thread.setContextClassLoader(null);
+ thread.setDaemon(false);
+ blockerThread = thread;
+ return thread;
+ }).start();
try {
/* Wait for the blocker thread to start. */
mainLock.wait();
--- a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java Wed Jul 05 20:33:55 2017 +0200
@@ -569,7 +569,7 @@
static final class PostShutdownEventRunnable implements Runnable {
private final AppContext appContext;
- public PostShutdownEventRunnable(AppContext ac) {
+ PostShutdownEventRunnable(AppContext ac) {
appContext = ac;
}
@@ -585,7 +585,7 @@
private final AppContext appContext;
private final Runnable runnable;
- public CreateThreadAction(AppContext ac, Runnable r) {
+ CreateThreadAction(AppContext ac, Runnable r) {
appContext = ac;
runnable = r;
}
@@ -597,7 +597,7 @@
} else {
t = new InnocuousThread(appContext.getThreadGroup(), runnable, "AppContext Disposer");
}
- t.setContextClassLoader(appContext.getContextClassLoader());
+ t.setContextClassLoader(null);
t.setPriority(Thread.NORM_PRIORITY + 1);
t.setDaemon(true);
return t;
--- a/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -25,76 +25,421 @@
package sun.awt;
-import sun.awt.datatransfer.DataTransferer;
-
import java.awt.*;
-import java.awt.dnd.*;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.InvalidDnDOperationException;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.peer.*;
+import sun.awt.datatransfer.DataTransferer;
+
+final class LightweightPeerHolder {
+ static final LightweightPeer lightweightMarker = new NullComponentPeer();
+
+ private LightweightPeerHolder() {
+ }
+}
+
/**
- * Interface for component creation support in toolkits
+ * Interface for component creation support in toolkits.
*/
public interface ComponentFactory {
- CanvasPeer createCanvas(Canvas target) throws HeadlessException;
+ /**
+ * Creates a peer for a component or container. This peer is windowless and
+ * allows the Component and Container classes to be extended directly to
+ * create windowless components that are defined entirely in java.
+ *
+ * @param target The Component to be created
+ * @return the peer for the specified component
+ */
+ default LightweightPeer createComponent(Component target) {
+ return LightweightPeerHolder.lightweightMarker;
+ }
- PanelPeer createPanel(Panel target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of the {@code Desktop} using the
+ * specified peer interface.
+ *
+ * @param target the desktop to be implemented
+ * @return this toolkit's implementation of the {@code Desktop}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Desktop
+ * @see java.awt.peer.DesktopPeer
+ * @since 1.6
+ */
+ default DesktopPeer createDesktopPeer(Desktop target) {
+ throw new HeadlessException();
+ }
- WindowPeer createWindow(Window target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Button} using the
+ * specified peer interface.
+ *
+ * @param target the button to be implemented
+ * @return this toolkit's implementation of {@code Button}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Button
+ * @see java.awt.peer.ButtonPeer
+ */
+ default ButtonPeer createButton(Button target) {
+ throw new HeadlessException();
+ }
- FramePeer createFrame(Frame target) throws HeadlessException;
-
- DialogPeer createDialog(Dialog target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code TextField} using the
+ * specified peer interface.
+ *
+ * @param target the text field to be implemented
+ * @return this toolkit's implementation of {@code TextField}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.TextField
+ * @see java.awt.peer.TextFieldPeer
+ */
+ default TextFieldPeer createTextField(TextField target) {
+ throw new HeadlessException();
+ }
- ButtonPeer createButton(Button target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Label} using the
+ * specified peer interface.
+ *
+ * @param target the label to be implemented
+ * @return this toolkit's implementation of {@code Label}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Label
+ * @see java.awt.peer.LabelPeer
+ */
+ default LabelPeer createLabel(Label target) {
+ throw new HeadlessException();
+ }
- TextFieldPeer createTextField(TextField target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code List} using the specified
+ * peer interface.
+ *
+ * @param target the list to be implemented
+ * @return this toolkit's implementation of {@code List}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.List
+ * @see java.awt.peer.ListPeer
+ */
+ default ListPeer createList(java.awt.List target) {
+ throw new HeadlessException();
+ }
- ChoicePeer createChoice(Choice target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Checkbox} using the
+ * specified peer interface.
+ *
+ * @param target the check box to be implemented
+ * @return this toolkit's implementation of {@code Checkbox}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Checkbox
+ * @see java.awt.peer.CheckboxPeer
+ */
+ default CheckboxPeer createCheckbox(Checkbox target) {
+ throw new HeadlessException();
+ }
- LabelPeer createLabel(Label target) throws HeadlessException;
-
- ListPeer createList(List target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Scrollbar} using the
+ * specified peer interface.
+ *
+ * @param target the scroll bar to be implemented
+ * @return this toolkit's implementation of {@code Scrollbar}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Scrollbar
+ * @see java.awt.peer.ScrollbarPeer
+ */
+ default ScrollbarPeer createScrollbar(Scrollbar target) {
+ throw new HeadlessException();
+ }
- CheckboxPeer createCheckbox(Checkbox target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code ScrollPane} using the
+ * specified peer interface.
+ *
+ * @param target the scroll pane to be implemented
+ * @return this toolkit's implementation of {@code ScrollPane}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.ScrollPane
+ * @see java.awt.peer.ScrollPanePeer
+ * @since 1.1
+ */
+ default ScrollPanePeer createScrollPane(ScrollPane target) {
+ throw new HeadlessException();
+ }
- ScrollbarPeer createScrollbar(Scrollbar target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code TextArea} using the
+ * specified peer interface.
+ *
+ * @param target the text area to be implemented
+ * @return this toolkit's implementation of {@code TextArea}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.TextArea
+ * @see java.awt.peer.TextAreaPeer
+ */
+ default TextAreaPeer createTextArea(TextArea target) {
+ throw new HeadlessException();
+ }
- ScrollPanePeer createScrollPane(ScrollPane target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Choice} using the
+ * specified peer interface.
+ *
+ * @param target the choice to be implemented
+ * @return this toolkit's implementation of {@code Choice}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Choice
+ * @see java.awt.peer.ChoicePeer
+ */
+ default ChoicePeer createChoice(Choice target) {
+ throw new HeadlessException();
+ }
+
+ /**
+ * Creates this toolkit's implementation of {@code Frame} using the
+ * specified peer interface.
+ *
+ * @param target the frame to be implemented
+ * @return this toolkit's implementation of {@code Frame}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Frame
+ * @see java.awt.peer.FramePeer
+ */
+ default FramePeer createFrame(Frame target) {
+ throw new HeadlessException();
+ }
- TextAreaPeer createTextArea(TextArea target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Canvas} using the
+ * specified peer interface.
+ *
+ * @param target the canvas to be implemented
+ * @return this toolkit's implementation of {@code Canvas}
+ * @see java.awt.Canvas
+ * @see java.awt.peer.CanvasPeer
+ */
+ default CanvasPeer createCanvas(Canvas target) {
+ return (CanvasPeer) createComponent(target);
+ }
- FileDialogPeer createFileDialog(FileDialog target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Panel} using the
+ * specified peer interface.
+ *
+ * @param target the panel to be implemented
+ * @return this toolkit's implementation of {@code Panel}
+ * @see java.awt.Panel
+ * @see java.awt.peer.PanelPeer
+ */
+ default PanelPeer createPanel(Panel target) {
+ return (PanelPeer) createComponent(target);
+ }
- MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Window} using the
+ * specified peer interface.
+ *
+ * @param target the window to be implemented
+ * @return this toolkit's implementation of {@code Window}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Window
+ * @see java.awt.peer.WindowPeer
+ */
+ default WindowPeer createWindow(Window target) {
+ throw new HeadlessException();
+ }
- MenuPeer createMenu(Menu target) throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Dialog} using the
+ * specified peer interface.
+ *
+ * @param target the dialog to be implemented
+ * @return this toolkit's implementation of {@code Dialog}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Dialog
+ * @see java.awt.peer.DialogPeer
+ */
+ default DialogPeer createDialog(Dialog target) {
+ throw new HeadlessException();
+ }
- PopupMenuPeer createPopupMenu(PopupMenu target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code MenuBar} using the
+ * specified peer interface.
+ *
+ * @param target the menu bar to be implemented
+ * @return this toolkit's implementation of {@code MenuBar}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.MenuBar
+ * @see java.awt.peer.MenuBarPeer
+ */
+ default MenuBarPeer createMenuBar(MenuBar target) {
+ throw new HeadlessException();
+ }
- MenuItemPeer createMenuItem(MenuItem target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Menu} using the specified
+ * peer interface.
+ *
+ * @param target the menu to be implemented
+ * @return this toolkit's implementation of {@code Menu}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.Menu
+ * @see java.awt.peer.MenuPeer
+ */
+ default MenuPeer createMenu(Menu target) {
+ throw new HeadlessException();
+ }
- CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
- throws HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code PopupMenu} using the
+ * specified peer interface.
+ *
+ * @param target the popup menu to be implemented
+ * @return this toolkit's implementation of {@code PopupMenu}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.PopupMenu
+ * @see java.awt.peer.PopupMenuPeer
+ * @since 1.1
+ */
+ default PopupMenuPeer createPopupMenu(PopupMenu target) {
+ throw new HeadlessException();
+ }
- DragSourceContextPeer createDragSourceContextPeer(
- DragGestureEvent dge)
- throws InvalidDnDOperationException, HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code MenuItem} using the
+ * specified peer interface.
+ *
+ * @param target the menu item to be implemented
+ * @return this toolkit's implementation of {@code MenuItem}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.MenuItem
+ * @see java.awt.peer.MenuItemPeer
+ */
+ default MenuItemPeer createMenuItem(MenuItem target) {
+ throw new HeadlessException();
+ }
+
+ /**
+ * Creates this toolkit's implementation of {@code FileDialog} using the
+ * specified peer interface.
+ *
+ * @param target the file dialog to be implemented
+ * @return this toolkit's implementation of {@code FileDialog}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.FileDialog
+ * @see java.awt.peer.FileDialogPeer
+ */
+ default FileDialogPeer createFileDialog(FileDialog target) {
+ throw new HeadlessException();
+ }
- FontPeer getFontPeer(String name, int style);
+ /**
+ * Creates this toolkit's implementation of {@code CheckboxMenuItem} using
+ * the specified peer interface.
+ *
+ * @param target the checkbox menu item to be implemented
+ * @return this toolkit's implementation of {@code CheckboxMenuItem}
+ * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+ * true
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ * @see java.awt.CheckboxMenuItem
+ * @see java.awt.peer.CheckboxMenuItemPeer
+ */
+ default CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
+ throw new HeadlessException();
+ }
+
+ /**
+ * Creates the peer for a DragSourceContext. Always throws
+ * InvalidDndOperationException if GraphicsEnvironment.isHeadless() returns
+ * true.
+ *
+ * @param dge the {@code DragGestureEvent}
+ * @return the peer created
+ * @see java.awt.GraphicsEnvironment#isHeadless
+ */
+ default DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
+ throw new InvalidDnDOperationException("Headless environment");
+ }
- RobotPeer createRobot(Robot target, GraphicsDevice screen)
- throws AWTException, HeadlessException;
+ /**
+ * Creates this toolkit's implementation of {@code Font} using the specified
+ * peer interface.
+ *
+ * @param name the font to be implemented
+ * @param style the style of the font, such as {@code PLAIN}, {@code BOLD},
+ * {@code ITALIC}, or a combination
+ * @return this toolkit's implementation of {@code Font}
+ * @see java.awt.Font
+ * @see java.awt.peer.FontPeer
+ * @see java.awt.GraphicsEnvironment#getAllFonts
+ */
+ default FontPeer getFontPeer(String name, int style) {
+ return null;
+ }
- DataTransferer getDataTransferer();
+ default RobotPeer createRobot(Robot target, GraphicsDevice screen)
+ throws AWTException {
+ throw new HeadlessException();
+ }
+
+ default DataTransferer getDataTransferer() {
+ return null;
+ }
+ /**
+ * Obtains this toolkit's implementation of helper class for {@code
+ * MouseInfo} operations.
+ *
+ * @return this toolkit's implementation of helper for {@code MouseInfo}
+ * @throws UnsupportedOperationException if this operation is not
+ * implemented
+ * @see java.awt.peer.MouseInfoPeer
+ * @see java.awt.MouseInfo
+ * @since 1.5
+ */
+ default MouseInfoPeer getMouseInfoPeer() {
+ throw new UnsupportedOperationException("Not implemented");
+ }
}
--- a/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -27,14 +27,12 @@
import java.awt.*;
import java.awt.event.*;
-import java.awt.image.*;
import java.awt.peer.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.util.Set;
import java.awt.AWTKeyStroke;
import java.applet.Applet;
-import sun.applet.AppletPanel;
/**
* A generic container used for embedding Java components, usually applets.
@@ -320,10 +318,9 @@
return true;
}
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized (getTreeLock()) {
- if (getPeer() == null) {
+ if (!isDisplayable()) {
setPeer(new NullEmbeddedFramePeer());
}
super.addNotify();
@@ -331,10 +328,10 @@
}
// These three functions consitute RFE 4100710. Do not remove.
- @SuppressWarnings("deprecation")
public void setCursorAllowed(boolean isCursorAllowed) {
this.isCursorAllowed = isCursorAllowed;
- getPeer().updateCursorImmediately();
+ final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+ peer.updateCursorImmediately();
}
public boolean isCursorAllowed() {
return isCursorAllowed;
@@ -345,7 +342,6 @@
: Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
}
- @SuppressWarnings("deprecation")
protected void setPeer(final ComponentPeer p){
AWTAccessor.getComponentAccessor().setPeer(EmbeddedFrame.this, p);
};
@@ -458,9 +454,8 @@
* @see #getBoundsPrivate
* @since 1.5
*/
- @SuppressWarnings("deprecation")
protected void setBoundsPrivate(int x, int y, int width, int height) {
- final FramePeer peer = (FramePeer)getPeer();
+ final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
if (peer != null) {
peer.setBoundsPrivate(x, y, width, height);
}
@@ -490,9 +485,8 @@
* @see #setBoundsPrivate
* @since 1.6
*/
- @SuppressWarnings("deprecation")
protected Rectangle getBoundsPrivate() {
- final FramePeer peer = (FramePeer)getPeer();
+ final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
if (peer != null) {
return peer.getBoundsPrivate();
}
--- a/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java Wed Jul 05 20:33:55 2017 +0200
@@ -24,10 +24,12 @@
*/
package sun.awt;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;
-import sun.nio.cs.HistoricallyNamedCharset;
public class FontDescriptor implements Cloneable {
@@ -49,11 +51,15 @@
this.exclusionRanges = exclusionRanges;
this.useUnicode = false;
Charset cs = encoder.charset();
- if (cs instanceof HistoricallyNamedCharset)
- this.charsetName = ((HistoricallyNamedCharset)cs).historicalName();
- else
- this.charsetName = cs.name();
-
+ // The following looks odd but its the only public way to get the
+ // historical name if one exists and the canonical name otherwise.
+ try {
+ ByteArrayInputStream bais = new ByteArrayInputStream(new byte[8]);
+ InputStreamReader isr = new InputStreamReader(bais, cs);
+ this.charsetName = isr.getEncoding();
+ isr.close();
+ } catch (IOException ioe) {
+ }
}
public String getNativeName() {
--- a/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. 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
@@ -25,16 +25,18 @@
package sun.awt;
-import sun.awt.datatransfer.DataTransferer;
-
import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
import java.awt.im.InputMethodHighlight;
import java.awt.im.spi.InputMethodDescriptor;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
import java.util.Map;
import java.util.Properties;
@@ -47,10 +49,15 @@
implements ComponentFactory {
private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+ @Override
public void setCurrentFocusedWindow(Window win) {}
+ @Override
public Window getCurrentFocusedWindow() { return null; }
+ @Override
public void setCurrentFocusOwner(Component comp) {}
+ @Override
public Component getCurrentFocusOwner() { return null; }
+ @Override
public void clearGlobalFocusOwner(Window activeWindow) {}
};
@@ -61,136 +68,35 @@
* Component peer objects - unsupported.
*/
- public WindowPeer createWindow(Window target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
+ @Override
public FramePeer createLightweightFrame(LightweightFrame target)
throws HeadlessException {
throw new HeadlessException();
}
- public FramePeer createFrame(Frame target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public DialogPeer createDialog(Dialog target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ButtonPeer createButton(Button target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public TextFieldPeer createTextField(TextField target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ChoicePeer createChoice(Choice target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public LabelPeer createLabel(Label target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ListPeer createList(List target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public CheckboxPeer createCheckbox(Checkbox target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ScrollbarPeer createScrollbar(Scrollbar target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ScrollPanePeer createScrollPane(ScrollPane target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public TextAreaPeer createTextArea(TextArea target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public FileDialogPeer createFileDialog(FileDialog target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuBarPeer createMenuBar(MenuBar target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuPeer createMenu(Menu target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public PopupMenuPeer createPopupMenu(PopupMenu target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuItemPeer createMenuItem(MenuItem target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public DragSourceContextPeer createDragSourceContextPeer(
- DragGestureEvent dge)
- throws InvalidDnDOperationException {
- throw new InvalidDnDOperationException("Headless environment");
- }
-
- public RobotPeer createRobot(Robot target, GraphicsDevice screen)
- throws AWTException, HeadlessException {
- throw new HeadlessException();
- }
-
+ @Override
public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
// See 6833019.
return kfmPeer;
}
+ @Override
public TrayIconPeer createTrayIcon(TrayIcon target)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public SystemTrayPeer createSystemTray(SystemTray target)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public boolean isTraySupported() {
return false;
}
- @Override
- public DataTransferer getDataTransferer() {
- return null;
- }
-
public GlobalCursorManager getGlobalCursorManager()
throws HeadlessException {
throw new HeadlessException();
@@ -199,57 +105,68 @@
/*
* Headless toolkit - unsupported.
*/
+ @Override
protected void loadSystemColors(int[] systemColors)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public ColorModel getColorModel()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getScreenResolution()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Map<java.awt.font.TextAttribute, ?> mapInputMethodHighlight(
InputMethodHighlight highlight)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getMenuShortcutKeyMask()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public boolean getLockingKeyState(int keyCode)
throws UnsupportedOperationException {
throw new HeadlessException();
}
+ @Override
public void setLockingKeyState(int keyCode, boolean on)
throws UnsupportedOperationException {
throw new HeadlessException();
}
+ @Override
public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
throws IndexOutOfBoundsException, HeadlessException {
throw new HeadlessException();
}
+ @Override
public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getMaximumCursorColors()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public <T extends DragGestureRecognizer> T
createDragGestureRecognizer(Class<T> abstractRecognizerClass,
DragSource ds, Component c,
@@ -258,41 +175,49 @@
return null;
}
+ @Override
public int getScreenHeight()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getScreenWidth()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Dimension getScreenSize()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Insets getScreenInsets(GraphicsConfiguration gc)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public void setDynamicLayout(boolean dynamic)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
protected boolean isDynamicLayoutSet()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public boolean isDynamicLayoutActive()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Clipboard getSystemClipboard()
throws HeadlessException {
throw new HeadlessException();
@@ -301,6 +226,7 @@
/*
* Printing
*/
+ @Override
public PrintJob getPrintJob(Frame frame, String jobtitle,
JobAttributes jobAttributes,
PageAttributes pageAttributes) {
@@ -312,6 +238,7 @@
"PrintJob not supported in a headless environment");
}
+ @Override
public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
{
if (frame != null) {
@@ -326,65 +253,63 @@
* Headless toolkit - supported.
*/
+ @Override
public void sync() {
// Do nothing
}
+ @Override
protected boolean syncNativeQueue(final long timeout) {
return false;
}
+ @Override
public void beep() {
// Send alert character
System.out.write(0x07);
}
-
- /*
- * Fonts
- */
- public FontPeer getFontPeer(String name, int style) {
- return (FontPeer)null;
- }
-
/*
* Modality
*/
+ @Override
public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
return false;
}
+ @Override
public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
return false;
}
+ @Override
public boolean isDesktopSupported() {
return false;
}
- public DesktopPeer createDesktopPeer(Desktop target)
- throws HeadlessException{
- throw new HeadlessException();
- }
-
public boolean isWindowOpacityControlSupported() {
return false;
}
+ @Override
public boolean isWindowShapingSupported() {
return false;
}
+ @Override
public boolean isWindowTranslucencySupported() {
return false;
}
+ @Override
public void grab(Window w) { }
+ @Override
public void ungrab(Window w) { }
protected boolean syncNativeQueue() { return false; }
+ @Override
public InputMethodDescriptor getInputMethodAdapterDescriptor()
throws AWTException
{
--- a/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -25,34 +25,43 @@
package sun.awt;
-import sun.awt.datatransfer.DataTransferer;
-
import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.event.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
+import java.awt.event.AWTEventListener;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.peer.FontPeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
import java.beans.PropertyChangeListener;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
-public class HeadlessToolkit extends Toolkit
+public final class HeadlessToolkit extends Toolkit
implements ComponentFactory, KeyboardFocusManagerPeerProvider {
private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+ @Override
public void setCurrentFocusedWindow(Window win) {}
+ @Override
public Window getCurrentFocusedWindow() { return null; }
+ @Override
public void setCurrentFocusOwner(Component comp) {}
+ @Override
public Component getCurrentFocusOwner() { return null; }
+ @Override
public void clearGlobalFocusOwner(Window activeWindow) {}
};
- private Toolkit tk;
+ private final Toolkit tk;
private ComponentFactory componentFactory;
public HeadlessToolkit(Toolkit tk) {
@@ -66,125 +75,7 @@
return tk;
}
- /*
- * Component peer objects.
- */
-
- /* Lightweight implementation of Canvas and Panel */
-
- public CanvasPeer createCanvas(Canvas target) {
- return (CanvasPeer)createComponent(target);
- }
-
- public PanelPeer createPanel(Panel target) {
- return (PanelPeer)createComponent(target);
- }
-
- /*
- * Component peer objects - unsupported.
- */
-
- public WindowPeer createWindow(Window target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public FramePeer createFrame(Frame target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public DialogPeer createDialog(Dialog target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ButtonPeer createButton(Button target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public TextFieldPeer createTextField(TextField target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ChoicePeer createChoice(Choice target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public LabelPeer createLabel(Label target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ListPeer createList(List target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public CheckboxPeer createCheckbox(Checkbox target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ScrollbarPeer createScrollbar(Scrollbar target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public ScrollPanePeer createScrollPane(ScrollPane target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public TextAreaPeer createTextArea(TextArea target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public FileDialogPeer createFileDialog(FileDialog target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuBarPeer createMenuBar(MenuBar target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuPeer createMenu(Menu target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public PopupMenuPeer createPopupMenu(PopupMenu target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public MenuItemPeer createMenuItem(MenuItem target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
- throws HeadlessException {
- throw new HeadlessException();
- }
-
- public DragSourceContextPeer createDragSourceContextPeer(
- DragGestureEvent dge)
- throws InvalidDnDOperationException {
- throw new InvalidDnDOperationException("Headless environment");
- }
-
- public RobotPeer createRobot(Robot target, GraphicsDevice screen)
- throws AWTException, HeadlessException {
- throw new HeadlessException();
- }
-
+ @Override
public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
// See 6833019.
return kfmPeer;
@@ -212,56 +103,67 @@
/*
* Headless toolkit - unsupported.
*/
+ @Override
protected void loadSystemColors(int[] systemColors)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public ColorModel getColorModel()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getScreenResolution()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Map<TextAttribute, ?> mapInputMethodHighlight(InputMethodHighlight highlight)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getMenuShortcutKeyMask()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public boolean getLockingKeyState(int keyCode)
throws UnsupportedOperationException {
throw new HeadlessException();
}
+ @Override
public void setLockingKeyState(int keyCode, boolean on)
throws UnsupportedOperationException {
throw new HeadlessException();
}
+ @Override
public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
throws IndexOutOfBoundsException, HeadlessException {
throw new HeadlessException();
}
+ @Override
public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public int getMaximumCursorColors()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public <T extends DragGestureRecognizer> T
createDragGestureRecognizer(Class<T> abstractRecognizerClass,
DragSource ds, Component c,
@@ -280,31 +182,37 @@
throw new HeadlessException();
}
+ @Override
public Dimension getScreenSize()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Insets getScreenInsets(GraphicsConfiguration gc)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public void setDynamicLayout(boolean dynamic)
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
protected boolean isDynamicLayoutSet()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public boolean isDynamicLayoutActive()
throws HeadlessException {
throw new HeadlessException();
}
+ @Override
public Clipboard getSystemClipboard()
throws HeadlessException {
throw new HeadlessException();
@@ -313,6 +221,7 @@
/*
* Printing
*/
+ @Override
public PrintJob getPrintJob(Frame frame, String jobtitle,
JobAttributes jobAttributes,
PageAttributes pageAttributes) {
@@ -323,6 +232,7 @@
throw new NullPointerException("frame must not be null");
}
+ @Override
public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
{
if (frame != null) {
@@ -336,10 +246,12 @@
* Headless toolkit - supported.
*/
+ @Override
public void sync() {
// Do nothing
}
+ @Override
public void beep() {
// Send alert character
System.out.write(0x07);
@@ -348,6 +260,7 @@
/*
* Event Queue
*/
+ @Override
public EventQueue getSystemEventQueueImpl() {
return SunToolkit.getSystemEventQueueImplPP();
}
@@ -355,39 +268,48 @@
/*
* Images.
*/
+ @Override
public int checkImage(Image img, int w, int h, ImageObserver o) {
return tk.checkImage(img, w, h, o);
}
+ @Override
public boolean prepareImage(
Image img, int w, int h, ImageObserver o) {
return tk.prepareImage(img, w, h, o);
}
+ @Override
public Image getImage(String filename) {
return tk.getImage(filename);
}
+ @Override
public Image getImage(URL url) {
return tk.getImage(url);
}
+ @Override
public Image createImage(String filename) {
return tk.createImage(filename);
}
+ @Override
public Image createImage(URL url) {
return tk.createImage(url);
}
+ @Override
public Image createImage(byte[] data, int offset, int length) {
return tk.createImage(data, offset, length);
}
+ @Override
public Image createImage(ImageProducer producer) {
return tk.createImage(producer);
}
+ @Override
public Image createImage(byte[] imagedata) {
return tk.createImage(imagedata);
}
@@ -396,7 +318,7 @@
/*
* Fonts
*/
- @SuppressWarnings("deprecation")
+ @Override
public FontPeer getFontPeer(String name, int style) {
if (componentFactory != null) {
return componentFactory.getFontPeer(name, style);
@@ -405,15 +327,12 @@
}
@Override
- public DataTransferer getDataTransferer() {
- return null;
- }
-
@SuppressWarnings("deprecation")
public FontMetrics getFontMetrics(Font font) {
return tk.getFontMetrics(font);
}
+ @Override
@SuppressWarnings("deprecation")
public String[] getFontList() {
return tk.getFontList();
@@ -423,11 +342,13 @@
* Desktop properties
*/
+ @Override
public void addPropertyChangeListener(String name,
PropertyChangeListener pcl) {
tk.addPropertyChangeListener(name, pcl);
}
+ @Override
public void removePropertyChangeListener(String name,
PropertyChangeListener pcl) {
tk.removePropertyChangeListener(name, pcl);
@@ -436,10 +357,12 @@
/*
* Modality
*/
+ @Override
public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
return false;
}
+ @Override
public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
return false;
}
@@ -447,6 +370,7 @@
/*
* Always on top
*/
+ @Override
public boolean isAlwaysOnTopSupported() {
return false;
}
@@ -455,19 +379,23 @@
* AWT Event listeners
*/
+ @Override
public void addAWTEventListener(AWTEventListener listener,
long eventMask) {
tk.addAWTEventListener(listener, eventMask);
}
+ @Override
public void removeAWTEventListener(AWTEventListener listener) {
tk.removeAWTEventListener(listener);
}
+ @Override
public AWTEventListener[] getAWTEventListeners() {
return tk.getAWTEventListeners();
}
+ @Override
public AWTEventListener[] getAWTEventListeners(long eventMask) {
return tk.getAWTEventListeners(eventMask);
}
@@ -476,11 +404,7 @@
return false;
}
- public DesktopPeer createDesktopPeer(Desktop target)
- throws HeadlessException{
- throw new HeadlessException();
- }
-
+ @Override
public boolean areExtraMouseButtonsEnabled() throws HeadlessException{
throw new HeadlessException();
}
--- a/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
package sun.awt;
import java.awt.Component;
-import java.awt.KeyboardFocusManager;
import java.awt.Window;
import java.awt.Canvas;
import java.awt.Scrollbar;
@@ -36,9 +35,7 @@
import java.awt.peer.KeyboardFocusManagerPeer;
import java.awt.peer.ComponentPeer;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.util.logging.PlatformLogger;
public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
@@ -75,7 +72,6 @@
* 1) accepts focus on click (in general)
* 2) may be a focus owner (in particular)
*/
- @SuppressWarnings("deprecation")
public static boolean shouldFocusOnClick(Component component) {
boolean acceptFocusOnClick = false;
@@ -84,6 +80,7 @@
// CANVAS & SCROLLBAR accept focus on click
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (component instanceof Canvas ||
component instanceof Scrollbar)
{
@@ -96,11 +93,10 @@
// Other components
} else {
- ComponentPeer peer = (component != null ? component.getPeer() : null);
+ ComponentPeer peer = (component != null ? acc.getPeer(component) : null);
acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
}
- return acceptFocusOnClick &&
- AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
+ return acceptFocusOnClick && acc.canBeFocusOwner(component);
}
/*
@@ -120,7 +116,7 @@
}
Component currentOwner = currentFocusOwner;
- if (currentOwner != null && currentOwner.getPeer() == null) {
+ if (currentOwner != null && !currentOwner.isDisplayable()) {
currentOwner = null;
}
if (currentOwner != null) {
--- a/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -91,7 +91,7 @@
@SuppressWarnings("deprecation")
@Override public void addNotify() {
synchronized (getTreeLock()) {
- if (getPeer() == null) {
+ if (!isDisplayable()) {
SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
try {
setPeer(stk.createLightweightFrame(this));
@@ -115,9 +115,9 @@
* @param activate if <code>true</code>, activates the frame;
* otherwise, deactivates the frame
*/
- @SuppressWarnings("deprecation")
public void emulateActivation(boolean activate) {
- ((FramePeer)getPeer()).emulateActivation(activate);
+ final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+ peer.emulateActivation(activate);
}
/**
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -47,11 +47,10 @@
g.clipRect(0, 0, bounds.width, bounds.height);
}
- @SuppressWarnings("deprecation")
public final void runOneComponent(Component comp, Rectangle bounds,
Graphics g, Shape clip,
int weightFlags) {
- if (comp == null || comp.getPeer() == null || !comp.isVisible()) {
+ if (comp == null || !comp.isDisplayable() || !comp.isVisible()) {
return;
}
boolean lightweight = comp.isLightweight();
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -26,37 +26,51 @@
package sun.awt;
import java.awt.*;
-import static java.awt.RenderingHints.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.peer.*;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
-import java.awt.event.KeyEvent;
-import java.awt.image.*;
-import java.awt.TrayIcon;
-import java.awt.SystemTray;
-import java.awt.event.InputEvent;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferInt;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.image.Raster;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.MouseInfoPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
import java.net.URL;
-import java.security.PrivilegedAction;
-import java.util.*;
+import java.security.AccessController;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+import java.util.WeakHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import sun.awt.datatransfer.DataTransferer;
-import sun.util.logging.PlatformLogger;
-import sun.misc.SoftCache;
+import sun.awt.im.InputContext;
+import sun.awt.image.ByteArrayImageSource;
+import sun.awt.image.FileImageSource;
+import sun.awt.image.ImageRepresentation;
+import sun.awt.image.MultiResolutionImage;
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.awt.image.ToolkitImage;
+import sun.awt.image.URLImageSource;
import sun.font.FontDesignMetrics;
-import sun.awt.im.InputContext;
-import sun.awt.image.*;
+import sun.misc.SoftCache;
+import sun.security.action.GetBooleanAction;
import sun.security.action.GetPropertyAction;
-import sun.security.action.GetBooleanAction;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
+import sun.util.logging.PlatformLogger;
+
+import static java.awt.RenderingHints.*;
public abstract class SunToolkit extends Toolkit
implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
@@ -134,68 +148,9 @@
return false;
}
- public abstract WindowPeer createWindow(Window target)
- throws HeadlessException;
-
- public abstract FramePeer createFrame(Frame target)
- throws HeadlessException;
-
public abstract FramePeer createLightweightFrame(LightweightFrame target)
throws HeadlessException;
- public abstract DialogPeer createDialog(Dialog target)
- throws HeadlessException;
-
- public abstract ButtonPeer createButton(Button target)
- throws HeadlessException;
-
- public abstract TextFieldPeer createTextField(TextField target)
- throws HeadlessException;
-
- public abstract ChoicePeer createChoice(Choice target)
- throws HeadlessException;
-
- public abstract LabelPeer createLabel(Label target)
- throws HeadlessException;
-
- public abstract ListPeer createList(java.awt.List target)
- throws HeadlessException;
-
- public abstract CheckboxPeer createCheckbox(Checkbox target)
- throws HeadlessException;
-
- public abstract ScrollbarPeer createScrollbar(Scrollbar target)
- throws HeadlessException;
-
- public abstract ScrollPanePeer createScrollPane(ScrollPane target)
- throws HeadlessException;
-
- public abstract TextAreaPeer createTextArea(TextArea target)
- throws HeadlessException;
-
- public abstract FileDialogPeer createFileDialog(FileDialog target)
- throws HeadlessException;
-
- public abstract MenuBarPeer createMenuBar(MenuBar target)
- throws HeadlessException;
-
- public abstract MenuPeer createMenu(Menu target)
- throws HeadlessException;
-
- public abstract PopupMenuPeer createPopupMenu(PopupMenu target)
- throws HeadlessException;
-
- public abstract MenuItemPeer createMenuItem(MenuItem target)
- throws HeadlessException;
-
- public abstract CheckboxMenuItemPeer createCheckboxMenuItem(
- CheckboxMenuItem target)
- throws HeadlessException;
-
- public abstract DragSourceContextPeer createDragSourceContextPeer(
- DragGestureEvent dge)
- throws InvalidDnDOperationException;
-
public abstract TrayIconPeer createTrayIcon(TrayIcon target)
throws HeadlessException, AWTException;
@@ -203,12 +158,7 @@
public abstract boolean isTraySupported();
- @SuppressWarnings("deprecation")
- public abstract FontPeer getFontPeer(String name, int style);
-
- public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen)
- throws AWTException;
-
+ @Override
public abstract KeyboardFocusManagerPeer getKeyboardFocusManagerPeer()
throws HeadlessException;
@@ -511,6 +461,7 @@
*/
public static void postPriorityEvent(final AWTEvent e) {
PeerEvent pe = new PeerEvent(Toolkit.getDefaultToolkit(), new Runnable() {
+ @Override
public void run() {
AWTAccessor.getAWTEventAccessor().setPosted(e);
((Component)e.getSource()).dispatchEvent(e);
@@ -561,6 +512,7 @@
final long when) {
executeOnEventHandlerThread(
new PeerEvent(target, runnable, PeerEvent.PRIORITY_EVENT) {
+ @Override
public long getWhen() {
return when;
}
@@ -636,17 +588,20 @@
return accessor.isDispatchThreadImpl(eq);
}
+ @Override
public Dimension getScreenSize() {
return new Dimension(getScreenWidth(), getScreenHeight());
}
protected abstract int getScreenWidth();
protected abstract int getScreenHeight();
+ @Override
@SuppressWarnings("deprecation")
public FontMetrics getFontMetrics(Font font) {
return FontDesignMetrics.getMetrics(font);
}
+ @Override
@SuppressWarnings("deprecation")
public String[] getFontList() {
String[] hardwiredFontList = {
@@ -660,14 +615,6 @@
return hardwiredFontList;
}
- public PanelPeer createPanel(Panel target) {
- return (PanelPeer)createComponent(target);
- }
-
- public CanvasPeer createCanvas(Canvas target) {
- return (CanvasPeer)createComponent(target);
- }
-
/**
* Disables erasing of background on the canvas before painting if
* this is supported by the current toolkit. It is recommended to
@@ -747,10 +694,12 @@
}
}
+ @Override
public Image getImage(String filename) {
return getImageFromHash(this, filename);
}
+ @Override
public Image getImage(URL url) {
return getImageFromHash(this, url);
}
@@ -784,20 +733,24 @@
}
+ @Override
public Image createImage(String filename) {
checkPermissions(filename);
return createImage(new FileImageSource(filename));
}
+ @Override
public Image createImage(URL url) {
checkPermissions(url);
return createImage(new URLImageSource(url));
}
+ @Override
public Image createImage(byte[] data, int offset, int length) {
return createImage(new ByteArrayImageSource(data, offset, length));
}
+ @Override
public Image createImage(ImageProducer producer) {
return new ToolkitImage(producer);
}
@@ -807,6 +760,7 @@
return new MultiResolutionToolkitImage(image, resolutionVariant);
}
+ @Override
public int checkImage(Image img, int w, int h, ImageObserver o) {
if (!(img instanceof ToolkitImage)) {
return ImageObserver.ALLBITS;
@@ -822,6 +776,7 @@
return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
}
+ @Override
public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
if (w == 0 || h == 0) {
return true;
@@ -888,14 +843,17 @@
}
protected static boolean imageExists(String filename) {
- checkPermissions(filename);
- return filename != null && new File(filename).exists();
+ if (filename != null) {
+ checkPermissions(filename);
+ return new File(filename).exists();
+ }
+ return false;
}
@SuppressWarnings("try")
protected static boolean imageExists(URL url) {
- checkPermissions(url);
if (url != null) {
+ checkPermissions(url);
try (InputStream is = url.openStream()) {
return true;
}catch(IOException e){
@@ -1063,6 +1021,7 @@
return (DataBufferInt)buffer;
}
+ @Override
protected EventQueue getSystemEventQueueImpl() {
return getSystemEventQueueImplPP();
}
@@ -1144,6 +1103,7 @@
* SunToolkit subclasses can override this method to return better input
* method windows.
*/
+ @Override
public Window createInputMethodWindow(String title, InputContext context) {
return new sun.awt.im.SimpleInputMethodWindow(title, context);
}
@@ -1152,6 +1112,7 @@
* Returns whether enableInputMethods should be set to true for peered
* TextComponent instances on this platform. False by default.
*/
+ @Override
public boolean enableInputMethodsForTextComponent() {
return false;
}
@@ -1193,13 +1154,15 @@
/**
* Returns the default keyboard locale of the underlying operating system
*/
+ @Override
public Locale getDefaultKeyboardLocale() {
return getStartupLocale();
}
private static DefaultMouseInfoPeer mPeer = null;
- protected synchronized MouseInfoPeer getMouseInfoPeer() {
+ @Override
+ public synchronized MouseInfoPeer getMouseInfoPeer() {
if (mPeer == null) {
mPeer = new DefaultMouseInfoPeer();
}
@@ -1331,6 +1294,7 @@
/**
* Overridden in XToolkit and WToolkit
*/
+ @Override
public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
return (modalityType == Dialog.ModalityType.MODELESS) ||
(modalityType == Dialog.ModalityType.APPLICATION_MODAL);
@@ -1339,6 +1303,7 @@
/**
* Overridden in XToolkit and WToolkit
*/
+ @Override
public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
return (exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE);
}
@@ -1386,6 +1351,7 @@
listeners.removeElement(listener);
}
+ @Override
public void modalityPushed(ModalityEvent ev) {
Iterator<ModalityListener> it = listeners.iterator();
while (it.hasNext()) {
@@ -1393,6 +1359,7 @@
}
}
+ @Override
public void modalityPopped(ModalityEvent ev) {
Iterator<ModalityListener> it = listeners.iterator();
while (it.hasNext()) {
@@ -1592,6 +1559,7 @@
synchronized(waitLock) {
postEvent(AppContext.getAppContext(),
new PeerEvent(getSystemEventQueueImpl(), null, PeerEvent.LOW_PRIORITY_EVENT) {
+ @Override
public void dispatch() {
// Here we block EDT. It could have some
// events, it should have dispatched them by
--- a/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java Wed Jul 05 20:33:55 2017 +0200
@@ -414,7 +414,7 @@
* @param formats data formats that have just been retrieved from
* this clipboard
*/
- public final void checkChange(final long[] formats) {
+ protected final void checkChange(final long[] formats) {
if (Arrays.equals(formats, currentFormats)) {
// we've been able to successfully get available on the clipboard
// DataFlavors this and previous time and they are coincident;
--- a/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -48,6 +48,8 @@
import java.util.Map;
import java.util.Arrays;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
import sun.util.logging.PlatformLogger;
import java.io.IOException;
@@ -313,9 +315,10 @@
Point hots = event.getPoint();
local = getJVMLocalSourceTransferable();
-
+ DropTargetContextAccessor acc =
+ AWTAccessor.getDropTargetContextAccessor();
if (currentDTC != null) { // some wreckage from last time
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
currentDTC = null;
}
@@ -323,7 +326,7 @@
currentDT = dt;
currentDTC = currentDT.getDropTargetContext();
- currentDTC.addNotify(this);
+ acc.setDropTargetContextPeer(currentDTC, this);
currentA = dt.getDefaultActions();
@@ -370,13 +373,15 @@
Component c = (Component)event.getSource();
DropTarget dt = c.getDropTarget();
DropTargetContext dtc = null;
+ DropTargetContextAccessor acc =
+ AWTAccessor.getDropTargetContextAccessor();
if (dt == null) {
currentDT = null;
currentT = null;
if (currentDTC != null) {
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
}
currentDTC = null;
@@ -387,13 +392,13 @@
if (dt != currentDT) {
if (currentDTC != null) {
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
}
currentDT = dt;
currentDTC = dt.getDropTargetContext();
- currentDTC.addNotify(this);
+ acc.setDropTargetContextPeer(currentDTC, this);
}
dtc = currentDTC;
@@ -409,7 +414,7 @@
currentDT = null;
currentT = null;
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
currentDTC = null;
local = null;
@@ -440,11 +445,13 @@
int id = event.getID();
DropTarget dt = c.getDropTarget();
DropTargetContext dtc = null;
+ DropTargetContextAccessor acc =
+ AWTAccessor.getDropTargetContextAccessor();
if (c.isShowing() && (dt != null) && dt.isActive()) {
if (currentDT != dt) {
if (currentDTC != null) {
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
}
currentDT = dt;
@@ -454,11 +461,11 @@
dtc = currentDT.getDropTargetContext();
if (dtc != currentDTC) {
if (currentDTC != null) {
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
}
currentDTC = dtc;
- currentDTC.addNotify(this);
+ acc.setDropTargetContextPeer(currentDTC, this);
}
currentA = currentDT.getDefaultActions();
@@ -518,13 +525,15 @@
DropTargetContext dtc = dt.getDropTargetContext();
currentDT = dt;
+ DropTargetContextAccessor acc =
+ AWTAccessor.getDropTargetContextAccessor();
if (currentDTC != null) {
- currentDTC.removeNotify();
+ acc.reset(currentDTC);
}
currentDTC = dtc;
- currentDTC.addNotify(this);
+ acc.setDropTargetContextPeer(currentDTC, this);
currentA = dt.getDefaultActions();
synchronized(_globalLock) {
@@ -687,7 +696,9 @@
throw new InvalidDnDOperationException("No Drop pending");
}
- if (currentDTC != null) currentDTC.removeNotify();
+ if (currentDTC != null) {
+ AWTAccessor.getDropTargetContextAccessor().reset(currentDTC);
+ }
currentDT = null;
currentDTC = null;
--- a/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java Wed Jul 05 20:33:55 2017 +0200
@@ -26,6 +26,7 @@
package sun.font;
import java.awt.Font;
+import java.awt.peer.FontPeer;
public abstract class FontAccess {
@@ -45,4 +46,5 @@
public abstract void setFont2D(Font f, Font2DHandle h);
public abstract void setCreatedFont(Font f);
public abstract boolean isCreatedFont(Font f);
+ public abstract FontPeer getFontPeer(Font f);
}
--- a/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java Wed Jul 05 20:33:55 2017 +0200
@@ -223,9 +223,15 @@
public void setFont(Font2D font, int style) {
if (FontUtilities.isLogging()) {
- FontUtilities.getLogger().info(
- "Request to add " + font + " with style " + style +
- " to family " + this);
+ String msg;
+ if (font instanceof CompositeFont) {
+ msg = "Request to add " + font.getFamilyName(null) +
+ " with style " + style + " to family " + familyName;
+ } else {
+ msg = "Request to add " + font +
+ " with style " + style + " to family " + this;
+ }
+ FontUtilities.getLogger().info(msg);
}
/* Allow a lower-rank font only if its a file font
* from the exact same source as any previous font.
--- a/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java Wed Jul 05 20:33:55 2017 +0200
@@ -378,12 +378,8 @@
* Suggested usage is something like :
* FontUIResource fuir;
* Font desktopFont = getDesktopFont(..);
- * // NOTE even if fontSupportsDefaultEncoding returns true because
- * // you get Tahoma and are running in an English locale, you may
- * // still want to just call getCompositeFontUIResource() anyway
- * // as only then will you get fallback fonts - eg for CJK.
* if (FontManager.fontSupportsDefaultEncoding(desktopFont)) {
- * fuir = new FontUIResource(..);
+ * fuir = new FontUIResource(desktopFont);
* } else {
* fuir = FontManager.getCompositeFontUIResource(desktopFont);
* }
--- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -568,36 +568,6 @@
}
}
- /**
- * This method is provided for internal and exclusive use by Swing.
- *
- * @param font representing a physical font.
- * @return true if the underlying font is a TrueType or OpenType font
- * that claims to support the Microsoft Windows encoding corresponding to
- * the default file.encoding property of this JRE instance.
- * This narrow value is useful for Swing to decide if the font is useful
- * for the Windows Look and Feel, or, if a composite font should be
- * used instead.
- * The information used to make the decision is obtained from
- * the ulCodePageRange fields in the font.
- * A caller can use isLogicalFont(Font) in this class before calling
- * this method and would not need to call this method if that
- * returns true.
- */
-// static boolean fontSupportsDefaultEncoding(Font font) {
-// String encoding =
-// (String) java.security.AccessController.doPrivileged(
-// new sun.security.action.GetPropertyAction("file.encoding"));
-
-// if (encoding == null || font == null) {
-// return false;
-// }
-
-// encoding = encoding.toLowerCase(Locale.ENGLISH);
-
-// return FontManager.fontSupportsEncoding(font, encoding);
-// }
-
public Font2DHandle getNewComposite(String family, int style,
Font2DHandle handle) {
--- a/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java Wed Jul 05 20:33:55 2017 +0200
@@ -244,7 +244,6 @@
public Shape usrClip;
protected Region devClip; // Actual physical drawable in pixels
- private final int devScale; // Actual physical scale factor
private int resolutionVariantHint;
// cached state for text rendering
@@ -268,8 +267,6 @@
surfaceData = sd;
foregroundColor = fg;
backgroundColor = bg;
-
- transform = new AffineTransform();
stroke = defaultStroke;
composite = defaultComposite;
paint = foregroundColor;
@@ -287,14 +284,13 @@
interpolationType = AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
- validateColor();
-
- devScale = sd.getDefaultScale();
- if (devScale != 1) {
- transform.setToScale(devScale, devScale);
+ transform = getDefaultTransform();
+ if (!transform.isIdentity()) {
invalidateTransform();
}
+ validateColor();
+
font = f;
if (font == null) {
font = defaultFont;
@@ -304,6 +300,11 @@
invalidatePipe();
}
+ private AffineTransform getDefaultTransform() {
+ GraphicsConfiguration gc = getDeviceConfiguration();
+ return (gc == null) ? new AffineTransform() : gc.getDefaultTransform();
+ }
+
protected Object clone() {
try {
SunGraphics2D g = (SunGraphics2D) super.clone();
@@ -1610,11 +1611,10 @@
*/
@Override
public void setTransform(AffineTransform Tx) {
- if ((constrainX | constrainY) == 0 && devScale == 1) {
+ if ((constrainX | constrainY) == 0) {
transform.setTransform(Tx);
} else {
- transform.setTransform(devScale, 0, 0, devScale, constrainX,
- constrainY);
+ transform.setToTranslation(constrainX, constrainY);
transform.concatenate(Tx);
}
invalidateTransform();
@@ -1674,13 +1674,11 @@
*/
@Override
public AffineTransform getTransform() {
- if ((constrainX | constrainY) == 0 && devScale == 1) {
+ if ((constrainX | constrainY) == 0) {
return new AffineTransform(transform);
}
- final double invScale = 1.0 / devScale;
- AffineTransform tx = new AffineTransform(invScale, 0, 0, invScale,
- -constrainX * invScale,
- -constrainY * invScale);
+ AffineTransform tx
+ = AffineTransform.getTranslateInstance(-constrainX, -constrainY);
tx.concatenate(transform);
return tx;
}
--- a/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java Wed Jul 05 20:33:55 2017 +0200
@@ -146,7 +146,7 @@
if (dashOn) {
if (starting) {
firstSegmentsBuffer = Helpers.widenArray(firstSegmentsBuffer,
- firstSegidx, type - 2);
+ firstSegidx, type - 2 + 1);
firstSegmentsBuffer[firstSegidx++] = type;
System.arraycopy(pts, off, firstSegmentsBuffer, firstSegidx, type - 2);
firstSegidx += type - 2;
--- a/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
import java.awt.image.BufferedImage;
+import java.awt.peer.FontPeer;
import java.awt.print.Pageable;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
@@ -93,6 +94,7 @@
import sun.awt.FontDescriptor;
import sun.awt.PlatformFont;
import sun.awt.SunToolkit;
+import sun.font.FontAccess;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
@@ -1214,13 +1216,13 @@
* of distinct PS fonts needed to draw this text. This saves us
* doing this processing one extra time.
*/
- @SuppressWarnings("deprecation")
protected int platformFontCount(Font font, String str) {
if (mFontProps == null) {
return 0;
}
- CharsetString[] acs =
- ((PlatformFont)(font.getPeer())).makeMultiCharsetString(str,false);
+ PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+ .getFontPeer(font);
+ CharsetString[] acs = peer.makeMultiCharsetString(str, false);
if (acs == null) {
/* AWT can't convert all chars so use 2D path */
return 0;
@@ -1229,7 +1231,6 @@
return (psFonts == null) ? 0 : psFonts.length;
}
- @SuppressWarnings("deprecation")
protected boolean textOut(Graphics g, String str, float x, float y,
Font mLastFont, FontRenderContext frc,
float width) {
@@ -1254,9 +1255,9 @@
if (str.length() == 0) {
return true;
}
- CharsetString[] acs =
- ((PlatformFont)
- (mLastFont.getPeer())).makeMultiCharsetString(str, false);
+ PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+ .getFontPeer(mLastFont);
+ CharsetString[] acs = peer.makeMultiCharsetString(str, false);
if (acs == null) {
/* AWT can't convert all chars so use 2D path */
return false;
--- a/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Wed Jul 05 20:33:55 2017 +0200
@@ -559,18 +559,8 @@
}
Media media = (Media)attSet.get(Media.class);
- if (media == null) {
- media =
- (Media)service.getDefaultAttributeValue(Media.class);
- }
- if (!(media instanceof MediaSizeName)) {
- media = MediaSizeName.NA_LETTER;
- }
- MediaSize size =
- MediaSize.getMediaSizeForName((MediaSizeName)media);
- if (size == null) {
- size = MediaSize.NA.LETTER;
- }
+ MediaSize size = getMediaSize(media, service, page);
+
Paper paper = new Paper();
float dim[] = size.getSize(1); //units == 1 to avoid FP error
double w = Math.rint((dim[0]*72.0)/Size2DSyntax.INCH);
@@ -579,40 +569,58 @@
MediaPrintableArea area =
(MediaPrintableArea)
attSet.get(MediaPrintableArea.class);
- double ix, iw, iy, ih;
-
- if (area != null) {
- // Should pass in same unit as updatePageAttributes
- // to avoid rounding off errors.
- ix = Math.rint(
- area.getX(MediaPrintableArea.INCH) * DPI);
- iy = Math.rint(
- area.getY(MediaPrintableArea.INCH) * DPI);
- iw = Math.rint(
- area.getWidth(MediaPrintableArea.INCH) * DPI);
- ih = Math.rint(
- area.getHeight(MediaPrintableArea.INCH) * DPI);
+ if (area == null) {
+ area = getDefaultPrintableArea(page, w, h);
}
- else {
- if (w >= 72.0 * 6.0) {
- ix = 72.0;
- iw = w - 2 * 72.0;
- } else {
- ix = w / 6.0;
- iw = w * 0.75;
- }
- if (h >= 72.0 * 6.0) {
- iy = 72.0;
- ih = h - 2 * 72.0;
- } else {
- iy = h / 6.0;
- ih = h * 0.75;
- }
- }
+
+ double ix, iw, iy, ih;
+ // Should pass in same unit as updatePageAttributes
+ // to avoid rounding off errors.
+ ix = Math.rint(
+ area.getX(MediaPrintableArea.INCH) * DPI);
+ iy = Math.rint(
+ area.getY(MediaPrintableArea.INCH) * DPI);
+ iw = Math.rint(
+ area.getWidth(MediaPrintableArea.INCH) * DPI);
+ ih = Math.rint(
+ area.getHeight(MediaPrintableArea.INCH) * DPI);
paper.setImageableArea(ix, iy, iw, ih);
page.setPaper(paper);
return page;
}
+ protected MediaSize getMediaSize(Media media, PrintService service,
+ PageFormat page) {
+ if (media == null) {
+ media = (Media)service.getDefaultAttributeValue(Media.class);
+ }
+ if (!(media instanceof MediaSizeName)) {
+ media = MediaSizeName.NA_LETTER;
+ }
+ MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+ return size != null ? size : MediaSize.NA.LETTER;
+ }
+
+ protected MediaPrintableArea getDefaultPrintableArea(PageFormat page,
+ double w, double h) {
+ double ix, iw, iy, ih;
+ if (w >= 72.0 * 6.0) {
+ ix = 72.0;
+ iw = w - 2 * 72.0;
+ } else {
+ ix = w / 6.0;
+ iw = w * 0.75;
+ }
+ if (h >= 72.0 * 6.0) {
+ iy = 72.0;
+ ih = h - 2 * 72.0;
+ } else {
+ iy = h / 6.0;
+ ih = h * 0.75;
+ }
+
+ return new MediaPrintableArea((float) (ix / DPI), (float) (iy / DPI),
+ (float) (iw / DPI), (float) (ih / DPI), MediaPrintableArea.INCH);
+ }
protected void updatePageAttributes(PrintService service,
PageFormat page) {
@@ -809,7 +817,7 @@
}
protected PageFormat getPageFormatFromAttributes() {
- if (attributes == null) {
+ if (attributes == null || attributes.isEmpty()) {
return null;
}
return attributeToPageFormat(getPrintService(), this.attributes);
--- a/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -61,6 +61,7 @@
import javax.swing.RootPaneContainer;
import javax.swing.SwingUtilities;
+import sun.awt.AWTAccessor;
import sun.awt.DisplayChangedListener;
import sun.awt.LightweightFrame;
import sun.security.action.GetPropertyAction;
@@ -241,7 +242,6 @@
}
@Override
- @SuppressWarnings("deprecation")
public void notifyDisplayChanged(final int scaleFactor) {
if (scaleFactor != this.scaleFactor) {
if (!copyBufferEnabled) content.paintLock();
@@ -254,18 +254,19 @@
}
this.scaleFactor = scaleFactor;
}
- if (getPeer() instanceof DisplayChangedListener) {
- ((DisplayChangedListener)getPeer()).displayChanged();
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+ if (peer instanceof DisplayChangedListener) {
+ ((DisplayChangedListener) peer).displayChanged();
}
repaint();
}
@Override
- @SuppressWarnings("deprecation")
public void addNotify() {
super.addNotify();
- if (getPeer() instanceof DisplayChangedListener) {
- ((DisplayChangedListener)getPeer()).displayChanged();
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+ if (peer instanceof DisplayChangedListener) {
+ ((DisplayChangedListener) peer).displayChanged();
}
}
--- a/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c Wed Jul 05 20:33:55 2017 +0200
@@ -147,20 +147,6 @@
#define FILEDATACACHESIZE 1024
-/* NB: is it ever called? */
-static void CloseTTFontFileFunc(FT_Stream stream) {
- FTScalerInfo *scalerInfo = (FTScalerInfo *) stream->pathname.pointer;
- JNIEnv* env = scalerInfo->env;
- jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
- jfieldID platNameField =
- (*env)->GetFieldID(env, tmpClass, "platName", "Ljava/lang/String;");
- jstring platName = (*env)->GetObjectField(env,
- scalerInfo->font2D,
- platNameField);
- const char *name = JNU_GetStringPlatformChars(env, platName, NULL);
- JNU_ReleaseStringPlatformChars(env, platName, name);
-}
-
static unsigned long ReadTTFontFileFunc(FT_Stream stream,
unsigned long offset,
unsigned char* destBuffer,
@@ -305,7 +291,7 @@
ftstream->size = filesize;
ftstream->pos = 0;
ftstream->read = (FT_Stream_IoFunc) ReadTTFontFileFunc;
- ftstream->close = (FT_Stream_CloseFunc) CloseTTFontFileFunc;
+ ftstream->close = NULL;
ftstream->pathname.pointer = (void *) scalerInfo;
memset(&ft_open_args, 0, sizeof(FT_Open_Args));
--- a/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h Wed Jul 05 20:33:55 2017 +0200
@@ -34,7 +34,6 @@
#define X_BSD 4
#define X_MACOSX 5
-#define X_AARCH64 9
// **********************************
// Make sure you set X_PLATFORM defines correctly.
// Everything depends upon this flag being setup correctly.
--- a/jdk/src/java.desktop/share/native/liblcms/cmscgats.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscgats.c Wed Jul 05 20:33:55 2017 +0200
@@ -353,7 +353,7 @@
"XYZ_X", // X component of tristimulus data
"XYZ_Y", // Y component of tristimulus data
"XYZ_Z", // Z component of tristimulus data
- "XYY_X" // x component of chromaticity data
+ "XYY_X", // x component of chromaticity data
"XYY_Y", // y component of chromaticity data
"XYY_CAPY", // Y component of tristimulus data
"LAB_L", // L* component of Lab data
@@ -2334,7 +2334,6 @@
it8 = (cmsIT8*) hIT8;
it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1);
- if (it8 ->MemoryBlock == NULL) return NULL;
strncpy(it8 ->MemoryBlock, (const char*) Ptr, len);
it8 ->MemoryBlock[len] = 0;
--- a/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c Wed Jul 05 20:33:55 2017 +0200
@@ -298,6 +298,8 @@
{
cmsMAT3 Scale, m1, m2, m3, m4;
+ // TODO: Follow Marc Mahy's recommendation to check if CHAD is same by using M1*M2 == M2*M1. If so, do nothing.
+
// Adaptation state
if (AdaptationState == 1.0) {
@@ -559,7 +561,7 @@
cmsHPROFILE hProfile;
cmsMAT3 m;
cmsVEC3 off;
- cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut, CurrentColorSpace;
+ cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut = cmsSigLabData, CurrentColorSpace;
cmsProfileClassSignature ClassSig;
cmsUInt32Number i, Intent;
@@ -661,6 +663,22 @@
CurrentColorSpace = ColorSpaceOut;
}
+ // Check for non-negatives clip
+ if (dwFlags & cmsFLAGS_NONEGATIVES) {
+
+ if (ColorSpaceOut == cmsSigGrayData ||
+ ColorSpaceOut == cmsSigRgbData ||
+ ColorSpaceOut == cmsSigCmykData) {
+
+ cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOf(ColorSpaceOut));
+ if (clip == NULL) goto Error;
+
+ if (!cmsPipelineInsertStage(Result, cmsAT_END, clip))
+ goto Error;
+ }
+
+ }
+
return Result;
Error:
@@ -1074,7 +1092,7 @@
if (TheIntents[i] == INTENT_PERCEPTUAL || TheIntents[i] == INTENT_SATURATION) {
// Force BPC for V4 profiles in perceptual and saturation
- if (cmsGetProfileVersion(hProfiles[i]) >= 4.0)
+ if (cmsGetEncodedICCversion(hProfiles[i]) >= 0x4000000)
BPC[i] = TRUE;
}
}
--- a/jdk/src/java.desktop/share/native/liblcms/cmserr.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmserr.c Wed Jul 05 20:33:55 2017 +0200
@@ -30,7 +30,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2012 Marti Maria Saguer
+// Copyright (c) 1998-2015 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -54,6 +54,13 @@
#include "lcms2_internal.h"
+
+// This function is here to help applications to prevent mixing lcms versions on header and shared objects.
+int CMSEXPORT cmsGetEncodedCMMversion(void)
+{
+ return LCMS_VERSION;
+}
+
// I am so tired about incompatibilities on those functions that here are some replacements
// that hopefully would be fully portable.
--- a/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c Wed Jul 05 20:33:55 2017 +0200
@@ -958,7 +958,7 @@
Rest = c1 * rx + c2 * ry + c3 * rz;
- Tmp1[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+ Tmp1[OutChan] = (cmsUInt16Number) ( c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
@@ -1022,7 +1022,7 @@
Rest = c1 * rx + c2 * ry + c3 * rz;
- Tmp2[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+ Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
}
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio0.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio0.c Wed Jul 05 20:33:55 2017 +0200
@@ -482,6 +482,14 @@
// -------------------------------------------------------------------------------------------------------
+cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile)
+{
+ _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile;
+
+ if (Icc == NULL) return NULL;
+ return Icc->IOhandler;
+}
+
// Creates an empty structure holding all required parameters
cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID)
{
@@ -651,25 +659,26 @@
return _cmsSearchTag(Icc, sig, FALSE) >= 0;
}
-/*
- * Enforces that the profile version is per. spec.
- * Operates on the big endian bytes from the profile.
- * Called before converting to platform endianness.
- * Byte 0 is BCD major version, so max 9.
- * Byte 1 is 2 BCD digits, one per nibble.
- * Reserved bytes 2 & 3 must be 0.
- */
-static cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
+
+
+// Enforces that the profile version is per. spec.
+// Operates on the big endian bytes from the profile.
+// Called before converting to platform endianness.
+// Byte 0 is BCD major version, so max 9.
+// Byte 1 is 2 BCD digits, one per nibble.
+// Reserved bytes 2 & 3 must be 0.
+static
+cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
{
- cmsUInt8Number* pByte = (cmsUInt8Number*)&DWord;
+ cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord;
cmsUInt8Number temp1;
cmsUInt8Number temp2;
- if (*pByte > 0x09) *pByte = (cmsUInt8Number)9;
+ if (*pByte > 0x09) *pByte = (cmsUInt8Number) 0x09;
temp1 = *(pByte+1) & 0xf0;
temp2 = *(pByte+1) & 0x0f;
if (temp1 > 0x90) temp1 = 0x90;
- if (temp2 > 9) temp2 = 0x09;
+ if (temp2 > 0x09) temp2 = 0x09;
*(pByte+1) = (cmsUInt8Number)(temp1 | temp2);
*(pByte+2) = (cmsUInt8Number)0;
*(pByte+3) = (cmsUInt8Number)0;
@@ -1167,6 +1176,8 @@
return cmsOpenProfileFromMemTHR(NULL, MemPtr, dwSize);
}
+
+
// Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig
static
cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig)
@@ -1197,7 +1208,7 @@
// Reach here if we are copying a tag from a disk-based ICC profile which has not been modified by user.
// In this case a blind copy of the block data is performed
- if (FileOrig != NULL && FileOrig->IOhandler != NULL && Icc -> TagOffsets[i]) {
+ if (FileOrig != NULL && Icc -> TagOffsets[i]) {
cmsUInt32Number TagSize = FileOrig -> TagSizes[i];
cmsUInt32Number TagOffset = FileOrig -> TagOffsets[i];
@@ -1846,13 +1857,12 @@
// Similar to the anterior. This function allows to write directly to the ICC profile any data, without
// checking anything. As a rule, mixing Raw with cooked doesn't work, so writting a tag as raw and then reading
-// it as cooked without serializing does result into an error. If that is wha you want, you will need to dump
+// it as cooked without serializing does result into an error. If that is what you want, you will need to dump
// the profile to memry or disk and then reopen it.
cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size)
{
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
int i;
- cmsBool ret = TRUE;
if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0;
@@ -1868,11 +1878,15 @@
// Keep a copy of the block
Icc ->TagPtrs[i] = _cmsDupMem(Icc ->ContextID, data, Size);
- if (!Icc ->TagPtrs[i]) ret = FALSE;
Icc ->TagSizes[i] = Size;
_cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex);
- return ret;
+
+ if (Icc->TagPtrs[i] == NULL) {
+ Icc->TagNames[i] = 0;
+ return FALSE;
+ }
+ return TRUE;
}
// Using this function you can collapse several tag entries to the same block in the profile
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio1.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio1.c Wed Jul 05 20:33:55 2017 +0200
@@ -339,8 +339,8 @@
cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent)
{
cmsTagTypeSignature OriginalType;
- cmsTagSignature tag16 = Device2PCS16[Intent];
- cmsTagSignature tagFloat = Device2PCSFloat[Intent];
+ cmsTagSignature tag16;
+ cmsTagSignature tagFloat;
cmsContext ContextID = cmsGetProfileContextID(hProfile);
// On named color, take the appropiate tag
@@ -369,6 +369,9 @@
// matter other LUT are present and have precedence. Intent = -1 means just this.
if (Intent != -1) {
+ tag16 = Device2PCS16[Intent];
+ tagFloat = Device2PCSFloat[Intent];
+
if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence
// Floating point LUT are always V4, but the encoding range is no
@@ -611,13 +614,16 @@
cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent)
{
cmsTagTypeSignature OriginalType;
- cmsTagSignature tag16 = PCS2Device16[Intent];
- cmsTagSignature tagFloat = PCS2DeviceFloat[Intent];
- cmsContext ContextID = cmsGetProfileContextID(hProfile);
+ cmsTagSignature tag16;
+ cmsTagSignature tagFloat;
+ cmsContext ContextID = cmsGetProfileContextID(hProfile);
if (Intent != -1) {
+ tag16 = PCS2Device16[Intent];
+ tagFloat = PCS2DeviceFloat[Intent];
+
if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence
// Floating point LUT are always V4
@@ -935,7 +941,7 @@
{
if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, seq)) return FALSE;
- if (cmsGetProfileVersion(hProfile) >= 4.0) {
+ if (cmsGetEncodedICCversion(hProfile) >= 0x4000000) {
if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, seq)) return FALSE;
}
--- a/jdk/src/java.desktop/share/native/liblcms/cmslut.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmslut.c Wed Jul 05 20:33:55 2017 +0200
@@ -1154,7 +1154,23 @@
return mpe;
}
+// Clips values smaller than zero
+static
+void Clipper(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe)
+{
+ cmsUInt32Number i;
+ for (i = 0; i < mpe->InputChannels; i++) {
+ cmsFloat32Number n = In[i];
+ Out[i] = n < 0 ? 0 : n;
+ }
+}
+
+cmsStage* _cmsStageClipNegatives(cmsContext ContextID, int nChannels)
+{
+ return _cmsStageAllocPlaceholder(ContextID, cmsSigClipNegativesElemType,
+ nChannels, nChannels, Clipper, NULL, NULL, NULL);
+}
// ********************************************************************************
// Type cmsSigXYZ2LabElemType
--- a/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c Wed Jul 05 20:33:55 2017 +0200
@@ -543,8 +543,9 @@
v ->nColors = 0;
v ->ContextID = ContextID;
- while (v -> Allocated < n)
- GrowNamedColorList(v);
+ while (v -> Allocated < n){
+ if (!GrowNamedColorList(v)) return NULL;
+ }
strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1);
strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1);
@@ -573,8 +574,9 @@
if (NewNC == NULL) return NULL;
// For really large tables we need this
- while (NewNC ->Allocated < v ->Allocated)
- GrowNamedColorList(NewNC);
+ while (NewNC ->Allocated < v ->Allocated){
+ if (!GrowNamedColorList(NewNC)) return NULL;
+ }
memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix));
memmove(NewNC ->Suffix, v ->Suffix, sizeof(v ->Suffix));
--- a/jdk/src/java.desktop/share/native/liblcms/cmsopt.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsopt.c Wed Jul 05 20:33:55 2017 +0200
@@ -192,6 +192,88 @@
return AnyOpt;
}
+
+static
+cmsBool CloseEnoughFloat(cmsFloat64Number a, cmsFloat64Number b)
+{
+ return fabs(b - a) < 0.00001f;
+}
+
+static
+cmsBool isFloatMatrixIdentity(const cmsMAT3* a)
+{
+ cmsMAT3 Identity;
+ int i, j;
+
+ _cmsMAT3identity(&Identity);
+
+ for (i = 0; i < 3; i++)
+ for (j = 0; j < 3; j++)
+ if (!CloseEnoughFloat(a->v[i].n[j], Identity.v[i].n[j])) return FALSE;
+
+ return TRUE;
+}
+// if two adjacent matrices are found, multiply them.
+static
+cmsBool _MultiplyMatrix(cmsPipeline* Lut)
+{
+ cmsStage** pt1;
+ cmsStage** pt2;
+ cmsStage* chain;
+ cmsBool AnyOpt = FALSE;
+
+ pt1 = &Lut->Elements;
+ if (*pt1 == NULL) return AnyOpt;
+
+ while (*pt1 != NULL) {
+
+ pt2 = &((*pt1)->Next);
+ if (*pt2 == NULL) return AnyOpt;
+
+ if ((*pt1)->Implements == cmsSigMatrixElemType && (*pt2)->Implements == cmsSigMatrixElemType) {
+
+ // Get both matrices
+ _cmsStageMatrixData* m1 = (_cmsStageMatrixData*) cmsStageData(*pt1);
+ _cmsStageMatrixData* m2 = (_cmsStageMatrixData*) cmsStageData(*pt2);
+ cmsMAT3 res;
+
+ // Input offset and output offset should be zero to use this optimization
+ if (m1->Offset != NULL || m2 ->Offset != NULL ||
+ cmsStageInputChannels(*pt1) != 3 || cmsStageOutputChannels(*pt1) != 3 ||
+ cmsStageInputChannels(*pt2) != 3 || cmsStageOutputChannels(*pt2) != 3)
+ return FALSE;
+
+ // Multiply both matrices to get the result
+ _cmsMAT3per(&res, (cmsMAT3*)m2->Double, (cmsMAT3*)m1->Double);
+
+ // Get the next in chain afer the matrices
+ chain = (*pt2)->Next;
+
+ // Remove both matrices
+ _RemoveElement(pt2);
+ _RemoveElement(pt1);
+
+ // Now what if the result is a plain identity?
+ if (!isFloatMatrixIdentity(&res)) {
+
+ // We can not get rid of full matrix
+ cmsStage* Multmat = cmsStageAllocMatrix(Lut->ContextID, 3, 3, (const cmsFloat64Number*) &res, NULL);
+
+ // Recover the chain
+ Multmat->Next = chain;
+ *pt1 = Multmat;
+ }
+
+ AnyOpt = TRUE;
+ }
+ else
+ pt1 = &((*pt1)->Next);
+ }
+
+ return AnyOpt;
+}
+
+
// Preoptimize just gets rif of no-ops coming paired. Conversion from v2 to v4 followed
// by a v4 to v2 and vice-versa. The elements are then discarded.
static
@@ -224,6 +306,9 @@
// Remove float pcs Lab conversions
Opt |= _Remove2Op(Lut, cmsSigXYZ2FloatPCS, cmsSigFloatPCS2XYZ);
+ // Simplify matrix.
+ Opt |= _MultiplyMatrix(Lut);
+
if (Opt) AnyOpt = TRUE;
} while (Opt);
@@ -280,12 +365,12 @@
void* Prelin16dup(cmsContext ContextID, const void* ptr)
{
Prelin16Data* p16 = (Prelin16Data*) ptr;
- Prelin16Data* Duped = _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
+ Prelin16Data* Duped = (Prelin16Data*) _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
if (Duped == NULL) return NULL;
- Duped ->EvalCurveOut16 = _cmsDupMem(ContextID, p16 ->EvalCurveOut16, p16 ->nOutputs * sizeof(_cmsInterpFn16));
- Duped ->ParamsCurveOut16 = _cmsDupMem(ContextID, p16 ->ParamsCurveOut16, p16 ->nOutputs * sizeof(cmsInterpParams* ));
+ Duped->EvalCurveOut16 = (_cmsInterpFn16*) _cmsDupMem(ContextID, p16->EvalCurveOut16, p16->nOutputs * sizeof(_cmsInterpFn16));
+ Duped->ParamsCurveOut16 = (cmsInterpParams**)_cmsDupMem(ContextID, p16->ParamsCurveOut16, p16->nOutputs * sizeof(cmsInterpParams*));
return Duped;
}
@@ -298,7 +383,7 @@
int nOutputs, cmsToneCurve** Out )
{
int i;
- Prelin16Data* p16 = _cmsMallocZero(ContextID, sizeof(Prelin16Data));
+ Prelin16Data* p16 = (Prelin16Data*)_cmsMallocZero(ContextID, sizeof(Prelin16Data));
if (p16 == NULL) return NULL;
p16 ->nInputs = nInputs;
@@ -787,7 +872,7 @@
cmsS15Fixed16Number v1, v2, v3;
Prelin8Data* p8;
- p8 = _cmsMallocZero(ContextID, sizeof(Prelin8Data));
+ p8 = (Prelin8Data*)_cmsMallocZero(ContextID, sizeof(Prelin8Data));
if (p8 == NULL) return NULL;
// Since this only works for 8 bit input, values comes always as x * 257,
@@ -861,7 +946,7 @@
Prelin8Data* p8 = (Prelin8Data*) D;
register const cmsInterpParams* p = p8 ->p;
int TotalOut = p -> nOutputs;
- const cmsUInt16Number* LutTable = p -> Table;
+ const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table;
r = Input[0] >> 8;
g = Input[1] >> 8;
@@ -1180,29 +1265,15 @@
static
void* CurvesDup(cmsContext ContextID, const void* ptr)
{
- Curves16Data* Data = _cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
- int i, j;
+ Curves16Data* Data = (Curves16Data*)_cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
+ int i;
if (Data == NULL) return NULL;
- Data ->Curves = _cmsDupMem(ContextID, Data ->Curves, Data ->nCurves * sizeof(cmsUInt16Number*));
- if (Data -> Curves == NULL) {
- _cmsFree(ContextID, Data);
- return NULL;
- }
+ Data->Curves = (cmsUInt16Number**) _cmsDupMem(ContextID, Data->Curves, Data->nCurves * sizeof(cmsUInt16Number*));
for (i=0; i < Data -> nCurves; i++) {
- Data ->Curves[i] = _cmsDupMem(ContextID, Data ->Curves[i], Data -> nElements * sizeof(cmsUInt16Number));
- if (Data->Curves[i] == NULL) {
-
- for (j=0; j < i; j++) {
- _cmsFree(ContextID, Data->Curves[j]);
- }
- _cmsFree(ContextID, Data->Curves);
- _cmsFree(ContextID, Data);
- return NULL;
- }
-
+ Data->Curves[i] = (cmsUInt16Number*) _cmsDupMem(ContextID, Data->Curves[i], Data->nElements * sizeof(cmsUInt16Number));
}
return (void*) Data;
@@ -1215,18 +1286,18 @@
int i, j;
Curves16Data* c16;
- c16 = _cmsMallocZero(ContextID, sizeof(Curves16Data));
+ c16 = (Curves16Data*)_cmsMallocZero(ContextID, sizeof(Curves16Data));
if (c16 == NULL) return NULL;
c16 ->nCurves = nCurves;
c16 ->nElements = nElements;
- c16 ->Curves = _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
+ c16->Curves = (cmsUInt16Number**) _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
if (c16 ->Curves == NULL) return NULL;
for (i=0; i < nCurves; i++) {
- c16->Curves[i] = _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
+ c16->Curves[i] = (cmsUInt16Number*) _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
if (c16->Curves[i] == NULL) {
@@ -1574,49 +1645,83 @@
}
// 8 bits on input allows matrix-shaper boot up to 25 Mpixels per second on RGB. That's fast!
-// TODO: Allow a third matrix for abs. colorimetric
static
cmsBool OptimizeMatrixShaper(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags)
{
- cmsStage* Curve1, *Curve2;
- cmsStage* Matrix1, *Matrix2;
- _cmsStageMatrixData* Data1;
- _cmsStageMatrixData* Data2;
- cmsMAT3 res;
- cmsBool IdentityMat;
- cmsPipeline* Dest, *Src;
+ cmsStage* Curve1, *Curve2;
+ cmsStage* Matrix1, *Matrix2;
+ cmsMAT3 res;
+ cmsBool IdentityMat;
+ cmsPipeline* Dest, *Src;
+ cmsFloat64Number* Offset;
+
+ // Only works on RGB to RGB
+ if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+
+ // Only works on 8 bit input
+ if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+
+ // Seems suitable, proceed
+ Src = *Lut;
- // Only works on RGB to RGB
- if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+ // Check for:
+ //
+ // shaper-matrix-matrix-shaper
+ // shaper-matrix-shaper
+ //
+ // Both of those constructs are possible (first because abs. colorimetric).
+ // additionally, In the first case, the input matrix offset should be zero.
- // Only works on 8 bit input
- if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+ IdentityMat = FALSE;
+ if (cmsPipelineCheckAndRetreiveStages(Src, 4,
+ cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+ &Curve1, &Matrix1, &Matrix2, &Curve2)) {
- // Seems suitable, proceed
- Src = *Lut;
+ // Get both matrices
+ _cmsStageMatrixData* Data1 = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+ _cmsStageMatrixData* Data2 = (_cmsStageMatrixData*)cmsStageData(Matrix2);
+
+ // Input offset should be zero
+ if (Data1->Offset != NULL) return FALSE;
- // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
- if (!cmsPipelineCheckAndRetreiveStages(Src, 4,
- cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
- &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+ // Multiply both matrices to get the result
+ _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double);
+
+ // Only 2nd matrix has offset, or it is zero
+ Offset = Data2->Offset;
- // Get both matrices
- Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1);
- Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2);
+ // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+ if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
+
+ // We can get rid of full matrix
+ IdentityMat = TRUE;
+ }
+
+ }
+ else {
- // Input offset should be zero
- if (Data1 ->Offset != NULL) return FALSE;
+ if (cmsPipelineCheckAndRetreiveStages(Src, 3,
+ cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+ &Curve1, &Matrix1, &Curve2)) {
- // Multiply both matrices to get the result
- _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double);
+ _cmsStageMatrixData* Data = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+
+ // Copy the matrix to our result
+ memcpy(&res, Data->Double, sizeof(res));
- // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
- IdentityMat = FALSE;
- if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) {
+ // Preserve the Odffset (may be NULL as a zero offset)
+ Offset = Data->Offset;
+
+ if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
- // We can get rid of full matrix
- IdentityMat = TRUE;
- }
+ // We can get rid of full matrix
+ IdentityMat = TRUE;
+ }
+ }
+ else
+ return FALSE; // Not optimizeable this time
+
+ }
// Allocate an empty LUT
Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels);
@@ -1626,9 +1731,12 @@
if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)))
goto Error;
- if (!IdentityMat)
- if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest ->ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)))
- goto Error;
+ if (!IdentityMat) {
+
+ if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest->ContextID, 3, 3, (const cmsFloat64Number*)&res, Offset)))
+ goto Error;
+ }
+
if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)))
goto Error;
@@ -1646,7 +1754,7 @@
*dwFlags |= cmsFLAGS_NOCACHE;
// Setup the optimizarion routines
- SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves, OutputFormat);
+ SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Offset, mpeC2->TheCurves, OutputFormat);
}
cmsPipelineFree(Src);
--- a/jdk/src/java.desktop/share/native/liblcms/cmspack.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspack.c Wed Jul 05 20:33:55 2017 +0200
@@ -2438,9 +2438,6 @@
((cmsFloat64Number*) output)[i + start] = v;
}
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsFloat64Number);
- }
if (Extra == 0 && SwapFirst) {
@@ -2451,7 +2448,7 @@
if (T_PLANAR(info -> OutputFormat))
return output + sizeof(cmsFloat64Number);
else
- return output + nChan * sizeof(cmsFloat64Number);
+ return output + (nChan + Extra) * sizeof(cmsFloat64Number);
}
@@ -2462,50 +2459,47 @@
register cmsUInt8Number* output,
register cmsUInt32Number Stride)
{
- int nChan = T_CHANNELS(info -> OutputFormat);
- int DoSwap = T_DOSWAP(info ->OutputFormat);
- int Reverse = T_FLAVOR(info ->OutputFormat);
- int Extra = T_EXTRA(info -> OutputFormat);
- int SwapFirst = T_SWAPFIRST(info -> OutputFormat);
- int Planar = T_PLANAR(info -> OutputFormat);
- int ExtraFirst = DoSwap ^ SwapFirst;
- cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0;
- cmsFloat64Number v = 0;
- cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
- int i, start = 0;
-
- if (ExtraFirst)
- start = Extra;
-
- for (i=0; i < nChan; i++) {
-
- int index = DoSwap ? (nChan - i - 1) : i;
-
- v = (cmsFloat64Number) wOut[index] / maximum;
-
- if (Reverse)
- v = maximum - v;
-
- if (Planar)
- ((cmsFloat32Number*) output)[(i + start ) * Stride]= (cmsFloat32Number) v;
- else
- ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
- }
-
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsFloat32Number);
- }
-
- if (Extra == 0 && SwapFirst) {
-
- memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
- *swap1 = (cmsFloat32Number) v;
- }
-
- if (T_PLANAR(info -> OutputFormat))
- return output + sizeof(cmsFloat32Number);
- else
- return output + nChan * sizeof(cmsFloat32Number);
+ int nChan = T_CHANNELS(info->OutputFormat);
+ int DoSwap = T_DOSWAP(info->OutputFormat);
+ int Reverse = T_FLAVOR(info->OutputFormat);
+ int Extra = T_EXTRA(info->OutputFormat);
+ int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+ int Planar = T_PLANAR(info->OutputFormat);
+ int ExtraFirst = DoSwap ^ SwapFirst;
+ cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 655.35 : 65535.0;
+ cmsFloat64Number v = 0;
+ cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+ int i, start = 0;
+
+ if (ExtraFirst)
+ start = Extra;
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ v = (cmsFloat64Number)wOut[index] / maximum;
+
+ if (Reverse)
+ v = maximum - v;
+
+ if (Planar)
+ ((cmsFloat32Number*)output)[(i + start) * Stride] = (cmsFloat32Number)v;
+ else
+ ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+ }
+
+
+ if (Extra == 0 && SwapFirst) {
+
+ memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+ *swap1 = (cmsFloat32Number)v;
+ }
+
+ if (T_PLANAR(info->OutputFormat))
+ return output + sizeof(cmsFloat32Number);
+ else
+ return output + (nChan + Extra) * sizeof(cmsFloat32Number);
}
@@ -2518,50 +2512,47 @@
cmsUInt8Number* output,
cmsUInt32Number Stride)
{
- int nChan = T_CHANNELS(info -> OutputFormat);
- int DoSwap = T_DOSWAP(info ->OutputFormat);
- int Reverse = T_FLAVOR(info ->OutputFormat);
- int Extra = T_EXTRA(info -> OutputFormat);
- int SwapFirst = T_SWAPFIRST(info -> OutputFormat);
- int Planar = T_PLANAR(info -> OutputFormat);
- int ExtraFirst = DoSwap ^ SwapFirst;
- cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
- cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
- cmsFloat64Number v = 0;
- int i, start = 0;
-
- if (ExtraFirst)
- start = Extra;
-
- for (i=0; i < nChan; i++) {
-
- int index = DoSwap ? (nChan - i - 1) : i;
-
- v = wOut[index] * maximum;
-
- if (Reverse)
- v = maximum - v;
-
- if (Planar)
- ((cmsFloat32Number*) output)[(i + start)* Stride]= (cmsFloat32Number) v;
- else
- ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
- }
-
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsFloat32Number);
- }
-
- if (Extra == 0 && SwapFirst) {
-
- memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
- *swap1 = (cmsFloat32Number) v;
- }
-
- if (T_PLANAR(info -> OutputFormat))
- return output + sizeof(cmsFloat32Number);
- else
- return output + nChan * sizeof(cmsFloat32Number);
+ int nChan = T_CHANNELS(info->OutputFormat);
+ int DoSwap = T_DOSWAP(info->OutputFormat);
+ int Reverse = T_FLAVOR(info->OutputFormat);
+ int Extra = T_EXTRA(info->OutputFormat);
+ int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+ int Planar = T_PLANAR(info->OutputFormat);
+ int ExtraFirst = DoSwap ^ SwapFirst;
+ cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+ cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+ cmsFloat64Number v = 0;
+ int i, start = 0;
+
+ if (ExtraFirst)
+ start = Extra;
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ v = wOut[index] * maximum;
+
+ if (Reverse)
+ v = maximum - v;
+
+ if (Planar)
+ ((cmsFloat32Number*)output)[(i + start)* Stride] = (cmsFloat32Number)v;
+ else
+ ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+ }
+
+
+ if (Extra == 0 && SwapFirst) {
+
+ memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+ *swap1 = (cmsFloat32Number)v;
+ }
+
+ if (T_PLANAR(info->OutputFormat))
+ return output + sizeof(cmsFloat32Number);
+ else
+ return output + (nChan + Extra) * sizeof(cmsFloat32Number);
}
static
@@ -2570,51 +2561,47 @@
cmsUInt8Number* output,
cmsUInt32Number Stride)
{
- int nChan = T_CHANNELS(info -> OutputFormat);
- int DoSwap = T_DOSWAP(info ->OutputFormat);
- int Reverse = T_FLAVOR(info ->OutputFormat);
- int Extra = T_EXTRA(info -> OutputFormat);
- int SwapFirst = T_SWAPFIRST(info -> OutputFormat);
- int Planar = T_PLANAR(info -> OutputFormat);
- int ExtraFirst = DoSwap ^ SwapFirst;
- cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
- cmsFloat64Number v = 0;
- cmsFloat64Number* swap1 = (cmsFloat64Number*) output;
- int i, start = 0;
-
- if (ExtraFirst)
- start = Extra;
-
- for (i=0; i < nChan; i++) {
-
- int index = DoSwap ? (nChan - i - 1) : i;
-
- v = wOut[index] * maximum;
-
- if (Reverse)
- v = maximum - v;
-
- if (Planar)
- ((cmsFloat64Number*) output)[(i + start) * Stride] = v;
- else
- ((cmsFloat64Number*) output)[i + start] = v;
- }
-
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsFloat64Number);
- }
-
- if (Extra == 0 && SwapFirst) {
-
- memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number));
- *swap1 = v;
- }
-
-
- if (T_PLANAR(info -> OutputFormat))
- return output + sizeof(cmsFloat64Number);
- else
- return output + nChan * sizeof(cmsFloat64Number);
+ int nChan = T_CHANNELS(info->OutputFormat);
+ int DoSwap = T_DOSWAP(info->OutputFormat);
+ int Reverse = T_FLAVOR(info->OutputFormat);
+ int Extra = T_EXTRA(info->OutputFormat);
+ int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+ int Planar = T_PLANAR(info->OutputFormat);
+ int ExtraFirst = DoSwap ^ SwapFirst;
+ cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+ cmsFloat64Number v = 0;
+ cmsFloat64Number* swap1 = (cmsFloat64Number*)output;
+ int i, start = 0;
+
+ if (ExtraFirst)
+ start = Extra;
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ v = wOut[index] * maximum;
+
+ if (Reverse)
+ v = maximum - v;
+
+ if (Planar)
+ ((cmsFloat64Number*)output)[(i + start) * Stride] = v;
+ else
+ ((cmsFloat64Number*)output)[i + start] = v;
+ }
+
+ if (Extra == 0 && SwapFirst) {
+
+ memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat64Number));
+ *swap1 = v;
+ }
+
+
+ if (T_PLANAR(info->OutputFormat))
+ return output + sizeof(cmsFloat64Number);
+ else
+ return output + (nChan + Extra) * sizeof(cmsFloat64Number);
}
@@ -2850,50 +2837,47 @@
register cmsUInt8Number* output,
register cmsUInt32Number Stride)
{
- int nChan = T_CHANNELS(info -> OutputFormat);
- int DoSwap = T_DOSWAP(info ->OutputFormat);
- int Reverse = T_FLAVOR(info ->OutputFormat);
- int Extra = T_EXTRA(info -> OutputFormat);
- int SwapFirst = T_SWAPFIRST(info -> OutputFormat);
- int Planar = T_PLANAR(info -> OutputFormat);
- int ExtraFirst = DoSwap ^ SwapFirst;
- cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35F : 65535.0F;
- cmsFloat32Number v = 0;
- cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
- int i, start = 0;
-
- if (ExtraFirst)
- start = Extra;
-
- for (i=0; i < nChan; i++) {
-
- int index = DoSwap ? (nChan - i - 1) : i;
-
- v = (cmsFloat32Number) wOut[index] / maximum;
-
- if (Reverse)
- v = maximum - v;
-
- if (Planar)
- ((cmsUInt16Number*) output)[(i + start ) * Stride]= _cmsFloat2Half(v);
- else
- ((cmsUInt16Number*) output)[i + start] = _cmsFloat2Half(v);
- }
-
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsUInt16Number);
- }
-
- if (Extra == 0 && SwapFirst) {
-
- memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
- *swap1 = _cmsFloat2Half(v);
- }
-
- if (T_PLANAR(info -> OutputFormat))
- return output + sizeof(cmsUInt16Number);
- else
- return output + nChan * sizeof(cmsUInt16Number);
+ int nChan = T_CHANNELS(info->OutputFormat);
+ int DoSwap = T_DOSWAP(info->OutputFormat);
+ int Reverse = T_FLAVOR(info->OutputFormat);
+ int Extra = T_EXTRA(info->OutputFormat);
+ int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+ int Planar = T_PLANAR(info->OutputFormat);
+ int ExtraFirst = DoSwap ^ SwapFirst;
+ cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 655.35F : 65535.0F;
+ cmsFloat32Number v = 0;
+ cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+ int i, start = 0;
+
+ if (ExtraFirst)
+ start = Extra;
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ v = (cmsFloat32Number)wOut[index] / maximum;
+
+ if (Reverse)
+ v = maximum - v;
+
+ if (Planar)
+ ((cmsUInt16Number*)output)[(i + start) * Stride] = _cmsFloat2Half(v);
+ else
+ ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+ }
+
+
+ if (Extra == 0 && SwapFirst) {
+
+ memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+ *swap1 = _cmsFloat2Half(v);
+ }
+
+ if (T_PLANAR(info->OutputFormat))
+ return output + sizeof(cmsUInt16Number);
+ else
+ return output + (nChan + Extra) * sizeof(cmsUInt16Number);
}
@@ -2904,50 +2888,47 @@
cmsUInt8Number* output,
cmsUInt32Number Stride)
{
- int nChan = T_CHANNELS(info -> OutputFormat);
- int DoSwap = T_DOSWAP(info ->OutputFormat);
- int Reverse = T_FLAVOR(info ->OutputFormat);
- int Extra = T_EXTRA(info -> OutputFormat);
- int SwapFirst = T_SWAPFIRST(info -> OutputFormat);
- int Planar = T_PLANAR(info -> OutputFormat);
- int ExtraFirst = DoSwap ^ SwapFirst;
- cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0F : 1.0F;
- cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
- cmsFloat32Number v = 0;
- int i, start = 0;
-
- if (ExtraFirst)
- start = Extra;
-
- for (i=0; i < nChan; i++) {
-
- int index = DoSwap ? (nChan - i - 1) : i;
-
- v = wOut[index] * maximum;
-
- if (Reverse)
- v = maximum - v;
-
- if (Planar)
- ((cmsUInt16Number*) output)[(i + start)* Stride]= _cmsFloat2Half( v );
- else
- ((cmsUInt16Number*) output)[i + start] = _cmsFloat2Half( v );
- }
-
- if (!ExtraFirst) {
- output += Extra * sizeof(cmsUInt16Number);
- }
-
- if (Extra == 0 && SwapFirst) {
-
- memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
- *swap1 = (cmsUInt16Number) _cmsFloat2Half( v );
- }
-
- if (T_PLANAR(info -> OutputFormat))
- return output + sizeof(cmsUInt16Number);
- else
- return output + nChan * sizeof(cmsUInt16Number);
+ int nChan = T_CHANNELS(info->OutputFormat);
+ int DoSwap = T_DOSWAP(info->OutputFormat);
+ int Reverse = T_FLAVOR(info->OutputFormat);
+ int Extra = T_EXTRA(info->OutputFormat);
+ int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+ int Planar = T_PLANAR(info->OutputFormat);
+ int ExtraFirst = DoSwap ^ SwapFirst;
+ cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 100.0F : 1.0F;
+ cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+ cmsFloat32Number v = 0;
+ int i, start = 0;
+
+ if (ExtraFirst)
+ start = Extra;
+
+ for (i = 0; i < nChan; i++) {
+
+ int index = DoSwap ? (nChan - i - 1) : i;
+
+ v = wOut[index] * maximum;
+
+ if (Reverse)
+ v = maximum - v;
+
+ if (Planar)
+ ((cmsUInt16Number*)output)[(i + start)* Stride] = _cmsFloat2Half(v);
+ else
+ ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+ }
+
+
+ if (Extra == 0 && SwapFirst) {
+
+ memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+ *swap1 = (cmsUInt16Number)_cmsFloat2Half(v);
+ }
+
+ if (T_PLANAR(info->OutputFormat))
+ return output + sizeof(cmsUInt16Number);
+ else
+ return output + (nChan + Extra)* sizeof(cmsUInt16Number);
}
#endif
--- a/jdk/src/java.desktop/share/native/liblcms/cmspcs.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspcs.c Wed Jul 05 20:33:55 2017 +0200
@@ -135,6 +135,15 @@
Dest -> Z = ((1 - Source -> x - Source -> y) / Source -> y) * Source -> Y;
}
+/*
+ The break point (24/116)^3 = (6/29)^3 is a very small amount of tristimulus
+ primary (0.008856). Generally, this only happens for
+ nearly ideal blacks and for some orange / amber colors in transmission mode.
+ For example, the Z value of the orange turn indicator lamp lens on an
+ automobile will often be below this value. But the Z does not
+ contribute to the perceived color directly.
+*/
+
static
cmsFloat64Number f(cmsFloat64Number t)
{
--- a/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c Wed Jul 05 20:33:55 2017 +0200
@@ -712,15 +712,21 @@
// Internal: get the memory area associanted with each context client
-// Returns the block assigned to the specific zone.
+// Returns the block assigned to the specific zone. Never return NULL.
void* _cmsContextGetClientChunk(cmsContext ContextID, _cmsMemoryClient mc)
{
struct _cmsContext_struct* ctx;
void *ptr;
- if (mc < 0 || mc >= MemoryClientMax) {
- cmsSignalError(ContextID, cmsERROR_RANGE, "Bad context client");
- return NULL;
+ if ((int) mc < 0 || mc >= MemoryClientMax) {
+
+ cmsSignalError(ContextID, cmsERROR_INTERNAL, "Bad context client -- possible corruption");
+
+ // This is catastrophic. Should never reach here
+ _cmsAssert(0);
+
+ // Reverts to global context
+ return globalContext.chunks[UserPtr];
}
ctx = _cmsGetContext(ContextID);
@@ -909,7 +915,7 @@
}
-
+/*
static
struct _cmsContext_struct* FindPrev(struct _cmsContext_struct* id)
{
@@ -926,6 +932,7 @@
return NULL; // List is empty or only one element!
}
+*/
// Frees any resources associated with the given context,
// and destroys the context placeholder.
@@ -961,8 +968,8 @@
// Search for previous
for (prev = _cmsContextPoolHead;
- prev != NULL;
- prev = prev ->Next)
+ prev != NULL;
+ prev = prev ->Next)
{
if (prev -> Next == ctx) {
prev -> Next = ctx ->Next;
--- a/jdk/src/java.desktop/share/native/liblcms/cmssamp.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmssamp.c Wed Jul 05 20:33:55 2017 +0200
@@ -30,7 +30,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2010 Marti Maria Saguer
+// Copyright (c) 1998-2014 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
@@ -369,28 +369,7 @@
}
-/*
-static
-cmsBool IsMonotonic(int n, const cmsFloat64Number Table[])
-{
- int i;
- cmsFloat64Number last;
- last = Table[n-1];
-
- for (i = n-2; i >= 0; --i) {
-
- if (Table[i] > last)
-
- return FALSE;
- else
- last = Table[i];
-
- }
-
- return TRUE;
-}
-*/
// Calculates the black point of a destination profile.
// This algorithm comes from the Adobe paper disclosing its black point compensation method.
@@ -515,7 +494,6 @@
// Test for mid range straight (only on relative colorimetric)
-
NearlyStraightMidrange = TRUE;
MinL = outRamp[0]; MaxL = outRamp[255];
if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
@@ -531,7 +509,6 @@
// DestinationBlackPoint shall be the same as initialLab.
// Otherwise, the DestinationBlackPoint shall be determined
// using curve fitting.
-
if (NearlyStraightMidrange) {
cmsLab2XYZ(NULL, BlackPoint, &InitialLab);
@@ -543,14 +520,12 @@
// curve fitting: The round-trip curve normally looks like a nearly constant section at the black point,
// with a corner and a nearly straight line to the white point.
-
for (l=0; l < 256; l++) {
yRamp[l] = (outRamp[l] - MinL) / (MaxL - MinL);
}
// find the black point using the least squares error quadratic curve fitting
-
if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
lo = 0.1;
hi = 0.5;
--- a/jdk/src/java.desktop/share/native/liblcms/cmstypes.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmstypes.c Wed Jul 05 20:33:55 2017 +0200
@@ -1718,10 +1718,7 @@
else
for (j=0; j < 256; j++) {
- if (Tables != NULL)
- val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
- else
- val = (cmsUInt8Number) j;
+ val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
if (!_cmsWriteUInt8Number(io, val)) return FALSE;
}
@@ -3548,7 +3545,6 @@
if (n ->Desc == NULL) return NULL;
ASCIIString = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1);
- if (ASCIIString == NULL) return NULL;
if (io ->Read(io, ASCIIString, sizeof(char), SizeOfTag) != SizeOfTag) return NULL;
ASCIIString[SizeOfTag] = 0;
cmsMLUsetASCII(n ->Desc, cmsNoLanguage, cmsNoCountry, ASCIIString);
@@ -3576,7 +3572,6 @@
// Now comes the text. The length is specified by the tag size
TextSize = cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, NULL, 0);
Text = (char*) _cmsMalloc(self ->ContextID, TextSize);
- if (Text == NULL) return FALSE;
if (cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, Text, TextSize) != TextSize) return FALSE;
if (!io ->Write(io, TextSize, Text)) return FALSE;
@@ -3674,7 +3669,6 @@
TextSize = cmsMLUgetASCII(mlu, "PS", Section, NULL, 0);
Text = (char*) _cmsMalloc(self ->ContextID, TextSize);
- if (Text == NULL) return FALSE;
if (!_cmsWriteUInt32Number(io, TextSize)) return FALSE;
--- a/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c Wed Jul 05 20:33:55 2017 +0200
@@ -671,7 +671,7 @@
// Create the ICC virtual profile for sRGB space
cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID)
{
- cmsCIExyY D65;
+ cmsCIExyY D65 = { 0.3127, 0.3290, 1.0 };
cmsCIExyYTRIPLE Rec709Primaries = {
{0.6400, 0.3300, 1.0},
{0.3000, 0.6000, 1.0},
@@ -680,7 +680,7 @@
cmsToneCurve* Gamma22[3];
cmsHPROFILE hsRGB;
- cmsWhitePointFromTemp(&D65, 6504);
+ // cmsWhitePointFromTemp(&D65, 6504);
Gamma22[0] = Gamma22[1] = Gamma22[2] = Build_sRGBGamma(ContextID);
if (Gamma22[0] == NULL) return NULL;
@@ -708,6 +708,7 @@
cmsFloat64Number Contrast;
cmsFloat64Number Hue;
cmsFloat64Number Saturation;
+ cmsBool lAdjustWP;
cmsCIEXYZ WPsrc, WPdest;
} BCHSWADJUSTS, *LPBCHSWADJUSTS;
@@ -737,9 +738,10 @@
cmsLCh2Lab(&LabOut, &LChOut);
// Move white point in Lab
-
- cmsLab2XYZ(&bchsw ->WPsrc, &XYZ, &LabOut);
- cmsXYZ2Lab(&bchsw ->WPdest, &LabOut, &XYZ);
+ if (bchsw->lAdjustWP) {
+ cmsLab2XYZ(&bchsw->WPsrc, &XYZ, &LabOut);
+ cmsXYZ2Lab(&bchsw->WPdest, &LabOut, &XYZ);
+ }
// Back to encoded
@@ -773,18 +775,23 @@
bchsw.Contrast = Contrast;
bchsw.Hue = Hue;
bchsw.Saturation = Saturation;
+ if (TempSrc == TempDest) {
- cmsWhitePointFromTemp(&WhitePnt, TempSrc );
- cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+ bchsw.lAdjustWP = FALSE;
+ }
+ else {
+ bchsw.lAdjustWP = TRUE;
+ cmsWhitePointFromTemp(&WhitePnt, TempSrc);
+ cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+ cmsWhitePointFromTemp(&WhitePnt, TempDest);
+ cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
- cmsWhitePointFromTemp(&WhitePnt, TempDest);
- cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
+ }
hICC = cmsCreateProfilePlaceholder(ContextID);
if (!hICC) // can't allocate
return NULL;
-
cmsSetDeviceClass(hICC, cmsSigAbstractClass);
cmsSetColorSpace(hICC, cmsSigLabData);
cmsSetPCS(hICC, cmsSigLabData);
@@ -1017,12 +1024,14 @@
} cmsAllowedLUT;
+#define cmsSig0 ((cmsTagSignature) 0)
+
static const cmsAllowedLUT AllowedLUTTypes[] = {
- { FALSE, 0, cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
- { FALSE, 0, cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
- { FALSE, 0, cmsSigLut16Type, 2, { cmsSigCurveSetElemType, cmsSigCLutElemType}},
- { TRUE , 0, cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType }},
+ { FALSE, cmsSig0, cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+ { FALSE, cmsSig0, cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+ { FALSE, cmsSig0, cmsSigLut16Type, 2, { cmsSigCurveSetElemType, cmsSigCLutElemType } },
+ { TRUE, cmsSig0, cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType } },
{ TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType } },
{ TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
{ TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 5, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }},
--- a/jdk/src/java.desktop/share/native/liblcms/cmsxform.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsxform.c Wed Jul 05 20:33:55 2017 +0200
@@ -621,46 +621,48 @@
_cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsContextGetClientChunk(ContextID, TransformPlugin);
_cmsTransformCollection* Plugin;
- // Allocate needed memory
- _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
- if (!p) return NULL;
+ // Allocate needed memory
+ _cmsTRANSFORM* p = (_cmsTRANSFORM*)_cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
+ if (!p) return NULL;
- // Store the proposed pipeline
- p ->Lut = lut;
+ // Store the proposed pipeline
+ p->Lut = lut;
- // Let's see if any plug-in want to do the transform by itself
- for (Plugin = ctx ->TransformCollection;
- Plugin != NULL;
- Plugin = Plugin ->Next) {
+ // Let's see if any plug-in want to do the transform by itself
+ if (p->Lut != NULL) {
- if (Plugin ->Factory(&p->xform, &p->UserData, &p ->FreeUserData, &p ->Lut, InputFormat, OutputFormat, dwFlags)) {
+ for (Plugin = ctx->TransformCollection;
+ Plugin != NULL;
+ Plugin = Plugin->Next) {
- // Last plugin in the declaration order takes control. We just keep
- // the original parameters as a logging.
- // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
- // an optimized transform is not reusable. The plug-in can, however, change
- // the flags and make it suitable.
+ if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) {
- p ->ContextID = ContextID;
- p ->InputFormat = *InputFormat;
- p ->OutputFormat = *OutputFormat;
- p ->dwOriginalFlags = *dwFlags;
+ // Last plugin in the declaration order takes control. We just keep
+ // the original parameters as a logging.
+ // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
+ // an optimized transform is not reusable. The plug-in can, however, change
+ // the flags and make it suitable.
+
+ p->ContextID = ContextID;
+ p->InputFormat = *InputFormat;
+ p->OutputFormat = *OutputFormat;
+ p->dwOriginalFlags = *dwFlags;
- // Fill the formatters just in case the optimized routine is interested.
- // No error is thrown if the formatter doesn't exist. It is up to the optimization
- // factory to decide what to do in those cases.
- p ->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
- p ->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
- p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
- p ->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+ // Fill the formatters just in case the optimized routine is interested.
+ // No error is thrown if the formatter doesn't exist. It is up to the optimization
+ // factory to decide what to do in those cases.
+ p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
+ p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
+ p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+ p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
- return p;
- }
- }
+ return p;
+ }
+ }
- // Not suitable for the transform plug-in, let's check the pipeline plug-in
- if (p ->Lut != NULL)
- _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+ // Not suitable for the transform plug-in, let's check the pipeline plug-in
+ _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+ }
// Check whatever this is a true floating point transform
if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat)) {
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2.h Wed Jul 05 20:33:55 2017 +0200
@@ -52,7 +52,7 @@
//
//---------------------------------------------------------------------------------
//
-// Version 2.6
+// Version 2.7
//
#ifndef _lcms2_H
@@ -104,7 +104,7 @@
#endif
// Version/release
-#define LCMS_VERSION 2060
+#define LCMS_VERSION 2070
// I will give the chance of redefining basic types for compilers that are not fully C99 compliant
#ifndef CMS_BASIC_TYPES_ALREADY_DEFINED
@@ -213,27 +213,19 @@
# define CMS_USE_BIG_ENDIAN 1
#endif
-# ifdef TARGET_CPU_PPC
-# if TARGET_CPU_PPC
-# define CMS_USE_BIG_ENDIAN 1
-# endif
-# endif
#if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC)
+# if __powerpc__ || __ppc__ || TARGET_CPU_PPC
# define CMS_USE_BIG_ENDIAN 1
-# if defined (__GNUC__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN)
-# if __BYTE_ORDER == __LITTLE_ENDIAN
-// // Don't use big endian for PowerPC little endian mode
+# if defined (__GNUC__) && defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
+# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ // Don't use big endian for PowerPC little endian mode
# undef CMS_USE_BIG_ENDIAN
# endif
+# endif
# endif
#endif
-// WORDS_BIGENDIAN takes precedence
-#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
-# define CMS_USE_BIG_ENDIAN 1
-#endif
-
#ifdef macintosh
# ifdef __BIG_ENDIAN__
# define CMS_USE_BIG_ENDIAN 1
@@ -243,6 +235,12 @@
# endif
#endif
+// WORDS_BIGENDIAN takes precedence
+#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
+# define CMS_USE_BIG_ENDIAN 1
+#endif
+
+
// Calling convention -- this is hardly platform and compiler dependent
#ifdef CMS_IS_WINDOWS_
# if defined(CMS_DLL) || defined(CMS_DLL_BUILD)
@@ -553,7 +551,8 @@
cmsSigLab2FloatPCS = 0x64326C20, // 'd2l '
cmsSigFloatPCS2Lab = 0x6C326420, // 'l2d '
cmsSigXYZ2FloatPCS = 0x64327820, // 'd2x '
- cmsSigFloatPCS2XYZ = 0x78326420 // 'x2d '
+ cmsSigFloatPCS2XYZ = 0x78326420, // 'x2d '
+ cmsSigClipNegativesElemType = 0x636c7020 // 'clp '
} cmsStageSignature;
@@ -1031,6 +1030,10 @@
} cmsICCViewingConditions;
+// Get LittleCMS version (for shared objects) -----------------------------------------------------------------------------
+
+CMSAPI int CMSEXPORT cmsGetEncodedCMMversion(void);
+
// Support of non-standard functions --------------------------------------------------------------------------------------
CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2);
@@ -1509,7 +1512,7 @@
CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace);
-// Build a suitable formatter for the colorspace of this profile
+// Build a suitable formatter for the colorspace of this profile. nBytes=1 means 8 bits, nBytes=2 means 16 bits.
CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
@@ -1538,6 +1541,7 @@
CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream);
CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode);
CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID);
+CMSAPI cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile);
CMSAPI cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io);
// MD5 message digest --------------------------------------------------------------------------------------------------
@@ -1672,6 +1676,10 @@
#define cmsFLAGS_CLUT_POST_LINEARIZATION 0x0001 // create postlinearization tables if possible
#define cmsFLAGS_CLUT_PRE_LINEARIZATION 0x0010 // create prelinearization tables if possible
+// Specific to unbounded mode
+#define cmsFLAGS_NONEGATIVES 0x8000 // Prevent negative numbers in floating point transforms
+
+
// Fine-tune control over number of gridpoints
#define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16)
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h Wed Jul 05 20:33:55 2017 +0200
@@ -223,11 +223,17 @@
// Microsoft felt that it was necessary to keep it set at -1 for an unlocked critical
// section, even when they changed the underlying algorithm to be more scalable.
// The final parts of the critical section object are unimportant, and can be set
-// to zero for their defaults. This yields an initialization macro:
+// to zero for their defaults. This yields to an initialization macro:
typedef CRITICAL_SECTION _cmsMutex;
-#define CMS_MUTEX_INITIALIZER {(void*) -1,-1,0,0,0,0}
+#define CMS_MUTEX_INITIALIZER {(PRTL_CRITICAL_SECTION_DEBUG) -1,-1,0,0,0,0}
+
+#ifdef _MSC_VER
+# if (_MSC_VER >= 1800)
+# pragma warning(disable : 26135)
+# endif
+#endif
cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
{
@@ -313,38 +319,38 @@
cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
{
+ cmsUNUSED_PARAMETER(m);
return 0;
- cmsUNUSED_PARAMETER(m);
}
#endif
@@ -852,6 +858,8 @@
cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID);
cmsStage* _cmsStageNormalizeToLabFloat(cmsContext ContextID);
cmsStage* _cmsStageNormalizeToXyzFloat(cmsContext ContextID);
+cmsStage* _cmsStageClipNegatives(cmsContext ContextID, int nChannels);
+
// For curve set only
cmsToneCurve** _cmsStageGetPtrToCurveSet(const cmsStage* mpe);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/COPYING Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,19 @@
+The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c Wed Jul 05 20:33:55 2017 +0200
@@ -23,219 +23,211 @@
*/
/******************************************************************************
- * "Gif-Lib" - Yet another gif library.
- *
- * Written by: Gershon Elber IBM PC Ver 1.1, Aug. 1990
- ******************************************************************************
- * The kernel of the GIF Decoding process can be found here.
- ******************************************************************************
- * History:
- * 16 Jun 89 - Version 1.0 by Gershon Elber.
- * 3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names).
- *****************************************************************************/
+
+dgif_lib.c - GIF decoding
-/* !!!! */
+The functions here and in egif_lib.c are partitioned carefully so that
+if you only require one of read and write capability, only one of these
+two modules will be linked. Preserve this property!
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+*****************************************************************************/
#include <stdlib.h>
-#if defined (__MSDOS__) && !defined(__DJGPP__) && !defined(__GNUC__)
-#include <io.h>
-#include <alloc.h>
-#include <sys\stat.h>
-#else
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif /* __MSDOS__ */
+#include <limits.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
#ifdef _WIN32
#include <io.h>
-#define _OPEN_BINARY
#else
#include <unistd.h>
-#endif
+#endif /* _WIN32 */
-#include <fcntl.h>
-
-#include <stdio.h>
-#include <string.h>
#include "gif_lib.h"
#include "gif_lib_private.h"
-#define COMMENT_EXT_FUNC_CODE 0xfe /* Extension function code for
- comment. */
+/* compose unsigned little endian value */
+#define UNSIGNED_LITTLE_ENDIAN(lo, hi) ((lo) | ((hi) << 8))
/* avoid extra function call in case we use fread (TVT) */
#define READ(_gif,_buf,_len) \
(((GifFilePrivateType*)_gif->Private)->Read ? \
- (size_t)((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
+ ((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
fread(_buf,1,_len,((GifFilePrivateType*)_gif->Private)->File))
-static int DGifGetWord(GifFileType *GifFile, int *Word);
+static int DGifGetWord(GifFileType *GifFile, GifWord *Word);
static int DGifSetupDecompress(GifFileType *GifFile);
static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line,
int LineLen);
-static int DGifGetPrefixChar(unsigned int *Prefix, int Code, int ClearCode);
+static int DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode);
static int DGifDecompressInput(GifFileType *GifFile, int *Code);
static int DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf,
GifByteType *NextByte);
/******************************************************************************
- * Open a new gif file for read, given by its name.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Open a new GIF file for read, given by its name.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
GifFileType *
-DGifOpenFileName(const char *FileName) {
+DGifOpenFileName(const char *FileName, int *Error)
+{
int FileHandle;
GifFileType *GifFile;
- if ((FileHandle = open(FileName, O_RDONLY
-#if defined(__MSDOS__) || defined(_OPEN_BINARY)
- | O_BINARY
-#endif /* __MSDOS__ || _OPEN_BINARY */
- )) == -1) {
- _GifError = D_GIF_ERR_OPEN_FAILED;
+ if ((FileHandle = open(FileName, O_RDONLY)) == -1) {
+ if (Error != NULL)
+ *Error = D_GIF_ERR_OPEN_FAILED;
return NULL;
}
- GifFile = DGifOpenFileHandle(FileHandle);
- if (GifFile == (GifFileType *)NULL)
- close(FileHandle);
+ GifFile = DGifOpenFileHandle(FileHandle, Error);
return GifFile;
}
/******************************************************************************
- * Update a new gif file, given its file handle.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Update a new GIF file, given its file handle.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
GifFileType *
-DGifOpenFileHandle(int FileHandle) {
-
- unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpenFileHandle(int FileHandle, int *Error)
+{
+ char Buf[GIF_STAMP_LEN + 1];
GifFileType *GifFile;
GifFilePrivateType *Private;
FILE *f;
GifFile = (GifFileType *)malloc(sizeof(GifFileType));
if (GifFile == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+ (void)close(FileHandle);
return NULL;
}
- memset(GifFile, '\0', sizeof(GifFileType));
+ /*@i1@*/memset(GifFile, '\0', sizeof(GifFileType));
+
+ /* Belt and suspenders, in case the null pointer isn't zero */
+ GifFile->SavedImages = NULL;
+ GifFile->SColorMap = NULL;
Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
if (Private == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+ (void)close(FileHandle);
free((char *)GifFile);
return NULL;
}
-#ifdef __MSDOS__
- setmode(FileHandle, O_BINARY); /* Make sure it is in binary mode. */
-#endif /* __MSDOS__ */
+#ifdef _WIN32
+ _setmode(FileHandle, O_BINARY); /* Make sure it is in binary mode. */
+#endif /* _WIN32 */
f = fdopen(FileHandle, "rb"); /* Make it into a stream: */
-#ifdef __MSDOS__
- setvbuf(f, NULL, _IOFBF, GIF_FILE_BUFFER_SIZE); /* And inc. stream
- buffer. */
-#endif /* __MSDOS__ */
-
- GifFile->Private = (VoidPtr)Private;
+ /*@-mustfreeonly@*/
+ GifFile->Private = (void *)Private;
Private->FileHandle = FileHandle;
Private->File = f;
Private->FileState = FILE_STATE_READ;
- Private->Read = 0; /* don't use alternate input method (TVT) */
- GifFile->UserData = 0; /* TVT */
+ Private->Read = NULL; /* don't use alternate input method (TVT) */
+ GifFile->UserData = NULL; /* TVT */
+ /*@=mustfreeonly@*/
- /* Lets see if this is a GIF file: */
- if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
- _GifError = D_GIF_ERR_READ_FAILED;
- fclose(f);
+ /* Let's see if this is a GIF file: */
+ /* coverity[check_return] */
+ if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+ if (Error != NULL)
+ *Error = D_GIF_ERR_READ_FAILED;
+ (void)fclose(f);
free((char *)Private);
free((char *)GifFile);
return NULL;
}
- /* The GIF Version number is ignored at this time. Maybe we should do
- * something more useful with it. */
+ /* Check for GIF prefix at start of file */
Buf[GIF_STAMP_LEN] = 0;
- if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
- _GifError = D_GIF_ERR_NOT_GIF_FILE;
- fclose(f);
+ if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_GIF_FILE;
+ (void)fclose(f);
free((char *)Private);
free((char *)GifFile);
return NULL;
}
if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
- fclose(f);
+ (void)fclose(f);
free((char *)Private);
free((char *)GifFile);
return NULL;
}
- _GifError = 0;
+ GifFile->Error = 0;
+
+ /* What version of GIF? */
+ Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
return GifFile;
}
/******************************************************************************
- * GifFileType constructor with user supplied input function (TVT)
- *****************************************************************************/
+ GifFileType constructor with user supplied input function (TVT)
+******************************************************************************/
GifFileType *
-DGifOpen(void *userData,
- InputFunc readFunc) {
-
- unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpen(void *userData, InputFunc readFunc, int *Error)
+{
+ char Buf[GIF_STAMP_LEN + 1];
GifFileType *GifFile;
GifFilePrivateType *Private;
- if (!readFunc) {
- _GifError = D_GIF_ERR_READ_FAILED;
- return NULL;
- }
-
GifFile = (GifFileType *)malloc(sizeof(GifFileType));
if (GifFile == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return NULL;
}
memset(GifFile, '\0', sizeof(GifFileType));
+ /* Belt and suspenders, in case the null pointer isn't zero */
+ GifFile->SavedImages = NULL;
+ GifFile->SColorMap = NULL;
+
Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
if (!Private) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
free((char *)GifFile);
return NULL;
}
- GifFile->Private = (VoidPtr)Private;
+ GifFile->Private = (void *)Private;
Private->FileHandle = 0;
- Private->File = 0;
+ Private->File = NULL;
Private->FileState = FILE_STATE_READ;
Private->Read = readFunc; /* TVT */
GifFile->UserData = userData; /* TVT */
/* Lets see if this is a GIF file: */
- if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ /* coverity[check_return] */
+ if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+ if (Error != NULL)
+ *Error = D_GIF_ERR_READ_FAILED;
free((char *)Private);
free((char *)GifFile);
return NULL;
}
- /* The GIF Version number is ignored at this time. Maybe we should do
- * something more useful with it. */
- Buf[GIF_STAMP_LEN] = 0;
- if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
- _GifError = D_GIF_ERR_NOT_GIF_FILE;
+ /* Check for GIF prefix at start of file */
+ Buf[GIF_STAMP_LEN] = '\0';
+ if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NOT_GIF_FILE;
free((char *)Private);
free((char *)GifFile);
return NULL;
@@ -244,28 +236,34 @@
if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
free((char *)Private);
free((char *)GifFile);
+ if (Error != NULL)
+ *Error = D_GIF_ERR_NO_SCRN_DSCR;
return NULL;
}
- _GifError = 0;
+ GifFile->Error = 0;
+
+ /* What version of GIF? */
+ Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
return GifFile;
}
/******************************************************************************
- * This routine should be called before any other DGif calls. Note that
- * this routine is called automatically from DGif file open routines.
- *****************************************************************************/
+ This routine should be called before any other DGif calls. Note that
+ this routine is called automatically from DGif file open routines.
+******************************************************************************/
int
-DGifGetScreenDesc(GifFileType * GifFile) {
-
- int i, BitsPerPixel;
+DGifGetScreenDesc(GifFileType *GifFile)
+{
+ int BitsPerPixel;
+ bool SortFlag;
GifByteType Buf[3];
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
@@ -275,25 +273,33 @@
return GIF_ERROR;
if (READ(GifFile, Buf, 3) != 3) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
+ GifFreeMapObject(GifFile->SColorMap);
+ GifFile->SColorMap = NULL;
return GIF_ERROR;
}
GifFile->SColorResolution = (((Buf[0] & 0x70) + 1) >> 4) + 1;
+ SortFlag = (Buf[0] & 0x08) != 0;
BitsPerPixel = (Buf[0] & 0x07) + 1;
GifFile->SBackGroundColor = Buf[1];
+ GifFile->AspectByte = Buf[2];
if (Buf[0] & 0x80) { /* Do we have global color map? */
+ int i;
- GifFile->SColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+ GifFile->SColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
if (GifFile->SColorMap == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return GIF_ERROR;
}
/* Get the global color map: */
+ GifFile->SColorMap->SortFlag = SortFlag;
for (i = 0; i < GifFile->SColorMap->ColorCount; i++) {
+ /* coverity[check_return] */
if (READ(GifFile, Buf, 3) != 3) {
- FreeMapObject(GifFile->SColorMap);
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFreeMapObject(GifFile->SColorMap);
+ GifFile->SColorMap = NULL;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
GifFile->SColorMap->Colors[i].Red = Buf[0];
@@ -308,39 +314,39 @@
}
/******************************************************************************
- * This routine should be called before any attempt to read an image.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+******************************************************************************/
int
-DGifGetRecordType(GifFileType * GifFile,
- GifRecordType * Type) {
-
+DGifGetRecordType(GifFileType *GifFile, GifRecordType* Type)
+{
GifByteType Buf;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
+ /* coverity[check_return] */
if (READ(GifFile, &Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
switch (Buf) {
- case ',':
+ case DESCRIPTOR_INTRODUCER:
*Type = IMAGE_DESC_RECORD_TYPE;
break;
- case '!':
+ case EXTENSION_INTRODUCER:
*Type = EXTENSION_RECORD_TYPE;
break;
- case ';':
+ case TERMINATOR_INTRODUCER:
*Type = TERMINATE_RECORD_TYPE;
break;
default:
*Type = UNDEFINED_RECORD_TYPE;
- _GifError = D_GIF_ERR_WRONG_RECORD;
+ GifFile->Error = D_GIF_ERR_WRONG_RECORD;
return GIF_ERROR;
}
@@ -348,20 +354,20 @@
}
/******************************************************************************
- * This routine should be called before any attempt to read an image.
- * Note it is assumed the Image desc. header (',') has been read.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+ Note it is assumed the Image desc. header has been read.
+******************************************************************************/
int
-DGifGetImageDesc(GifFileType * GifFile) {
-
- int i, BitsPerPixel;
+DGifGetImageDesc(GifFileType *GifFile)
+{
+ unsigned int BitsPerPixel;
GifByteType Buf[3];
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
SavedImage *sp;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
@@ -371,51 +377,57 @@
DGifGetWord(GifFile, &GifFile->Image.Height) == GIF_ERROR)
return GIF_ERROR;
if (READ(GifFile, Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
+ GifFreeMapObject(GifFile->Image.ColorMap);
+ GifFile->Image.ColorMap = NULL;
return GIF_ERROR;
}
BitsPerPixel = (Buf[0] & 0x07) + 1;
- GifFile->Image.Interlace = (Buf[0] & 0x40);
- if (Buf[0] & 0x80) { /* Does this image have local color map? */
+ GifFile->Image.Interlace = (Buf[0] & 0x40) ? true : false;
- /*** FIXME: Why do we check both of these in order to do this?
- * Why do we have both Image and SavedImages? */
- if (GifFile->Image.ColorMap && GifFile->SavedImages == NULL)
- FreeMapObject(GifFile->Image.ColorMap);
+ /* Setup the colormap */
+ if (GifFile->Image.ColorMap) {
+ GifFreeMapObject(GifFile->Image.ColorMap);
+ GifFile->Image.ColorMap = NULL;
+ }
+ /* Does this image have local color map? */
+ if (Buf[0] & 0x80) {
+ unsigned int i;
- GifFile->Image.ColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+ GifFile->Image.ColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
if (GifFile->Image.ColorMap == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return GIF_ERROR;
}
/* Get the image local color map: */
for (i = 0; i < GifFile->Image.ColorMap->ColorCount; i++) {
+ /* coverity[check_return] */
if (READ(GifFile, Buf, 3) != 3) {
- FreeMapObject(GifFile->Image.ColorMap);
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFreeMapObject(GifFile->Image.ColorMap);
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
+ GifFile->Image.ColorMap = NULL;
return GIF_ERROR;
}
GifFile->Image.ColorMap->Colors[i].Red = Buf[0];
GifFile->Image.ColorMap->Colors[i].Green = Buf[1];
GifFile->Image.ColorMap->Colors[i].Blue = Buf[2];
}
- } else if (GifFile->Image.ColorMap) {
- FreeMapObject(GifFile->Image.ColorMap);
- GifFile->Image.ColorMap = NULL;
}
if (GifFile->SavedImages) {
- if ((GifFile->SavedImages = (SavedImage *)realloc(GifFile->SavedImages,
- sizeof(SavedImage) *
- (GifFile->ImageCount + 1))) == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ SavedImage* new_saved_images =
+ (SavedImage *)realloc(GifFile->SavedImages,
+ sizeof(SavedImage) * (GifFile->ImageCount + 1));
+ if (new_saved_images == NULL) {
+ GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return GIF_ERROR;
}
+ GifFile->SavedImages = new_saved_images;
} else {
if ((GifFile->SavedImages =
(SavedImage *) malloc(sizeof(SavedImage))) == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return GIF_ERROR;
}
}
@@ -423,11 +435,11 @@
sp = &GifFile->SavedImages[GifFile->ImageCount];
memcpy(&sp->ImageDesc, &GifFile->Image, sizeof(GifImageDesc));
if (GifFile->Image.ColorMap != NULL) {
- sp->ImageDesc.ColorMap = MakeMapObject(
+ sp->ImageDesc.ColorMap = GifMakeMapObject(
GifFile->Image.ColorMap->ColorCount,
GifFile->Image.ColorMap->Colors);
if (sp->ImageDesc.ColorMap == NULL) {
- _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+ GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
return GIF_ERROR;
}
}
@@ -440,43 +452,40 @@
Private->PixelCount = (long)GifFile->Image.Width *
(long)GifFile->Image.Height;
- return DGifSetupDecompress(GifFile); /* Reset decompress algorithm parameters. */
+ /* Reset decompress algorithm parameters. */
+ return DGifSetupDecompress(GifFile);
}
/******************************************************************************
- * Get one full scanned line (Line) of length LineLen from GIF file.
- *****************************************************************************/
+ Get one full scanned line (Line) of length LineLen from GIF file.
+******************************************************************************/
int
-DGifGetLine(GifFileType * GifFile,
- GifPixelType * Line,
- int LineLen) {
-
+DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
GifByteType *Dummy;
GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
if (!LineLen)
LineLen = GifFile->Image.Width;
-#if defined(__MSDOS__) || defined(__GNUC__)
if ((Private->PixelCount -= LineLen) > 0xffff0000UL) {
-#else
- if ((Private->PixelCount -= LineLen) > 0xffff0000) {
-#endif /* __MSDOS__ */
- _GifError = D_GIF_ERR_DATA_TOO_BIG;
+ GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
return GIF_ERROR;
}
if (DGifDecompressLine(GifFile, Line, LineLen) == GIF_OK) {
if (Private->PixelCount == 0) {
- /* We probably would not be called any more, so lets clean
- * everything before we return: need to flush out all rest of
- * image until empty block (size 0) detected. We use GetCodeNext. */
+ /* We probably won't be called any more, so let's clean up
+ * everything before we return: need to flush out all the
+ * rest of image until an empty block (size 0)
+ * detected. We use GetCodeNext.
+ */
do
if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
return GIF_ERROR;
@@ -488,35 +497,32 @@
}
/******************************************************************************
- * Put one pixel (Pixel) into GIF file.
- *****************************************************************************/
+ Put one pixel (Pixel) into GIF file.
+******************************************************************************/
int
-DGifGetPixel(GifFileType * GifFile,
- GifPixelType Pixel) {
-
+DGifGetPixel(GifFileType *GifFile, GifPixelType Pixel)
+{
GifByteType *Dummy;
GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
-#if defined(__MSDOS__) || defined(__GNUC__)
if (--Private->PixelCount > 0xffff0000UL)
-#else
- if (--Private->PixelCount > 0xffff0000)
-#endif /* __MSDOS__ */
{
- _GifError = D_GIF_ERR_DATA_TOO_BIG;
+ GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
return GIF_ERROR;
}
if (DGifDecompressLine(GifFile, &Pixel, 1) == GIF_OK) {
if (Private->PixelCount == 0) {
- /* We probably would not be called any more, so lets clean
- * everything before we return: need to flush out all rest of
- * image until empty block (size 0) detected. We use GetCodeNext. */
+ /* We probably won't be called any more, so let's clean up
+ * everything before we return: need to flush out all the
+ * rest of image until an empty block (size 0)
+ * detected. We use GetCodeNext.
+ */
do
if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
return GIF_ERROR;
@@ -528,28 +534,27 @@
}
/******************************************************************************
- * Get an extension block (see GIF manual) from gif file. This routine only
- * returns the first data block, and DGifGetExtensionNext should be called
- * after this one until NULL extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- * Note it is assumed the Extension desc. header ('!') has been read.
- *****************************************************************************/
+ Get an extension block (see GIF manual) from GIF file. This routine only
+ returns the first data block, and DGifGetExtensionNext should be called
+ after this one until NULL extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+ Note it is assumed the Extension description header has been read.
+******************************************************************************/
int
-DGifGetExtension(GifFileType * GifFile,
- int *ExtCode,
- GifByteType ** Extension) {
-
+DGifGetExtension(GifFileType *GifFile, int *ExtCode, GifByteType **Extension)
+{
GifByteType Buf;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
+ /* coverity[check_return] */
if (READ(GifFile, &Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
*ExtCode = Buf;
@@ -558,26 +563,26 @@
}
/******************************************************************************
- * Get a following extension block (see GIF manual) from gif file. This
- * routine should be called until NULL Extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get a following extension block (see GIF manual) from GIF file. This
+ routine should be called until NULL Extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
int
-DGifGetExtensionNext(GifFileType * GifFile,
- GifByteType ** Extension) {
-
+DGifGetExtensionNext(GifFileType *GifFile, GifByteType ** Extension)
+{
GifByteType Buf;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (READ(GifFile, &Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
if (Buf > 0) {
*Extension = Private->Buf; /* Use private unused buffer. */
(*Extension)[0] = Buf; /* Pascal strings notation (pos. 0 is len.). */
+ /* coverity[tainted_data,check_return] */
if (READ(GifFile, &((*Extension)[1]), Buf) != Buf) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
} else
@@ -587,91 +592,141 @@
}
/******************************************************************************
- * This routine should be called last, to close the GIF file.
- *****************************************************************************/
-int
-DGifCloseFile(GifFileType * GifFile) {
+ Extract a Graphics Control Block from raw extension data
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+ const GifByteType *GifExtension,
+ GraphicsControlBlock *GCB)
+{
+ if (GifExtensionLength != 4) {
+ return GIF_ERROR;
+ }
+
+ GCB->DisposalMode = (GifExtension[0] >> 2) & 0x07;
+ GCB->UserInputFlag = (GifExtension[0] & 0x02) != 0;
+ GCB->DelayTime = UNSIGNED_LITTLE_ENDIAN(GifExtension[1], GifExtension[2]);
+ if (GifExtension[0] & 0x01)
+ GCB->TransparentColor = (int)GifExtension[3];
+ else
+ GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+ return GIF_OK;
+}
+
+/******************************************************************************
+ Extract the Graphics Control Block for a saved image, if it exists.
+******************************************************************************/
+
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+ int ImageIndex, GraphicsControlBlock *GCB)
+{
+ int i;
+
+ if (ImageIndex < 0 || ImageIndex > GifFile->ImageCount - 1)
+ return GIF_ERROR;
- GifFilePrivateType *Private;
- FILE *File;
+ GCB->DisposalMode = DISPOSAL_UNSPECIFIED;
+ GCB->UserInputFlag = false;
+ GCB->DelayTime = 0;
+ GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+ for (i = 0; i < GifFile->SavedImages[ImageIndex].ExtensionBlockCount; i++) {
+ ExtensionBlock *ep = &GifFile->SavedImages[ImageIndex].ExtensionBlocks[i];
+ if (ep->Function == GRAPHICS_EXT_FUNC_CODE)
+ return DGifExtensionToGCB(ep->ByteCount, ep->Bytes, GCB);
+ }
+
+ return GIF_ERROR;
+}
- if (GifFile == NULL)
+/******************************************************************************
+ This routine should be called last, to close the GIF file.
+******************************************************************************/
+int
+DGifCloseFile(GifFileType *GifFile, int *ErrorCode)
+{
+ GifFilePrivateType *Private;
+
+ if (GifFile == NULL || GifFile->Private == NULL)
return GIF_ERROR;
+ if (GifFile->Image.ColorMap) {
+ GifFreeMapObject(GifFile->Image.ColorMap);
+ GifFile->Image.ColorMap = NULL;
+ }
+
+ if (GifFile->SColorMap) {
+ GifFreeMapObject(GifFile->SColorMap);
+ GifFile->SColorMap = NULL;
+ }
+
+ if (GifFile->SavedImages) {
+ GifFreeSavedImages(GifFile);
+ GifFile->SavedImages = NULL;
+ }
+
+ GifFreeExtensions(&GifFile->ExtensionBlockCount, &GifFile->ExtensionBlocks);
+
Private = (GifFilePrivateType *) GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ if (ErrorCode != NULL)
+ *ErrorCode = D_GIF_ERR_NOT_READABLE;
+ free((char *)GifFile->Private);
+ free(GifFile);
return GIF_ERROR;
}
- File = Private->File;
-
- if (GifFile->Image.ColorMap) {
- FreeMapObject(GifFile->Image.ColorMap);
- GifFile->Image.ColorMap = NULL;
- }
-
- if (GifFile->SColorMap) {
- FreeMapObject(GifFile->SColorMap);
- GifFile->SColorMap = NULL;
+ if (Private->File && (fclose(Private->File) != 0)) {
+ if (ErrorCode != NULL)
+ *ErrorCode = D_GIF_ERR_CLOSE_FAILED;
+ free((char *)GifFile->Private);
+ free(GifFile);
+ return GIF_ERROR;
}
- if (Private) {
- free((char *)Private);
- Private = NULL;
- }
-
- if (GifFile->SavedImages) {
- FreeSavedImages(GifFile);
- GifFile->SavedImages = NULL;
- }
-
+ free((char *)GifFile->Private);
free(GifFile);
-
- if (File && (fclose(File) != 0)) {
- _GifError = D_GIF_ERR_CLOSE_FAILED;
- return GIF_ERROR;
- }
+ if (ErrorCode != NULL)
+ *ErrorCode = D_GIF_SUCCEEDED;
return GIF_OK;
}
/******************************************************************************
- * Get 2 bytes (word) from the given file:
- *****************************************************************************/
+ Get 2 bytes (word) from the given file:
+******************************************************************************/
static int
-DGifGetWord(GifFileType * GifFile,
- int *Word) {
-
+DGifGetWord(GifFileType *GifFile, GifWord *Word)
+{
unsigned char c[2];
+ /* coverity[check_return] */
if (READ(GifFile, c, 2) != 2) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
- *Word = (((unsigned int)c[1]) << 8) + c[0];
+ *Word = (GifWord)UNSIGNED_LITTLE_ENDIAN(c[0], c[1]);
return GIF_OK;
}
/******************************************************************************
- * Get the image code in compressed form. This routine can be called if the
- * information needed to be piped out as is. Obviously this is much faster
- * than decoding and encoding again. This routine should be followed by calls
- * to DGifGetCodeNext, until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get the image code in compressed form. This routine can be called if the
+ information needed to be piped out as is. Obviously this is much faster
+ than decoding and encoding again. This routine should be followed by calls
+ to DGifGetCodeNext, until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
int
-DGifGetCode(GifFileType * GifFile,
- int *CodeSize,
- GifByteType ** CodeBlock) {
-
+DGifGetCode(GifFileType *GifFile, int *CodeSize, GifByteType **CodeBlock)
+{
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
@@ -681,27 +736,30 @@
}
/******************************************************************************
- * Continue to get the image code in compressed form. This routine should be
- * called until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Continue to get the image code in compressed form. This routine should be
+ called until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
int
-DGifGetCodeNext(GifFileType * GifFile,
- GifByteType ** CodeBlock) {
-
+DGifGetCodeNext(GifFileType *GifFile, GifByteType **CodeBlock)
+{
GifByteType Buf;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
+ /* coverity[tainted_data_argument] */
+ /* coverity[check_return] */
if (READ(GifFile, &Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
+ /* coverity[lower_bounds] */
if (Buf > 0) {
*CodeBlock = Private->Buf; /* Use private unused buffer. */
(*CodeBlock)[0] = Buf; /* Pascal strings notation (pos. 0 is len.). */
+ /* coverity[tainted_data] */
if (READ(GifFile, &((*CodeBlock)[1]), Buf) != Buf) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
} else {
@@ -714,20 +772,19 @@
}
/******************************************************************************
- * Setup the LZ decompression for this image:
- *****************************************************************************/
+ Setup the LZ decompression for this image:
+******************************************************************************/
static int
-DGifSetupDecompress(GifFileType * GifFile) {
-
+DGifSetupDecompress(GifFileType *GifFile)
+{
int i, BitsPerPixel;
GifByteType CodeSize;
- unsigned int *Prefix;
+ GifPrefixType *Prefix;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
- READ(GifFile, &CodeSize, 1); /* Read Code size from file. */
- if (CodeSize >= 12) {
- /* Invalid initial code size: report failure */
- return GIF_ERROR;
+ /* coverity[check_return] */
+ if (READ(GifFile, &CodeSize, 1) < 1) { /* Read Code size from file. */
+ return GIF_ERROR; /* Failed to read Code size. */
}
BitsPerPixel = CodeSize;
@@ -751,20 +808,18 @@
}
/******************************************************************************
- * The LZ decompression routine:
- * This version decompress the given gif file into Line of length LineLen.
- * This routine can be called few times (one per scan line, for example), in
- * order the complete the whole image.
- *****************************************************************************/
+ The LZ decompression routine:
+ This version decompress the given GIF file into Line of length LineLen.
+ This routine can be called few times (one per scan line, for example), in
+ order the complete the whole image.
+******************************************************************************/
static int
-DGifDecompressLine(GifFileType * GifFile,
- GifPixelType * Line,
- int LineLen) {
-
+DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
int i = 0;
int j, CrntCode, EOFCode, ClearCode, CrntPrefix, LastCode, StackPtr;
GifByteType *Stack, *Suffix;
- unsigned int *Prefix;
+ GifPrefixType *Prefix;
GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
StackPtr = Private->StackPtr;
@@ -775,8 +830,12 @@
ClearCode = Private->ClearCode;
LastCode = Private->LastCode;
+ if (StackPtr > LZ_MAX_CODE) {
+ return GIF_ERROR;
+ }
+
if (StackPtr != 0) {
- /* Let pop the stack off before continueing to read the gif file: */
+ /* Let pop the stack off before continueing to read the GIF file: */
while (StackPtr != 0 && i < LineLen)
Line[i++] = Stack[--StackPtr];
}
@@ -789,11 +848,8 @@
/* Note however that usually we will not be here as we will stop
* decoding as soon as we got all the pixel, or EOF code will
* not be read at all, and DGifGetLine/Pixel clean everything. */
- if (i != LineLen - 1 || Private->PixelCount != 0) {
- _GifError = D_GIF_ERR_EOF_TOO_SOON;
- return GIF_ERROR;
- }
- i++;
+ GifFile->Error = D_GIF_ERR_EOF_TOO_SOON;
+ return GIF_ERROR;
} else if (CrntCode == ClearCode) {
/* We need to start over again: */
for (j = 0; j <= LZ_MAX_CODE; j++)
@@ -815,36 +871,37 @@
* pixels on our stack. If we done, pop the stack in reverse
* (thats what stack is good for!) order to output. */
if (Prefix[CrntCode] == NO_SUCH_CODE) {
+ CrntPrefix = LastCode;
+
/* Only allowed if CrntCode is exactly the running code:
* In that case CrntCode = XXXCode, CrntCode or the
* prefix code is last code and the suffix char is
* exactly the prefix of last code! */
if (CrntCode == Private->RunningCode - 2) {
- CrntPrefix = LastCode;
Suffix[Private->RunningCode - 2] =
Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
LastCode,
ClearCode);
} else {
- _GifError = D_GIF_ERR_IMAGE_DEFECT;
- return GIF_ERROR;
+ Suffix[Private->RunningCode - 2] =
+ Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
+ CrntCode,
+ ClearCode);
}
} else
CrntPrefix = CrntCode;
- /* Now (if image is O.K.) we should not get an NO_SUCH_CODE
- * During the trace. As we might loop forever, in case of
- * defective image, we count the number of loops we trace
- * and stop if we got LZ_MAX_CODE. obviously we can not
- * loop more than that. */
- j = 0;
- while (j++ <= LZ_MAX_CODE &&
+ /* Now (if image is O.K.) we should not get a NO_SUCH_CODE
+ * during the trace. As we might loop forever, in case of
+ * defective image, we use StackPtr as loop counter and stop
+ * before overflowing Stack[]. */
+ while (StackPtr < LZ_MAX_CODE &&
CrntPrefix > ClearCode && CrntPrefix <= LZ_MAX_CODE) {
Stack[StackPtr++] = Suffix[CrntPrefix];
CrntPrefix = Prefix[CrntPrefix];
}
- if (j >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
- _GifError = D_GIF_ERR_IMAGE_DEFECT;
+ if (StackPtr >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
+ GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
return GIF_ERROR;
}
/* Push the last character on stack: */
@@ -854,7 +911,7 @@
while (StackPtr != 0 && i < LineLen)
Line[i++] = Stack[--StackPtr];
}
- if (LastCode != NO_SUCH_CODE) {
+ if (LastCode != NO_SUCH_CODE && Prefix[Private->RunningCode - 2] == NO_SUCH_CODE) {
Prefix[Private->RunningCode - 2] = LastCode;
if (CrntCode == Private->RunningCode - 2) {
@@ -880,37 +937,38 @@
}
/******************************************************************************
- * Routine to trace the Prefixes linked list until we get a prefix which is
- * not code, but a pixel value (less than ClearCode). Returns that pixel value.
- * If image is defective, we might loop here forever, so we limit the loops to
- * the maximum possible if image O.k. - LZ_MAX_CODE times.
- *****************************************************************************/
+ Routine to trace the Prefixes linked list until we get a prefix which is
+ not code, but a pixel value (less than ClearCode). Returns that pixel value.
+ If image is defective, we might loop here forever, so we limit the loops to
+ the maximum possible if image O.k. - LZ_MAX_CODE times.
+******************************************************************************/
static int
-DGifGetPrefixChar(unsigned int *Prefix,
- int Code,
- int ClearCode) {
-
+DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode)
+{
int i = 0;
- while (Code > ClearCode && i++ <= LZ_MAX_CODE)
+ while (Code > ClearCode && i++ <= LZ_MAX_CODE) {
+ if (Code > LZ_MAX_CODE) {
+ return NO_SUCH_CODE;
+ }
Code = Prefix[Code];
+ }
return Code;
}
/******************************************************************************
- * Interface for accessing the LZ codes directly. Set Code to the real code
- * (12bits), or to -1 if EOF code is returned.
- *****************************************************************************/
+ Interface for accessing the LZ codes directly. Set Code to the real code
+ (12bits), or to -1 if EOF code is returned.
+******************************************************************************/
int
-DGifGetLZCodes(GifFileType * GifFile,
- int *Code) {
-
+DGifGetLZCodes(GifFileType *GifFile, int *Code)
+{
GifByteType *CodeBlock;
GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
if (!IS_READABLE(Private)) {
/* This file was NOT open for reading: */
- _GifError = D_GIF_ERR_NOT_READABLE;
+ GifFile->Error = D_GIF_ERR_NOT_READABLE;
return GIF_ERROR;
}
@@ -936,32 +994,38 @@
}
/******************************************************************************
- * The LZ decompression input routine:
- * This routine is responsable for the decompression of the bit stream from
- * 8 bits (bytes) packets, into the real codes.
- * Returns GIF_OK if read succesfully.
- *****************************************************************************/
+ The LZ decompression input routine:
+ This routine is responsable for the decompression of the bit stream from
+ 8 bits (bytes) packets, into the real codes.
+ Returns GIF_OK if read successfully.
+******************************************************************************/
static int
-DGifDecompressInput(GifFileType * GifFile,
- int *Code) {
-
- GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
-
- GifByteType NextByte;
- static unsigned int CodeMasks[] = {
+DGifDecompressInput(GifFileType *GifFile, int *Code)
+{
+ static const unsigned short CodeMasks[] = {
0x0000, 0x0001, 0x0003, 0x0007,
0x000f, 0x001f, 0x003f, 0x007f,
0x00ff, 0x01ff, 0x03ff, 0x07ff,
0x0fff
};
+ GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
+
+ GifByteType NextByte;
+
+ /* The image can't contain more than LZ_BITS per code. */
+ if (Private->RunningBits > LZ_BITS) {
+ GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
+ return GIF_ERROR;
+ }
+
while (Private->CrntShiftState < Private->RunningBits) {
/* Needs to get more bytes from input stream for next code: */
if (DGifBufferedInput(GifFile, Private->Buf, &NextByte) == GIF_ERROR) {
return GIF_ERROR;
}
Private->CrntShiftDWord |=
- ((unsigned long)NextByte) << Private->CrntShiftState;
+ ((unsigned long)NextByte) << Private->CrntShiftState;
Private->CrntShiftState += 8;
}
*Code = Private->CrntShiftDWord & CodeMasks[Private->RunningBits];
@@ -970,37 +1034,45 @@
Private->CrntShiftState -= Private->RunningBits;
/* If code cannot fit into RunningBits bits, must raise its size. Note
- * however that codes above 4095 are used for special signaling. */
- if (++Private->RunningCode > Private->MaxCode1) {
- if (Private->RunningBits < LZ_BITS) {
- Private->MaxCode1 <<= 1;
- Private->RunningBits++;
- } else {
- Private->RunningCode = Private->MaxCode1;
- }
+ * however that codes above 4095 are used for special signaling.
+ * If we're using LZ_BITS bits already and we're at the max code, just
+ * keep using the table as it is, don't increment Private->RunningCode.
+ */
+ if (Private->RunningCode < LZ_MAX_CODE + 2 &&
+ ++Private->RunningCode > Private->MaxCode1 &&
+ Private->RunningBits < LZ_BITS) {
+ Private->MaxCode1 <<= 1;
+ Private->RunningBits++;
}
return GIF_OK;
}
/******************************************************************************
- * This routines read one gif data block at a time and buffers it internally
- * so that the decompression routine could access it.
- * The routine returns the next byte from its internal buffer (or read next
- * block in if buffer empty) and returns GIF_OK if succesful.
- *****************************************************************************/
+ This routines read one GIF data block at a time and buffers it internally
+ so that the decompression routine could access it.
+ The routine returns the next byte from its internal buffer (or read next
+ block in if buffer empty) and returns GIF_OK if succesful.
+******************************************************************************/
static int
-DGifBufferedInput(GifFileType * GifFile,
- GifByteType * Buf,
- GifByteType * NextByte) {
-
+DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf, GifByteType *NextByte)
+{
if (Buf[0] == 0) {
/* Needs to read the next buffer - this one is empty: */
+ /* coverity[check_return] */
if (READ(GifFile, Buf, 1) != 1) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
+ return GIF_ERROR;
+ }
+ /* There shouldn't be any empty data blocks here as the LZW spec
+ * says the LZW termination code should come first. Therefore we
+ * shouldn't be inside this routine at that point.
+ */
+ if (Buf[0] == 0) {
+ GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
return GIF_ERROR;
}
if (READ(GifFile, &Buf[1], Buf[0]) != Buf[0]) {
- _GifError = D_GIF_ERR_READ_FAILED;
+ GifFile->Error = D_GIF_ERR_READ_FAILED;
return GIF_ERROR;
}
*NextByte = Buf[1];
@@ -1015,21 +1087,21 @@
}
/******************************************************************************
- * This routine reads an entire GIF into core, hanging all its state info off
- * the GifFileType pointer. Call DGifOpenFileName() or DGifOpenFileHandle()
- * first to initialize I/O. Its inverse is EGifSpew().
- ******************************************************************************/
+ This routine reads an entire GIF into core, hanging all its state info off
+ the GifFileType pointer. Call DGifOpenFileName() or DGifOpenFileHandle()
+ first to initialize I/O. Its inverse is EGifSpew().
+*******************************************************************************/
int
-DGifSlurp(GifFileType * GifFile) {
-
- int ImageSize;
+DGifSlurp(GifFileType *GifFile)
+{
+ size_t ImageSize;
GifRecordType RecordType;
SavedImage *sp;
GifByteType *ExtData;
- SavedImage temp_save;
+ int ExtFunction;
- temp_save.ExtensionBlocks = NULL;
- temp_save.ExtensionBlockCount = 0;
+ GifFile->ExtensionBlocks = NULL;
+ GifFile->ExtensionBlockCount = 0;
do {
if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR)
@@ -1041,44 +1113,77 @@
return (GIF_ERROR);
sp = &GifFile->SavedImages[GifFile->ImageCount - 1];
+ /* Allocate memory for the image */
+ if (sp->ImageDesc.Width < 0 && sp->ImageDesc.Height < 0 &&
+ sp->ImageDesc.Width > (INT_MAX / sp->ImageDesc.Height)) {
+ return GIF_ERROR;
+ }
ImageSize = sp->ImageDesc.Width * sp->ImageDesc.Height;
+ if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) {
+ return GIF_ERROR;
+ }
sp->RasterBits = (unsigned char *)malloc(ImageSize *
- sizeof(GifPixelType));
+ sizeof(GifPixelType));
+
if (sp->RasterBits == NULL) {
return GIF_ERROR;
}
- if (DGifGetLine(GifFile, sp->RasterBits, ImageSize) ==
- GIF_ERROR)
- return (GIF_ERROR);
- if (temp_save.ExtensionBlocks) {
- sp->ExtensionBlocks = temp_save.ExtensionBlocks;
- sp->ExtensionBlockCount = temp_save.ExtensionBlockCount;
- temp_save.ExtensionBlocks = NULL;
- temp_save.ExtensionBlockCount = 0;
+ if (sp->ImageDesc.Interlace) {
+ int i, j;
+ /*
+ * The way an interlaced image should be read -
+ * offsets and jumps...
+ */
+ int InterlacedOffset[] = { 0, 4, 2, 1 };
+ int InterlacedJumps[] = { 8, 8, 4, 2 };
+ /* Need to perform 4 passes on the image */
+ for (i = 0; i < 4; i++)
+ for (j = InterlacedOffset[i];
+ j < sp->ImageDesc.Height;
+ j += InterlacedJumps[i]) {
+ if (DGifGetLine(GifFile,
+ sp->RasterBits+j*sp->ImageDesc.Width,
+ sp->ImageDesc.Width) == GIF_ERROR)
+ return GIF_ERROR;
+ }
+ }
+ else {
+ if (DGifGetLine(GifFile,sp->RasterBits,ImageSize)==GIF_ERROR)
+ return (GIF_ERROR);
+ }
- /* FIXME: The following is wrong. It is left in only for
- * backwards compatibility. Someday it should go away. Use
- * the sp->ExtensionBlocks->Function variable instead. */
- sp->Function = sp->ExtensionBlocks[0].Function;
+ if (GifFile->ExtensionBlocks) {
+ sp->ExtensionBlocks = GifFile->ExtensionBlocks;
+ sp->ExtensionBlockCount = GifFile->ExtensionBlockCount;
+
+ GifFile->ExtensionBlocks = NULL;
+ GifFile->ExtensionBlockCount = 0;
}
break;
case EXTENSION_RECORD_TYPE:
- if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) ==
- GIF_ERROR)
+ if (DGifGetExtension(GifFile,&ExtFunction,&ExtData) == GIF_ERROR)
return (GIF_ERROR);
- while (ExtData != NULL) {
-
- /* Create an extension block with our data */
- if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1])
+ /* Create an extension block with our data */
+ if (ExtData != NULL) {
+ if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+ &GifFile->ExtensionBlocks,
+ ExtFunction, ExtData[0], &ExtData[1])
== GIF_ERROR)
return (GIF_ERROR);
-
+ }
+ while (ExtData != NULL) {
if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR)
return (GIF_ERROR);
- temp_save.Function = 0;
+ /* Continue the extension block */
+ if (ExtData != NULL)
+ if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+ &GifFile->ExtensionBlocks,
+ CONTINUE_EXT_FUNC_CODE,
+ ExtData[0], &ExtData[1]) == GIF_ERROR)
+ return (GIF_ERROR);
}
break;
@@ -1090,12 +1195,13 @@
}
} while (RecordType != TERMINATE_RECORD_TYPE);
- /* Just in case the Gif has an extension block without an associated
- * image... (Should we save this into a savefile structure with no image
- * instead? Have to check if the present writing code can handle that as
- * well.... */
- if (temp_save.ExtensionBlocks)
- FreeExtension(&temp_save);
+ /* Sanity check for corrupted file */
+ if (GifFile->ImageCount == 0) {
+ GifFile->Error = D_GIF_ERR_NO_IMAG_DSCR;
+ return(GIF_ERROR);
+ }
return (GIF_OK);
}
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c Wed Jul 05 20:33:55 2017 +0200
@@ -23,71 +23,81 @@
*/
/*****************************************************************************
- * "Gif-Lib" - Yet another gif library.
- *
- * Written by: Gershon Elber IBM PC Ver 0.1, Jun. 1989
- *****************************************************************************
- * Handle error reporting for the GIF library.
- *****************************************************************************
- * History:
- * 17 Jun 89 - Version 1.0 by Gershon Elber.
- ****************************************************************************/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+gif_err.c - handle error reporting for the GIF library.
+
+****************************************************************************/
#include <stdio.h>
+
#include "gif_lib.h"
-
-int _GifError = 0;
+#include "gif_lib_private.h"
/*****************************************************************************
- * Return the last GIF error (0 if none) and reset the error.
- ****************************************************************************/
-int
-GifLastError(void) {
- int i = _GifError;
-
- _GifError = 0;
+ Return a string description of the last GIF error
+*****************************************************************************/
+const char *
+GifErrorString(int ErrorCode)
+{
+ const char *Err;
- return i;
-}
-
-/*****************************************************************************
- * Print the last GIF error to stderr.
- ****************************************************************************/
-void
-PrintGifError(void) {
- char *Err;
-
- switch (_GifError) {
+ switch (ErrorCode) {
+ case E_GIF_ERR_OPEN_FAILED:
+ Err = "Failed to open given file";
+ break;
+ case E_GIF_ERR_WRITE_FAILED:
+ Err = "Failed to write to given file";
+ break;
+ case E_GIF_ERR_HAS_SCRN_DSCR:
+ Err = "Screen descriptor has already been set";
+ break;
+ case E_GIF_ERR_HAS_IMAG_DSCR:
+ Err = "Image descriptor is still active";
+ break;
+ case E_GIF_ERR_NO_COLOR_MAP:
+ Err = "Neither global nor local color map";
+ break;
+ case E_GIF_ERR_DATA_TOO_BIG:
+ Err = "Number of pixels bigger than width * height";
+ break;
+ case E_GIF_ERR_NOT_ENOUGH_MEM:
+ Err = "Failed to allocate required memory";
+ break;
+ case E_GIF_ERR_DISK_IS_FULL:
+ Err = "Write failed (disk full?)";
+ break;
+ case E_GIF_ERR_CLOSE_FAILED:
+ Err = "Failed to close given file";
+ break;
+ case E_GIF_ERR_NOT_WRITEABLE:
+ Err = "Given file was not opened for write";
+ break;
case D_GIF_ERR_OPEN_FAILED:
Err = "Failed to open given file";
break;
case D_GIF_ERR_READ_FAILED:
- Err = "Failed to Read from given file";
+ Err = "Failed to read from given file";
break;
case D_GIF_ERR_NOT_GIF_FILE:
- Err = "Given file is NOT GIF file";
+ Err = "Data is not in GIF format";
break;
case D_GIF_ERR_NO_SCRN_DSCR:
- Err = "No Screen Descriptor detected";
+ Err = "No screen descriptor detected";
break;
case D_GIF_ERR_NO_IMAG_DSCR:
Err = "No Image Descriptor detected";
break;
case D_GIF_ERR_NO_COLOR_MAP:
- Err = "Neither Global Nor Local color map";
+ Err = "Neither global nor local color map";
break;
case D_GIF_ERR_WRONG_RECORD:
Err = "Wrong record type detected";
break;
case D_GIF_ERR_DATA_TOO_BIG:
- Err = "#Pixels bigger than Width * Height";
+ Err = "Number of pixels bigger than width * height";
break;
case D_GIF_ERR_NOT_ENOUGH_MEM:
- Err = "Fail to allocate required memory";
+ Err = "Failed to allocate required memory";
break;
case D_GIF_ERR_CLOSE_FAILED:
Err = "Failed to close given file";
@@ -99,14 +109,13 @@
Err = "Image is defective, decoding aborted";
break;
case D_GIF_ERR_EOF_TOO_SOON:
- Err = "Image EOF detected, before image complete";
+ Err = "Image EOF detected before image complete";
break;
default:
Err = NULL;
break;
}
- if (Err != NULL)
- fprintf(stderr, "\nGIF-LIB error: %s.\n", Err);
- else
- fprintf(stderr, "\nGIF-LIB undefined error %d.\n", _GifError);
+ return Err;
}
+
+/* end */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_hash.h Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,62 @@
+/*
+ * 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/******************************************************************************
+
+gif_hash.h - magfic constants and declarations for GIF LZW
+
+******************************************************************************/
+
+#ifndef _GIF_HASH_H_
+#define _GIF_HASH_H_
+
+#include <stdint.h>
+
+#define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */
+#define HT_KEY_MASK 0x1FFF /* 13bits keys */
+#define HT_KEY_NUM_BITS 13 /* 13bits keys */
+#define HT_MAX_KEY 8191 /* 13bits - 1, maximal code possible */
+#define HT_MAX_CODE 4095 /* Biggest code possible in 12 bits. */
+
+/* The 32 bits of the long are divided into two parts for the key & code: */
+/* 1. The code is 12 bits as our compression algorithm is limited to 12bits */
+/* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits. */
+/* The key is the upper 20 bits. The code is the lower 12. */
+#define HT_GET_KEY(l) (l >> 12)
+#define HT_GET_CODE(l) (l & 0x0FFF)
+#define HT_PUT_KEY(l) (l << 12)
+#define HT_PUT_CODE(l) (l & 0x0FFF)
+
+typedef struct GifHashTableType {
+ uint32_t HTable[HT_SIZE];
+} GifHashTableType;
+
+GifHashTableType *_InitHashTable(void);
+void _ClearHashTable(GifHashTableType *HashTable);
+void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code);
+int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key);
+
+#endif /* _GIF_HASH_H_ */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h Wed Jul 05 20:33:55 2017 +0200
@@ -23,21 +23,10 @@
*/
/******************************************************************************
- * In order to make life a little bit easier when using the GIF file format,
- * this library was written, and which does all the dirty work...
- *
- * Written by Gershon Elber, Jun. 1989
- * Hacks by Eric S. Raymond, Sep. 1992
- ******************************************************************************
- * History:
- * 14 Jun 89 - Version 1.0 by Gershon Elber.
- * 3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names)
- * 15 Sep 90 - Version 2.0 by Eric S. Raymond (Changes to suoport GIF slurp)
- * 26 Jun 96 - Version 3.0 by Eric S. Raymond (Full GIF89 support)
- * 17 Dec 98 - Version 4.0 by Toshio Kuratomi (Fix extension writing code)
- *****************************************************************************/
-/* all encoding functionality stripped */
+gif_lib.h - service library for decoding and encoding GIF images
+
+*****************************************************************************/
#ifndef _GIF_LIB_H_
#define _GIF_LIB_H_ 1
@@ -46,21 +35,21 @@
extern "C" {
#endif /* __cplusplus */
-#define GIF_LIB_VERSION " Version 4.1, "
+#define GIFLIB_MAJOR 5
+#define GIFLIB_MINOR 1
+#define GIFLIB_RELEASE 1
#define GIF_ERROR 0
#define GIF_OK 1
-#ifndef TRUE
-#define TRUE 1
-#endif /* TRUE */
-#ifndef FALSE
-#define FALSE 0
-#endif /* FALSE */
+#include <stddef.h>
-#ifndef NULL
-#define NULL 0
-#endif /* NULL */
+#ifdef bool
+#undef bool
+#endif
+typedef int bool;
+#define false 0
+#define true 1
#define GIF_STAMP "GIFVER" /* First chars in file - GIF stamp. */
#define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
@@ -68,21 +57,11 @@
#define GIF87_STAMP "GIF87a" /* First chars in file - GIF stamp. */
#define GIF89_STAMP "GIF89a" /* First chars in file - GIF stamp. */
-#define GIF_FILE_BUFFER_SIZE 16384 /* Files uses bigger buffers than usual. */
-
-typedef int GifBooleanType;
typedef unsigned char GifPixelType;
typedef unsigned char *GifRowType;
typedef unsigned char GifByteType;
-
-#define GIF_MESSAGE(Msg) fprintf(stderr, "\n%s: %s\n", PROGRAM_NAME, Msg)
-#define GIF_EXIT(Msg) { GIF_MESSAGE(Msg); exit(-3); }
-
-#ifdef SYSV
-#define VoidPtr char *
-#else
-#define VoidPtr void *
-#endif /* SYSV */
+typedef unsigned int GifPrefixType;
+typedef int GifWord;
typedef struct GifColorType {
GifByteType Red, Green, Blue;
@@ -91,27 +70,52 @@
typedef struct ColorMapObject {
int ColorCount;
int BitsPerPixel;
+ bool SortFlag;
GifColorType *Colors; /* on malloc(3) heap */
} ColorMapObject;
typedef struct GifImageDesc {
- int Left, Top, Width, Height, /* Current image dimensions. */
- Interlace; /* Sequential/Interlaced lines. */
- ColorMapObject *ColorMap; /* The local color map */
+ GifWord Left, Top, Width, Height; /* Current image dimensions. */
+ bool Interlace; /* Sequential/Interlaced lines. */
+ ColorMapObject *ColorMap; /* The local color map */
} GifImageDesc;
+typedef struct ExtensionBlock {
+ int ByteCount;
+ GifByteType *Bytes; /* on malloc(3) heap */
+ int Function; /* The block function code */
+#define CONTINUE_EXT_FUNC_CODE 0x00 /* continuation subblock */
+#define COMMENT_EXT_FUNC_CODE 0xfe /* comment */
+#define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control (GIF89) */
+#define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */
+#define APPLICATION_EXT_FUNC_CODE 0xff /* application block */
+} ExtensionBlock;
+
+typedef struct SavedImage {
+ GifImageDesc ImageDesc;
+ GifByteType *RasterBits; /* on malloc(3) heap */
+ int ExtensionBlockCount; /* Count of extensions before image */
+ ExtensionBlock *ExtensionBlocks; /* Extensions before image */
+} SavedImage;
+
typedef struct GifFileType {
- int SWidth, SHeight, /* Screen dimensions. */
- SColorResolution, /* How many colors can we generate? */
- SBackGroundColor; /* I hope you understand this one... */
- ColorMapObject *SColorMap; /* NULL if not exists. */
- int ImageCount; /* Number of current image */
- GifImageDesc Image; /* Block describing current image */
- struct SavedImage *SavedImages; /* Use this to accumulate file state */
- VoidPtr UserData; /* hook to attach user data (TVT) */
- VoidPtr Private; /* Don't mess with this! */
+ GifWord SWidth, SHeight; /* Size of virtual canvas */
+ GifWord SColorResolution; /* How many colors can we generate? */
+ GifWord SBackGroundColor; /* Background color for virtual canvas */
+ GifByteType AspectByte; /* Used to compute pixel aspect ratio */
+ ColorMapObject *SColorMap; /* Global colormap, NULL if nonexistent. */
+ int ImageCount; /* Number of current image (both APIs) */
+ GifImageDesc Image; /* Current image (low-level API) */
+ SavedImage *SavedImages; /* Image sequence (high-level API) */
+ int ExtensionBlockCount; /* Count extensions past last image */
+ ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
+ int Error; /* Last error condition reported */
+ void *UserData; /* hook to attach user data (TVT) */
+ void *Private; /* Don't mess with this! */
} GifFileType;
+#define GIF_ASPECT_RATIO(n) ((n)+15.0/64.0)
+
typedef enum {
UNDEFINED_RECORD_TYPE,
SCREEN_DESC_RECORD_TYPE,
@@ -120,58 +124,95 @@
TERMINATE_RECORD_TYPE /* Begin with ';' */
} GifRecordType;
-/* DumpScreen2Gif routine constants identify type of window/screen to dump.
- * Note all values below 1000 are reserved for the IBMPC different display
- * devices (it has many!) and are compatible with the numbering TC2.0
- * (Turbo C 2.0 compiler for IBM PC) gives to these devices.
- */
-typedef enum {
- GIF_DUMP_SGI_WINDOW = 1000,
- GIF_DUMP_X_WINDOW = 1001
-} GifScreenDumpType;
-
/* func type to read gif data from arbitrary sources (TVT) */
typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
-/* func type to write gif data ro arbitrary targets.
+/* func type to write gif data to arbitrary targets.
* Returns count of bytes written. (MRB)
*/
typedef int (*OutputFunc) (GifFileType *, const GifByteType *, int);
/******************************************************************************
- * GIF89 extension function codes
+ GIF89 structures
******************************************************************************/
-#define COMMENT_EXT_FUNC_CODE 0xfe /* comment */
-#define GRAPHICS_EXT_FUNC_CODE 0xf9 /* graphics control */
-#define PLAINTEXT_EXT_FUNC_CODE 0x01 /* plaintext */
-#define APPLICATION_EXT_FUNC_CODE 0xff /* application block */
+typedef struct GraphicsControlBlock {
+ int DisposalMode;
+#define DISPOSAL_UNSPECIFIED 0 /* No disposal specified. */
+#define DISPOSE_DO_NOT 1 /* Leave image in place */
+#define DISPOSE_BACKGROUND 2 /* Set area too background color */
+#define DISPOSE_PREVIOUS 3 /* Restore to previous content */
+ bool UserInputFlag; /* User confirmation required before disposal */
+ int DelayTime; /* pre-display delay in 0.01sec units */
+ int TransparentColor; /* Palette index for transparency, -1 if none */
+#define NO_TRANSPARENT_COLOR -1
+} GraphicsControlBlock;
/******************************************************************************
- * O.K., here are the routines one can access in order to decode GIF file:
- * (GIF_LIB file DGIF_LIB.C).
- *****************************************************************************/
+ GIF encoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *EGifOpenFileName(const char *GifFileName,
+ const bool GifTestExistence, int *Error);
+GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
+GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
+int EGifSpew(GifFileType * GifFile);
+const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
+int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
+
+#define E_GIF_SUCCEEDED 0
+#define E_GIF_ERR_OPEN_FAILED 1 /* And EGif possible errors. */
+#define E_GIF_ERR_WRITE_FAILED 2
+#define E_GIF_ERR_HAS_SCRN_DSCR 3
+#define E_GIF_ERR_HAS_IMAG_DSCR 4
+#define E_GIF_ERR_NO_COLOR_MAP 5
+#define E_GIF_ERR_DATA_TOO_BIG 6
+#define E_GIF_ERR_NOT_ENOUGH_MEM 7
+#define E_GIF_ERR_DISK_IS_FULL 8
+#define E_GIF_ERR_CLOSE_FAILED 9
+#define E_GIF_ERR_NOT_WRITEABLE 10
-GifFileType *DGifOpenFileName(const char *GifFileName);
-GifFileType *DGifOpenFileHandle(int GifFileHandle);
-GifFileType *DGifOpen(void *userPtr, InputFunc readFunc); /* new one
- * (TVT) */
+/* These are legacy. You probably do not want to call them directly */
+int EGifPutScreenDesc(GifFileType *GifFile,
+ const int GifWidth, const int GifHeight,
+ const int GifColorRes,
+ const int GifBackGround,
+ const ColorMapObject *GifColorMap);
+int EGifPutImageDesc(GifFileType *GifFile,
+ const int GifLeft, const int GifTop,
+ const int GifWidth, const int GifHeight,
+ const bool GifInterlace,
+ const ColorMapObject *GifColorMap);
+void EGifSetGifVersion(GifFileType *GifFile, const bool gif89);
+int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine,
+ int GifLineLen);
+int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
+int EGifPutComment(GifFileType *GifFile, const char *GifComment);
+int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
+int EGifPutExtensionBlock(GifFileType *GifFile,
+ const int GifExtLen, const void *GifExtension);
+int EGifPutExtensionTrailer(GifFileType *GifFile);
+int EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
+ const int GifExtLen,
+ const void *GifExtension);
+int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
+ const GifByteType *GifCodeBlock);
+int EGifPutCodeNext(GifFileType *GifFile,
+ const GifByteType *GifCodeBlock);
+
+/******************************************************************************
+ GIF decoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
+GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
int DGifSlurp(GifFileType * GifFile);
-int DGifGetScreenDesc(GifFileType * GifFile);
-int DGifGetRecordType(GifFileType * GifFile, GifRecordType * GifType);
-int DGifGetImageDesc(GifFileType * GifFile);
-int DGifGetLine(GifFileType * GifFile, GifPixelType * GifLine, int GifLineLen);
-int DGifGetPixel(GifFileType * GifFile, GifPixelType GifPixel);
-int DGifGetComment(GifFileType * GifFile, char *GifComment);
-int DGifGetExtension(GifFileType * GifFile, int *GifExtCode,
- GifByteType ** GifExtension);
-int DGifGetExtensionNext(GifFileType * GifFile, GifByteType ** GifExtension);
-int DGifGetCode(GifFileType * GifFile, int *GifCodeSize,
- GifByteType ** GifCodeBlock);
-int DGifGetCodeNext(GifFileType * GifFile, GifByteType ** GifCodeBlock);
-int DGifGetLZCodes(GifFileType * GifFile, int *GifCode);
-int DGifCloseFile(GifFileType * GifFile);
+GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error); /* new one (TVT) */
+ int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
+#define D_GIF_SUCCEEDED 0
#define D_GIF_ERR_OPEN_FAILED 101 /* And DGif possible errors. */
#define D_GIF_ERR_READ_FAILED 102
#define D_GIF_ERR_NOT_GIF_FILE 103
@@ -186,68 +227,113 @@
#define D_GIF_ERR_IMAGE_DEFECT 112
#define D_GIF_ERR_EOF_TOO_SOON 113
+/* These are legacy. You probably do not want to call them directly */
+int DGifGetScreenDesc(GifFileType *GifFile);
+int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
+int DGifGetImageDesc(GifFileType *GifFile);
+int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
+int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
+int DGifGetComment(GifFileType *GifFile, char *GifComment);
+int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
+ GifByteType **GifExtension);
+int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
+int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
+ GifByteType **GifCodeBlock);
+int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
+int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
-/******************************************************************************
- * O.K., here are the routines from GIF_LIB file GIF_ERR.C.
-******************************************************************************/
-extern void PrintGifError(void);
-extern int GifLastError(void);
/******************************************************************************
- * O.K., here are the routines from GIF_LIB file DEV2GIF.C.
+ Color table quantization (deprecated)
******************************************************************************/
-extern int DumpScreen2Gif(const char *FileName,
- int ReqGraphDriver,
- long ReqGraphMode1,
- long ReqGraphMode2,
- long ReqGraphMode3);
+int GifQuantizeBuffer(unsigned int Width, unsigned int Height,
+ int *ColorMapSize, GifByteType * RedInput,
+ GifByteType * GreenInput, GifByteType * BlueInput,
+ GifByteType * OutputBuffer,
+ GifColorType * OutputColorMap);
+
+/******************************************************************************
+ Error handling and reporting.
+******************************************************************************/
+extern const char *GifErrorString(int ErrorCode); /* new in 2012 - ESR */
/*****************************************************************************
- *
- * Everything below this point is new after version 1.2, supporting `slurp
- * mode' for doing I/O in two big belts with all the image-bashing in core.
- *
- *****************************************************************************/
+ Everything below this point is new after version 1.2, supporting `slurp
+ mode' for doing I/O in two big belts with all the image-bashing in core.
+******************************************************************************/
+
+/******************************************************************************
+ Color map handling from gif_alloc.c
+******************************************************************************/
+
+extern ColorMapObject *GifMakeMapObject(int ColorCount,
+ const GifColorType *ColorMap);
+extern void GifFreeMapObject(ColorMapObject *Object);
+extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
+ const ColorMapObject *ColorIn2,
+ GifPixelType ColorTransIn2[]);
+extern int GifBitSize(int n);
/******************************************************************************
- * Color Map handling from ALLOCGIF.C
- *****************************************************************************/
+ Support for the in-core structures allocation (slurp mode).
+******************************************************************************/
-extern ColorMapObject *MakeMapObject(int ColorCount,
- const GifColorType * ColorMap);
-extern void FreeMapObject(ColorMapObject * Object);
-extern int BitSize(int n);
+extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]);
+extern int GifAddExtensionBlock(int *ExtensionBlock_Count,
+ ExtensionBlock **ExtensionBlocks,
+ int Function,
+ unsigned int Len, unsigned char ExtData[]);
+extern void GifFreeExtensions(int *ExtensionBlock_Count,
+ ExtensionBlock **ExtensionBlocks);
+extern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
+ const SavedImage *CopyFrom);
+extern void GifFreeSavedImages(GifFileType *GifFile);
/******************************************************************************
- * Support for the in-core structures allocation (slurp mode).
- *****************************************************************************/
+ 5.x functions for GIF89 graphics control blocks
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+ const GifByteType *GifExtension,
+ GraphicsControlBlock *GCB);
+size_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
+ GifByteType *GifExtension);
-/* This is the in-core version of an extension record */
-typedef struct {
- int ByteCount;
- char *Bytes; /* on malloc(3) heap */
- int Function; /* Holds the type of the Extension block. */
-} ExtensionBlock;
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+ int ImageIndex,
+ GraphicsControlBlock *GCB);
+int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
+ GifFileType *GifFile,
+ int ImageIndex);
+
+/******************************************************************************
+ The library's internal utility font
+******************************************************************************/
-/* This holds an image header, its unpacked raster bits, and extensions */
-typedef struct SavedImage {
- GifImageDesc ImageDesc;
- unsigned char *RasterBits; /* on malloc(3) heap */
- int Function; /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
- int ExtensionBlockCount;
- ExtensionBlock *ExtensionBlocks; /* on malloc(3) heap */
-} SavedImage;
+#define GIF_FONT_WIDTH 8
+#define GIF_FONT_HEIGHT 8
+extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
+
+extern void GifDrawText8x8(SavedImage *Image,
+ const int x, const int y,
+ const char *legend, const int color);
-extern void MakeExtension(SavedImage * New, int Function);
-extern int AddExtensionBlock(SavedImage * New, int Len,
- unsigned char ExtData[]);
-extern void FreeExtension(SavedImage * Image);
-extern SavedImage *MakeSavedImage(GifFileType * GifFile,
- const SavedImage * CopyFrom);
-extern void FreeSavedImages(GifFileType * GifFile);
+extern void GifDrawBox(SavedImage *Image,
+ const int x, const int y,
+ const int w, const int d, const int color);
+extern void GifDrawRectangle(SavedImage *Image,
+ const int x, const int y,
+ const int w, const int d, const int color);
+
+extern void GifDrawBoxedText8x8(SavedImage *Image,
+ const int x, const int y,
+ const char *legend,
+ const int border, const int bg, const int fg);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _GIF_LIB_H */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h Wed Jul 05 20:33:55 2017 +0200
@@ -22,21 +22,21 @@
* questions.
*/
+/****************************************************************************
+
+gif_lib_private.h - internal giflib routines and structures
+
+****************************************************************************/
+
#ifndef _GIF_LIB_PRIVATE_H
#define _GIF_LIB_PRIVATE_H
#include "gif_lib.h"
-
-#define PROGRAM_NAME "LIBUNGIF"
+#include "gif_hash.h"
-#ifdef SYSV
-#define VersionStr "Gif library module,\t\tEric S. Raymond\n\
- (C) Copyright 1997 Eric S. Raymond\n"
-#else
-#define VersionStr PROGRAM_NAME " IBMPC " GIF_LIB_VERSION \
- " Eric S. Raymond, " __DATE__ ", " \
- __TIME__ "\n" "(C) Copyright 1997 Eric S. Raymond\n"
-#endif /* SYSV */
+#define EXTENSION_INTRODUCER 0x21
+#define DESCRIPTOR_INTRODUCER 0x2c
+#define TERMINATOR_INTRODUCER 0x3b
#define LZ_MAX_CODE 4095 /* Biggest code possible in 12 bits. */
#define LZ_BITS 12
@@ -54,7 +54,7 @@
#define IS_WRITEABLE(Private) (Private->FileState & FILE_STATE_WRITE)
typedef struct GifFilePrivateType {
- int FileState, FileHandle, /* Where all this data goes to! */
+ GifWord FileState, FileHandle, /* Where all this data goes to! */
BitsPerPixel, /* Bits per pixel (Codes uses at least this + 1). */
ClearCode, /* The CLEAR LZ code. */
EOFCode, /* The EOF LZ code. */
@@ -73,9 +73,11 @@
GifByteType Buf[256]; /* Compressed input is buffered here. */
GifByteType Stack[LZ_MAX_CODE]; /* Decoded pixels are stacked here. */
GifByteType Suffix[LZ_MAX_CODE + 1]; /* So we can trace the codes. */
- unsigned int Prefix[LZ_MAX_CODE + 1];
+ GifPrefixType Prefix[LZ_MAX_CODE + 1];
+ GifHashTableType *HashTable;
+ bool gif89;
} GifFilePrivateType;
-extern int _GifError;
+#endif /* _GIF_LIB_PRIVATE_H */
-#endif /* _GIF_LIB_PRIVATE_H */
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c Wed Jul 05 20:33:55 2017 +0200
@@ -23,36 +23,27 @@
*/
/*****************************************************************************
- * "Gif-Lib" - Yet another gif library.
- *
- * Written by: Gershon Elber Ver 0.1, Jun. 1989
- * Extensively hacked by: Eric S. Raymond Ver 1.?, Sep 1992
- *****************************************************************************
- * GIF construction tools
- *****************************************************************************
- * History:
- * 15 Sep 92 - Version 1.0 by Eric Raymond.
- ****************************************************************************/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+ GIF construction tools
+
+****************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+
#include "gif_lib.h"
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
/******************************************************************************
- * Miscellaneous utility functions
- *****************************************************************************/
+ Miscellaneous utility functions
+******************************************************************************/
/* return smallest bitfield size n will fit in */
int
-BitSize(int n) {
-
+GifBitSize(int n)
+{
register int i;
for (i = 1; i <= 8; i++)
@@ -62,22 +53,21 @@
}
/******************************************************************************
- * Color map object functions
- *****************************************************************************/
+ Color map object functions
+******************************************************************************/
/*
* Allocate a color map of given size; initialize with contents of
* ColorMap if that pointer is non-NULL.
*/
ColorMapObject *
-MakeMapObject(int ColorCount,
- const GifColorType * ColorMap) {
-
+GifMakeMapObject(int ColorCount, const GifColorType *ColorMap)
+{
ColorMapObject *Object;
/*** FIXME: Our ColorCount has to be a power of two. Is it necessary to
* make the user know that or should we automatically round up instead? */
- if (ColorCount != (1 << BitSize(ColorCount))) {
+ if (ColorCount != (1 << GifBitSize(ColorCount))) {
return ((ColorMapObject *) NULL);
}
@@ -93,9 +83,10 @@
}
Object->ColorCount = ColorCount;
- Object->BitsPerPixel = BitSize(ColorCount);
+ Object->BitsPerPixel = GifBitSize(ColorCount);
+ Object->SortFlag = false;
- if (ColorMap) {
+ if (ColorMap != NULL) {
memcpy((char *)Object->Colors,
(char *)ColorMap, ColorCount * sizeof(GifColorType));
}
@@ -103,118 +94,222 @@
return (Object);
}
-/*
- * Free a color map object
- */
+/*******************************************************************************
+Free a color map object
+*******************************************************************************/
void
-FreeMapObject(ColorMapObject * Object) {
-
+GifFreeMapObject(ColorMapObject *Object)
+{
if (Object != NULL) {
- free(Object->Colors);
- free(Object);
- Object = NULL;
+ (void)free(Object->Colors);
+ (void)free(Object);
}
}
#ifdef DEBUG
void
-DumpColorMap(ColorMapObject * Object,
- FILE * fp) {
-
- if (Object) {
+DumpColorMap(ColorMapObject *Object,
+ FILE * fp)
+{
+ if (Object != NULL) {
int i, j, Len = Object->ColorCount;
for (i = 0; i < Len; i += 4) {
for (j = 0; j < 4 && j < Len; j++) {
- fprintf(fp, "%3d: %02x %02x %02x ", i + j,
- Object->Colors[i + j].Red,
- Object->Colors[i + j].Green,
- Object->Colors[i + j].Blue);
+ (void)fprintf(fp, "%3d: %02x %02x %02x ", i + j,
+ Object->Colors[i + j].Red,
+ Object->Colors[i + j].Green,
+ Object->Colors[i + j].Blue);
}
- fprintf(fp, "\n");
+ (void)fprintf(fp, "\n");
}
}
}
#endif /* DEBUG */
-/******************************************************************************
- * Extension record functions
- *****************************************************************************/
+/*******************************************************************************
+ Compute the union of two given color maps and return it. If result can't
+ fit into 256 colors, NULL is returned, the allocated union otherwise.
+ ColorIn1 is copied as is to ColorUnion, while colors from ColorIn2 are
+ copied iff they didn't exist before. ColorTransIn2 maps the old
+ ColorIn2 into the ColorUnion color map table./
+*******************************************************************************/
+ColorMapObject *
+GifUnionColorMap(const ColorMapObject *ColorIn1,
+ const ColorMapObject *ColorIn2,
+ GifPixelType ColorTransIn2[])
+{
+ int i, j, CrntSlot, RoundUpTo, NewGifBitSize;
+ ColorMapObject *ColorUnion;
+
+ /*
+ * We don't worry about duplicates within either color map; if
+ * the caller wants to resolve those, he can perform unions
+ * with an empty color map.
+ */
-void
-MakeExtension(SavedImage * New,
- int Function) {
+ /* Allocate table which will hold the result for sure. */
+ ColorUnion = GifMakeMapObject(MAX(ColorIn1->ColorCount,
+ ColorIn2->ColorCount) * 2, NULL);
+
+ if (ColorUnion == NULL)
+ return (NULL);
+
+ /*
+ * Copy ColorIn1 to ColorUnion.
+ */
+ for (i = 0; i < ColorIn1->ColorCount; i++)
+ ColorUnion->Colors[i] = ColorIn1->Colors[i];
+ CrntSlot = ColorIn1->ColorCount;
+
+ /*
+ * Potentially obnoxious hack:
+ *
+ * Back CrntSlot down past all contiguous {0, 0, 0} slots at the end
+ * of table 1. This is very useful if your display is limited to
+ * 16 colors.
+ */
+ while (ColorIn1->Colors[CrntSlot - 1].Red == 0
+ && ColorIn1->Colors[CrntSlot - 1].Green == 0
+ && ColorIn1->Colors[CrntSlot - 1].Blue == 0)
+ CrntSlot--;
- New->Function = Function;
- /*** FIXME:
- * Someday we might have to deal with multiple extensions.
- * ??? Was this a note from Gershon or from me? Does the multiple
- * extension blocks solve this or do we need multiple Functions? Or is
- * this an obsolete function? (People should use AddExtensionBlock
- * instead?)
- * Looks like AddExtensionBlock needs to take the int Function argument
- * then it can take the place of this function. Right now people have to
- * use both. Fix AddExtensionBlock and add this to the deprecation list.
- */
+ /* Copy ColorIn2 to ColorUnion (use old colors if they exist): */
+ for (i = 0; i < ColorIn2->ColorCount && CrntSlot <= 256; i++) {
+ /* Let's see if this color already exists: */
+ for (j = 0; j < ColorIn1->ColorCount; j++)
+ if (memcmp (&ColorIn1->Colors[j], &ColorIn2->Colors[i],
+ sizeof(GifColorType)) == 0)
+ break;
+
+ if (j < ColorIn1->ColorCount)
+ ColorTransIn2[i] = j; /* color exists in Color1 */
+ else {
+ /* Color is new - copy it to a new slot: */
+ ColorUnion->Colors[CrntSlot] = ColorIn2->Colors[i];
+ ColorTransIn2[i] = CrntSlot++;
+ }
+ }
+
+ if (CrntSlot > 256) {
+ GifFreeMapObject(ColorUnion);
+ return ((ColorMapObject *) NULL);
+ }
+
+ NewGifBitSize = GifBitSize(CrntSlot);
+ RoundUpTo = (1 << NewGifBitSize);
+
+ if (RoundUpTo != ColorUnion->ColorCount) {
+ register GifColorType *Map = ColorUnion->Colors;
+
+ /*
+ * Zero out slots up to next power of 2.
+ * We know these slots exist because of the way ColorUnion's
+ * start dimension was computed.
+ */
+ for (j = CrntSlot; j < RoundUpTo; j++)
+ Map[j].Red = Map[j].Green = Map[j].Blue = 0;
+
+ /* perhaps we can shrink the map? */
+ if (RoundUpTo < ColorUnion->ColorCount) {
+ GifColorType *new_map = (GifColorType *)realloc(Map,
+ sizeof(GifColorType) * RoundUpTo);
+ if( new_map == NULL ) {
+ GifFreeMapObject(ColorUnion);
+ return ((ColorMapObject *) NULL);
+ }
+ ColorUnion->Colors = new_map;
+ }
+ }
+
+ ColorUnion->ColorCount = RoundUpTo;
+ ColorUnion->BitsPerPixel = NewGifBitSize;
+
+ return (ColorUnion);
}
+/*******************************************************************************
+ Apply a given color translation to the raster bits of an image
+*******************************************************************************/
+void
+GifApplyTranslation(SavedImage *Image, GifPixelType Translation[])
+{
+ register int i;
+ register int RasterSize = Image->ImageDesc.Height * Image->ImageDesc.Width;
+
+ for (i = 0; i < RasterSize; i++)
+ Image->RasterBits[i] = Translation[Image->RasterBits[i]];
+}
+
+/******************************************************************************
+ Extension record functions
+******************************************************************************/
int
-AddExtensionBlock(SavedImage * New,
- int Len,
- unsigned char ExtData[]) {
-
+GifAddExtensionBlock(int *ExtensionBlockCount,
+ ExtensionBlock **ExtensionBlocks,
+ int Function,
+ unsigned int Len,
+ unsigned char ExtData[])
+{
ExtensionBlock *ep;
- if (New->ExtensionBlocks == NULL)
- New->ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
- else
- New->ExtensionBlocks = (ExtensionBlock *)realloc(New->ExtensionBlocks,
+ if (*ExtensionBlocks == NULL)
+ *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
+ else {
+ ExtensionBlock* ep_new = (ExtensionBlock *)realloc(*ExtensionBlocks,
sizeof(ExtensionBlock) *
- (New->ExtensionBlockCount + 1));
+ (*ExtensionBlockCount + 1));
+ if( ep_new == NULL )
+ return (GIF_ERROR);
+ *ExtensionBlocks = ep_new;
+ }
- if (New->ExtensionBlocks == NULL)
+ if (*ExtensionBlocks == NULL)
return (GIF_ERROR);
- ep = &New->ExtensionBlocks[New->ExtensionBlockCount++];
+ ep = &(*ExtensionBlocks)[(*ExtensionBlockCount)++];
+ ep->Function = Function;
ep->ByteCount=Len;
- ep->Bytes = (char *)malloc(ep->ByteCount);
+ ep->Bytes = (GifByteType *)malloc(ep->ByteCount);
if (ep->Bytes == NULL)
return (GIF_ERROR);
- if (ExtData) {
+ if (ExtData != NULL) {
memcpy(ep->Bytes, ExtData, Len);
- ep->Function = New->Function;
}
return (GIF_OK);
}
void
-FreeExtension(SavedImage * Image)
+GifFreeExtensions(int *ExtensionBlockCount,
+ ExtensionBlock **ExtensionBlocks)
{
ExtensionBlock *ep;
- if ((Image == NULL) || (Image->ExtensionBlocks == NULL)) {
+ if (*ExtensionBlocks == NULL)
return;
- }
- for (ep = Image->ExtensionBlocks;
- ep < (Image->ExtensionBlocks + Image->ExtensionBlockCount); ep++)
+
+ for (ep = *ExtensionBlocks;
+ ep < (*ExtensionBlocks + *ExtensionBlockCount);
+ ep++)
(void)free((char *)ep->Bytes);
- free((char *)Image->ExtensionBlocks);
- Image->ExtensionBlocks = NULL;
+ (void)free((char *)*ExtensionBlocks);
+ *ExtensionBlocks = NULL;
+ *ExtensionBlockCount = 0;
}
/******************************************************************************
- * Image block allocation functions
+ Image block allocation functions
******************************************************************************/
/* Private Function:
* Frees the last image in the GifFile->SavedImages array
*/
void
-FreeLastSavedImage(GifFileType *GifFile) {
-
+FreeLastSavedImage(GifFileType *GifFile)
+{
SavedImage *sp;
if ((GifFile == NULL) || (GifFile->SavedImages == NULL))
@@ -225,20 +320,21 @@
sp = &GifFile->SavedImages[GifFile->ImageCount];
/* Deallocate its Colormap */
- if (sp->ImageDesc.ColorMap)
- FreeMapObject(sp->ImageDesc.ColorMap);
+ if (sp->ImageDesc.ColorMap != NULL) {
+ GifFreeMapObject(sp->ImageDesc.ColorMap);
+ sp->ImageDesc.ColorMap = NULL;
+ }
/* Deallocate the image data */
- if (sp->RasterBits)
+ if (sp->RasterBits != NULL)
free((char *)sp->RasterBits);
/* Deallocate any extensions */
- if (sp->ExtensionBlocks)
- FreeExtension(sp);
+ GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
/*** FIXME: We could realloc the GifFile->SavedImages structure but is
* there a point to it? Saves some memory but we'd have to do it every
- * time. If this is used in FreeSavedImages then it would be inefficient
+ * time. If this is used in GifFreeSavedImages then it would be inefficient
* (The whole array is going to be deallocated.) If we just use it when
* we want to free the last Image it's convenient to do it here.
*/
@@ -248,11 +344,8 @@
* Append an image block to the SavedImages array
*/
SavedImage *
-MakeSavedImage(GifFileType * GifFile,
- const SavedImage * CopyFrom) {
-
- SavedImage *sp;
-
+GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
+{
if (GifFile->SavedImages == NULL)
GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
else
@@ -262,10 +355,10 @@
if (GifFile->SavedImages == NULL)
return ((SavedImage *)NULL);
else {
- sp = &GifFile->SavedImages[GifFile->ImageCount++];
+ SavedImage *sp = &GifFile->SavedImages[GifFile->ImageCount++];
memset((char *)sp, '\0', sizeof(SavedImage));
- if (CopyFrom) {
+ if (CopyFrom != NULL) {
memcpy((char *)sp, CopyFrom, sizeof(SavedImage));
/*
@@ -275,8 +368,8 @@
*/
/* first, the local color map */
- if (sp->ImageDesc.ColorMap) {
- sp->ImageDesc.ColorMap = MakeMapObject(
+ if (sp->ImageDesc.ColorMap != NULL) {
+ sp->ImageDesc.ColorMap = GifMakeMapObject(
CopyFrom->ImageDesc.ColorMap->ColorCount,
CopyFrom->ImageDesc.ColorMap->Colors);
if (sp->ImageDesc.ColorMap == NULL) {
@@ -298,7 +391,7 @@
CopyFrom->ImageDesc.Width);
/* finally, the extension blocks */
- if (sp->ExtensionBlocks) {
+ if (sp->ExtensionBlocks != NULL) {
sp->ExtensionBlocks = (ExtensionBlock *)malloc(
sizeof(ExtensionBlock) *
CopyFrom->ExtensionBlockCount);
@@ -308,17 +401,6 @@
}
memcpy(sp->ExtensionBlocks, CopyFrom->ExtensionBlocks,
sizeof(ExtensionBlock) * CopyFrom->ExtensionBlockCount);
-
- /*
- * For the moment, the actual blocks can take their
- * chances with free(). We'll fix this later.
- *** FIXME: [Better check this out... Toshio]
- * 2004 May 27: Looks like this was an ESR note.
- * It means the blocks are shallow copied from InFile to
- * OutFile. However, I don't see that in this code....
- * Did ESR fix it but never remove this note (And other notes
- * in gifspnge?)
- */
}
}
@@ -327,8 +409,8 @@
}
void
-FreeSavedImages(GifFileType * GifFile) {
-
+GifFreeSavedImages(GifFileType *GifFile)
+{
SavedImage *sp;
if ((GifFile == NULL) || (GifFile->SavedImages == NULL)) {
@@ -336,15 +418,18 @@
}
for (sp = GifFile->SavedImages;
sp < GifFile->SavedImages + GifFile->ImageCount; sp++) {
- if (sp->ImageDesc.ColorMap)
- FreeMapObject(sp->ImageDesc.ColorMap);
+ if (sp->ImageDesc.ColorMap != NULL) {
+ GifFreeMapObject(sp->ImageDesc.ColorMap);
+ sp->ImageDesc.ColorMap = NULL;
+ }
- if (sp->RasterBits)
+ if (sp->RasterBits != NULL)
free((char *)sp->RasterBits);
- if (sp->ExtensionBlocks)
- FreeExtension(sp);
+ GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
}
free((char *)GifFile->SavedImages);
- GifFile->SavedImages=NULL;
+ GifFile->SavedImages = NULL;
}
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c Wed Jul 05 20:33:55 2017 +0200
@@ -82,8 +82,8 @@
int i, j;
int imageIndex;
int cx, cy, cw, ch; /* clamped coordinates */
- const int interlacedOffset[] = { 0, 4, 2, 1, 0 }; /* The way Interlaced image should. */
- const int interlacedJumps[] = { 8, 8, 4, 2, 1 }; /* be read - offsets and jumps... */
+ int numLines;
+ int numPassLines;
if (DGifSlurp(gif) == GIF_ERROR) {
return 0;
@@ -213,16 +213,6 @@
byte_t *pSrc = image->RasterBits;
ImageFormat srcFormat;
ImageRect srcRect, dstRect;
- int pass, npass;
-
- if (desc->Interlace) {
- pass = 0;
- npass = 4;
- }
- else {
- pass = 4;
- npass = 5;
- }
srcFormat.colorMap = colorMapBuf;
srcFormat.depthBytes = 1;
@@ -231,26 +221,22 @@
srcFormat.fixedBits = QUAD_ALPHA_MASK; // fixed 100% alpha
srcFormat.premultiplied = 0;
- for (; pass < npass; ++pass) {
- int jump = interlacedJumps[pass];
- int ofs = interlacedOffset[pass];
- /* Number of source lines for current pass */
- int numPassLines = (desc->Height + jump - ofs - 1) / jump;
- /* Number of lines that fits to dest buffer */
- int numLines = (ch + jump - ofs - 1) / jump;
+ /* Number of source lines for current pass */
+ numPassLines = desc->Height;
+ /* Number of lines that fits to dest buffer */
+ numLines = ch;
+
+ initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
+ desc->Width, pSrc, &srcFormat);
- initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
- desc->Width, pSrc, &srcFormat);
+ if (numLines > 0) {
+ initRect(&dstRect, cx, cy, cw,
+ numLines , 1, stride, pBitmapBits, &splash->imageFormat);
- if (numLines > 0) {
- initRect(&dstRect, cx, cy + ofs, cw,
- numLines , jump, stride, pBitmapBits, &splash->imageFormat);
-
- pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
- }
- // skip extra source data
- pSrc += (numPassLines - numLines) * srcRect.stride;
+ pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
}
+ // skip extra source data
+ pSrc += (numPassLines - numLines) * srcRect.stride;
}
// now dispose of the previous frame correctly
@@ -310,7 +296,7 @@
free(pBitmapBits);
free(pOldBitmapBits);
- DGifCloseFile(gif);
+ DGifCloseFile(gif, NULL);
return 1;
}
@@ -318,7 +304,7 @@
int
SplashDecodeGifStream(Splash * splash, SplashStream * stream)
{
- GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc);
+ GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc, NULL);
if (!gif)
return 0;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2001, 2008, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+
+public abstract class X11CNS11643 extends Charset {
+ private final int plane;
+ public X11CNS11643 (int plane, String name) {
+ super(name, null);
+ switch (plane) {
+ case 1:
+ this.plane = 0; // CS1
+ break;
+ case 2:
+ case 3:
+ this.plane = plane;
+ break;
+ default:
+ throw new IllegalArgumentException
+ ("Only planes 1, 2, and 3 supported");
+ }
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this, plane);
+ }
+
+ public CharsetDecoder newDecoder() {
+ return new Decoder(this, plane);
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11CNS11643;
+ }
+
+ private class Encoder extends EUC_TW.Encoder {
+ private int plane;
+ public Encoder(Charset cs, int plane) {
+ super(cs);
+ this.plane = plane;
+ }
+
+ private byte[] bb = new byte[4];
+ public boolean canEncode(char c) {
+ if (c <= 0x7F) {
+ return false;
+ }
+ int nb = toEUC(c, bb);
+ if (nb == -1)
+ return false;
+ int p = 0;
+ if (nb == 4)
+ p = (bb[1] & 0xff) - 0xa0;
+ return (p == plane);
+ }
+
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+
+ try {
+ while (sp < sl) {
+ char c = sa[sp];
+ if ( c > '\u007f'&& c < '\uFFFE') {
+ int nb = toEUC(c, bb);
+ if (nb != -1) {
+ int p = 0;
+ if (nb == 4)
+ p = (bb[1] & 0xff) - 0xa0;
+ if (p == plane) {
+ if (dl - dp < 2)
+ return CoderResult.OVERFLOW;
+ if (nb == 2) {
+ da[dp++] = (byte)(bb[0] & 0x7f);
+ da[dp++] = (byte)(bb[1] & 0x7f);
+ } else {
+ da[dp++] = (byte)(bb[2] & 0x7f);
+ da[dp++] = (byte)(bb[3] & 0x7f);
+ }
+ sp++;
+ continue;
+ }
+ }
+ }
+ return CoderResult.unmappableForLength(1);
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+ }
+
+ private class Decoder extends EUC_TW.Decoder {
+ int plane;
+ private String table;
+ protected Decoder(Charset cs, int plane) {
+ super(cs);
+ if (plane == 0)
+ this.plane = plane;
+ else if (plane == 2 || plane == 3)
+ this.plane = plane - 1;
+ else
+ throw new IllegalArgumentException
+ ("Only planes 1, 2, and 3 supported");
+ }
+
+ //we only work on array backed buffer.
+ protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+ byte[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+
+ char[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+
+ try {
+ while (sp < sl) {
+ if ( sl - sp < 2) {
+ return CoderResult.UNDERFLOW;
+ }
+ int b1 = (sa[sp] & 0xff) | 0x80;
+ int b2 = (sa[sp + 1] & 0xff) | 0x80;
+ char[] cc = toUnicode(b1, b2, plane);
+ // plane3 has non-bmp characters(added), x11cnsp3
+ // however does not support them
+ if (cc == null || cc.length == 2)
+ return CoderResult.unmappableForLength(2);
+ if (dl - dp < 1)
+ return CoderResult.OVERFLOW;
+ da[dp++] = cc[0];
+ sp +=2;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P1.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+public class X11CNS11643P1 extends X11CNS11643 {
+ public X11CNS11643P1() {
+ super(1, "X11CNS11643P1");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P2.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P2 extends X11CNS11643 {
+ public X11CNS11643P2() {
+ super(2, "X11CNS11643P2");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P3.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1997, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P3 extends X11CNS11643 {
+ public X11CNS11643P3() {
+ super(3, "X11CNS11643P3");
+ }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -106,6 +106,7 @@
/**
* Overridden to handle GTK icon loading
*/
+ @Override
protected Object lazilyLoadDesktopProperty(String name) {
if (name.startsWith("gtk.icon.")) {
return lazilyLoadGTKIcon(name);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. 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
@@ -326,9 +326,8 @@
* check for adding duplicate items
* @param item item to add
*/
- @SuppressWarnings("deprecation")
public void addItem(MenuItem item) {
- XMenuItemPeer mp = (XMenuItemPeer)item.getPeer();
+ XMenuItemPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(item);
if (mp != null) {
mp.setContainer(this);
synchronized(getMenuTreeLock()) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -52,7 +52,6 @@
import java.awt.event.MouseWheelEvent;
import java.awt.event.PaintEvent;
import java.awt.event.WindowEvent;
-import java.awt.event.InvocationEvent;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.VolatileImage;
@@ -63,6 +62,8 @@
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.util.logging.PlatformLogger;
import sun.awt.*;
import sun.awt.event.IgnorePaintEvent;
@@ -182,7 +183,8 @@
}
if (container instanceof Window) {
- XWindowPeer wpeer = (XWindowPeer)(container.getPeer());
+ XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(container);
if (wpeer != null) {
return (wpeer.winAttr.visibilityState !=
XWindowAttributesData.AWT_UNOBSCURED);
@@ -319,7 +321,8 @@
if (parentWindow == null) {
return rejectFocusRequestHelper("WARNING: Parent window is null");
}
- XWindowPeer wpeer = (XWindowPeer)parentWindow.getPeer();
+ XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (wpeer == null) {
return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
}
@@ -390,7 +393,6 @@
/**
* @see java.awt.peer.ComponentPeer
*/
- @SuppressWarnings("deprecation")
public void setEnabled(final boolean value) {
if (enableLog.isLoggable(PlatformLogger.Level.FINE)) {
enableLog.fine("{0}ing {1}", (value ? "Enabl" : "Disabl"), this);
@@ -399,8 +401,9 @@
// If any of our heavyweight ancestors are disable, we should be too
// See 6176875 for more information
final Container cp = SunToolkit.getNativeContainer(target);
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (cp != null) {
- status &= ((XComponentPeer) cp.getPeer()).isEnabled();
+ status &= acc.<XComponentPeer>getPeer(cp).isEnabled();
}
synchronized (getStateLock()) {
if (enabled == status) {
@@ -412,7 +415,7 @@
if (target instanceof Container) {
final Component[] list = ((Container) target).getComponents();
for (final Component child : list) {
- final ComponentPeer p = child.getPeer();
+ final ComponentPeer p = acc.getPeer(child);
if (p != null) {
p.setEnabled(status && child.isEnabled());
}
@@ -489,7 +492,7 @@
}
XWindowPeer getParentTopLevel() {
- AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+ ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
Container parent = (target instanceof Container) ? ((Container)target) : (compAccessor.getParent(target));
// Search for parent window
while (parent != null && !(parent instanceof Window)) {
@@ -1327,11 +1330,10 @@
}
}
- @SuppressWarnings("deprecation")
private void addTree(Collection<Long> order, Set<Long> set, Container cont) {
for (int i = 0; i < cont.getComponentCount(); i++) {
Component comp = cont.getComponent(i);
- ComponentPeer peer = comp.getPeer();
+ Object peer = AWTAccessor.getComponentAccessor().getPeer(comp);
if (peer instanceof XComponentPeer) {
Long window = Long.valueOf(((XComponentPeer)peer).getWindow());
if (!set.contains(window)) {
@@ -1348,7 +1350,6 @@
/****** DropTargetPeer implementation ********************/
- @SuppressWarnings("deprecation")
public void addDropTarget(DropTarget dt) {
Component comp = target;
while(!(comp == null || comp instanceof Window)) {
@@ -1356,14 +1357,13 @@
}
if (comp instanceof Window) {
- XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+ XWindowPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(comp);
if (wpeer != null) {
wpeer.addDropTarget();
}
}
}
- @SuppressWarnings("deprecation")
public void removeDropTarget(DropTarget dt) {
Component comp = target;
while(!(comp == null || comp instanceof Window)) {
@@ -1371,7 +1371,8 @@
}
if (comp instanceof Window) {
- XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+ XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(comp);
if (wpeer != null) {
wpeer.removeDropTarget();
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1226,7 +1226,7 @@
Window owner = XWindowPeer.getDecoratedOwner(actualFocusedWindow);
if (owner != null && owner == target) {
- setActualFocusedWindow((XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
+ setActualFocusedWindow(AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
}
}
super.handleWindowFocusOut(oppositeWindow, serial);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -117,7 +117,7 @@
try {
javaToplevels = XWindowPeer.collectJavaToplevels();
for (Window w : toBlock) {
- XWindowPeer wp = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+ XWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
wp.setModalBlocked((Dialog)target, true, javaToplevels);
}
@@ -139,7 +139,7 @@
XWindowPeer focusedWindowPeer = null;
if (focusedWindow != null) {
- focusedWindowPeer = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
+ focusedWindowPeer = AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
} else {
/*
* For the case when a potential blocked window is not yet focused
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -110,7 +110,6 @@
return theInstance;
}
- @SuppressWarnings("deprecation")
protected void startDrag(Transferable transferable,
long[] formats, Map<Long, DataFlavor> formatMap) {
Component component = getTrigger().getComponent();
@@ -121,7 +120,7 @@
c = AWTAccessor.getComponentAccessor().getParent(c));
if (c instanceof Window) {
- wpeer = (XWindowPeer)c.getPeer();
+ wpeer = AWTAccessor.getComponentAccessor().getPeer(c);
}
if (wpeer == null) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -32,6 +32,7 @@
import java.util.Iterator;
+import sun.awt.AWTAccessor;
import sun.util.logging.PlatformLogger;
import sun.awt.AppContext;
@@ -188,12 +189,12 @@
// If source is an XEmbedCanvasPeer, passes the event to it for processing and
// return true if the event is forwarded to the XEmbed child.
// Otherwise, does nothing and return false.
- @SuppressWarnings("deprecation")
private boolean processSunDropTargetEvent(SunDropTargetEvent event) {
Object source = event.getSource();
if (source instanceof Component) {
- ComponentPeer peer = ((Component)source).getPeer();
+ Object peer = AWTAccessor.getComponentAccessor()
+ .getPeer((Component) source);
if (peer instanceof XEmbedCanvasPeer) {
XEmbedCanvasPeer xEmbedCanvasPeer = (XEmbedCanvasPeer)peer;
/* The native context is the pointer to the XClientMessageEvent
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -166,7 +166,6 @@
XToolkit.postEvent(XToolkit.targetToAppContext(proxy), event);
}
- @SuppressWarnings("deprecation")
boolean simulateMotifRequestFocus(Component lightweightChild, boolean temporary,
boolean focusedWindowChangeAllowed, long time)
{
@@ -174,7 +173,7 @@
lightweightChild = (Component)proxy;
}
Component currentOwner = XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
- if (currentOwner != null && currentOwner.getPeer() == null) {
+ if (currentOwner != null && !currentOwner.isDisplayable()) {
currentOwner = null;
}
FocusEvent fg = new FocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner );
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -26,8 +26,11 @@
package sun.awt.X11;
import java.awt.AWTKeyStroke;
+import java.awt.Component;
import java.awt.Toolkit;
+import java.awt.peer.ComponentPeer;
+import sun.awt.AWTAccessor;
import sun.awt.EmbeddedFrame;
import sun.util.logging.PlatformLogger;
@@ -63,10 +66,9 @@
}
}
- @SuppressWarnings("deprecation")
public void addNotify()
{
- if (getPeer() == null) {
+ if (!isDisplayable()) {
XToolkit toolkit = (XToolkit)Toolkit.getDefaultToolkit();
setPeer(toolkit.createEmbeddedFrame(this));
}
@@ -80,9 +82,9 @@
/*
* The method shouldn't be called in case of active XEmbed.
*/
- @SuppressWarnings("deprecation")
public boolean traverseIn(boolean direction) {
- XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+ XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
if (peer != null) {
if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
log.fine("The method shouldn't be called when XEmbed is active!");
@@ -93,9 +95,9 @@
return false;
}
- @SuppressWarnings("deprecation")
protected boolean traverseOut(boolean direction) {
- XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+ XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
if (direction == FORWARD) {
xefp.traverseOutForward();
}
@@ -108,9 +110,9 @@
/*
* The method shouldn't be called in case of active XEmbed.
*/
- @SuppressWarnings("deprecation")
public void synthesizeWindowActivation(boolean doActivate) {
- XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+ XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
if (peer != null) {
if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
log.fine("The method shouldn't be called when XEmbed is active!");
@@ -120,16 +122,17 @@
}
}
- @SuppressWarnings("deprecation")
public void registerAccelerator(AWTKeyStroke stroke) {
- XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+ XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
if (xefp != null) {
xefp.registerAccelerator(stroke);
}
}
- @SuppressWarnings("deprecation")
+
public void unregisterAccelerator(AWTKeyStroke stroke) {
- XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+ XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
if (xefp != null) {
xefp.unregisterAccelerator(stroke);
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -28,7 +28,6 @@
import java.awt.*;
import java.util.HashMap;
import java.awt.event.KeyEvent;
-import java.lang.reflect.*;
import sun.awt.AWTAccessor;
public class XEmbeddingContainer extends XEmbedHelper implements XEventDispatcher {
@@ -46,13 +45,14 @@
XToolkit.removeEventDispatcher(embedder.getWindow(), this);
}
- @SuppressWarnings("deprecation")
void add(long child) {
if (checkXEmbed(child)) {
Component proxy = createChildProxy(child);
((Container)embedder.getTarget()).add("Center", proxy);
- if (proxy.getPeer() != null) {
- children.put(Long.valueOf(child), proxy.getPeer());
+ XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(proxy);
+ if (peer != null) {
+ children.put(Long.valueOf(child), peer);
}
}
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -32,15 +32,19 @@
import java.io.*;
import java.util.Locale;
import java.util.Arrays;
-import com.sun.java.swing.plaf.motif.*;
-import javax.swing.plaf.ComponentUI;
import java.security.AccessController;
import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.util.logging.PlatformLogger;
import sun.awt.AWTAccessor;
-class XFileDialogPeer extends XDialogPeer implements FileDialogPeer, ActionListener, ItemListener, KeyEventDispatcher, XChoicePeerListener {
- private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
+class XFileDialogPeer extends XDialogPeer
+ implements FileDialogPeer, ActionListener, ItemListener,
+ KeyEventDispatcher, XChoicePeerListener {
+
+ private static final PlatformLogger log =
+ PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
FileDialog target;
@@ -286,7 +290,8 @@
fileDialog.setSize(400, 400);
// Update choice's popup width
- XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+ XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+ .getPeer(pathChoice);
choicePeer.setDrawSelectedItem(false);
choicePeer.setAlignUnder(pathField);
@@ -642,7 +647,6 @@
}
}
- @SuppressWarnings("deprecation")
public boolean dispatchKeyEvent(KeyEvent keyEvent) {
int id = keyEvent.getID();
int keyCode = keyEvent.getKeyCode();
@@ -653,13 +657,15 @@
while (comp != null) {
// Fix for 6240084 Disposing a file dialog when the drop-down is active does not dispose the dropdown menu, on Xtoolkit
// See also 6259493
+ ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (comp == pathChoice) {
- XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+ XChoicePeer choicePeer = acc.getPeer(pathChoice);
if (choicePeer.isUnfurled()){
return false;
}
}
- if (comp.getPeer() == this) {
+ Object peer = acc.getPeer(comp);
+ if (peer == this) {
handleCancel();
return true;
}
@@ -796,16 +802,18 @@
}
super.setVisible(b);
+ XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+ .getPeer(pathChoice);
if (b == true){
// See 6240074 for more information
- XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
choicePeer.addXChoicePeerListener(this);
- KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
+ KeyboardFocusManager.getCurrentKeyboardFocusManager()
+ .addKeyEventDispatcher(this);
}else{
// See 6240074 for more information
- XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
choicePeer.removeXChoicePeerListener();
- KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
+ KeyboardFocusManager.getCurrentKeyboardFocusManager()
+ .removeKeyEventDispatcher(this);
}
selectionField.requestFocusInWindow();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -124,7 +124,8 @@
}
} else {
menubar = mb;
- menubarPeer = (XMenuBarPeer) mb.getPeer();
+ menubarPeer = AWTAccessor.getMenuComponentAccessor()
+ .getPeer(mb);
if (menubarPeer != null) {
menubarPeer.init((Frame)target);
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -31,6 +31,8 @@
import java.awt.Rectangle;
import java.awt.im.spi.InputMethodContext;
import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
import sun.awt.X11InputMethod;
import sun.util.logging.PlatformLogger;
@@ -137,9 +139,10 @@
XToolkit.awtUnlock();
}
- @SuppressWarnings("deprecation")
long getCurrentParentWindow() {
- return ((XWindow)clientComponentWindow.getPeer()).getContentWindow();
+ XWindow peer = AWTAccessor.getComponentAccessor()
+ .getPeer(clientComponentWindow);
+ return peer.getContentWindow();
}
/*
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -70,13 +70,13 @@
synchronized(this) {
if (currentFocusedWindow != null) {
- from = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+ from = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
}
currentFocusedWindow = win;
if (currentFocusedWindow != null) {
- to = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+ to = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
}
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -163,9 +163,8 @@
postPaintEvent();
}
- @SuppressWarnings("deprecation")
public void addHelpMenu(Menu m) {
- XMenuPeer mp = (XMenuPeer)m.getPeer();
+ XMenuPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(m);
synchronized(getMenuTreeLock()) {
helpMenu = mp;
}
@@ -180,10 +179,9 @@
/**
* called from XFramePeer.setMenuBar
*/
- @SuppressWarnings("deprecation")
public void init(Frame frame) {
this.target = frame;
- this.framePeer = (XFramePeer)frame.getPeer();
+ this.framePeer = AWTAccessor.getComponentAccessor().getPeer(frame);
XCreateWindowParams params = getDelayedParams();
params.remove(DELAYED);
params.add(PARENT_WINDOW, framePeer.getShell());
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -28,10 +28,11 @@
import java.awt.Point;
import java.awt.Window;
import java.awt.GraphicsEnvironment;
-import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.peer.MouseInfoPeer;
+import sun.awt.AWTAccessor;
+
public class XMouseInfoPeer implements MouseInfoPeer {
/**
@@ -83,8 +84,8 @@
// java.awt.Component.findUnderMouseInWindow checks that
// the peer is non-null by checking that the component
// is showing.
-
- long contentWindow = ((XWindow)w.getPeer()).getContentWindow();
+ XWindow peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ long contentWindow = peer.getContentWindow();
long parent = XlibUtil.getParentWindow(contentWindow);
XToolkit.awtLock();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -27,6 +27,8 @@
import java.awt.*;
import java.awt.peer.*;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.SunGraphicsCallback;
public class XPanelPeer extends XCanvasPeer implements PanelPeer {
@@ -76,17 +78,17 @@
}
- @SuppressWarnings("deprecation")
public void setBackground(Color c) {
Component comp;
int i;
Container cont = (Container) target;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
synchronized(target.getTreeLock()) {
int n = cont.getComponentCount();
for(i=0; i < n; i++) {
comp = cont.getComponent(i);
- ComponentPeer peer = comp.getPeer();
+ ComponentPeer peer = acc.getPeer(comp);
if (peer != null) {
Color color = comp.getBackground();
if (color == null || color.equals(c)) {
@@ -102,15 +104,15 @@
setForegroundForHierarchy((Container) target, c);
}
- @SuppressWarnings("deprecation")
private void setForegroundForHierarchy(Container cont, Color c) {
synchronized(target.getTreeLock()) {
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
int n = cont.getComponentCount();
for(int i=0; i < n; i++) {
Component comp = cont.getComponent(i);
Color color = comp.getForeground();
if (color == null || color.equals(c)) {
- ComponentPeer cpeer = comp.getPeer();
+ ComponentPeer cpeer = acc.getPeer(comp);
if (cpeer != null) {
cpeer.setForeground(c);
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -29,6 +29,7 @@
import java.awt.Component;
import java.awt.Graphics;
+import sun.awt.AWTAccessor;
import sun.awt.RepaintArea;
/**
@@ -55,10 +56,10 @@
/**
* Calls <code>Component.paint(Graphics)</code> with given Graphics.
*/
- @SuppressWarnings("deprecation")
protected void paintComponent(Component comp, Graphics g) {
if (comp != null) {
- final XComponentPeer peer = (XComponentPeer) comp.getPeer();
+ final XComponentPeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(comp);
if (peer != null) {
peer.paintPeer(g);
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1164,12 +1164,6 @@
}
@Override
- @SuppressWarnings("deprecation")
- public ComponentPeer getPeer() {
- return (ComponentPeer) (xwin);
- }
-
- @Override
public void updateUI() {
ComponentUI ui = new XAWTScrollPaneUI();
setUI(ui);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -547,71 +547,63 @@
implements ActionListener, DocumentListener {
private boolean isFocused = false;
- private final XComponentPeer peer;
+ private final XComponentPeer xwin;
- XAWTTextField(String text, XComponentPeer peer, Container parent) {
+ XAWTTextField(String text, XComponentPeer xwin, Container parent) {
super(text);
- this.peer = peer;
+ this.xwin = xwin;
setDoubleBuffered(true);
setFocusable(false);
AWTAccessor.getComponentAccessor().setParent(this,parent);
- setBackground(peer.getPeerBackground());
- setForeground(peer.getPeerForeground());
- setFont(peer.getPeerFont());
+ setBackground(xwin.getPeerBackground());
+ setForeground(xwin.getPeerForeground());
+ setFont(xwin.getPeerFont());
setCaretPosition(0);
addActionListener(this);
addNotify();
-
}
@Override
@SuppressWarnings("deprecation")
public void actionPerformed( ActionEvent actionEvent ) {
- peer.postEvent(new ActionEvent(peer.target,
- ActionEvent.ACTION_PERFORMED,
- getText(),
- actionEvent.getWhen(),
- actionEvent.getModifiers()));
+ xwin.postEvent(
+ new ActionEvent(xwin.target, ActionEvent.ACTION_PERFORMED,
+ getText(), actionEvent.getWhen(),
+ actionEvent.getModifiers()));
}
@Override
public void insertUpdate(DocumentEvent e) {
- if (peer != null) {
- peer.postEvent(new TextEvent(peer.target,
+ if (xwin != null) {
+ xwin.postEvent(new TextEvent(xwin.target,
TextEvent.TEXT_VALUE_CHANGED));
}
}
@Override
public void removeUpdate(DocumentEvent e) {
- if (peer != null) {
- peer.postEvent(new TextEvent(peer.target,
+ if (xwin != null) {
+ xwin.postEvent(new TextEvent(xwin.target,
TextEvent.TEXT_VALUE_CHANGED));
}
}
@Override
public void changedUpdate(DocumentEvent e) {
- if (peer != null) {
- peer.postEvent(new TextEvent(peer.target,
+ if (xwin != null) {
+ xwin.postEvent(new TextEvent(xwin.target,
TextEvent.TEXT_VALUE_CHANGED));
}
}
- @Override
- @SuppressWarnings("deprecation")
- public ComponentPeer getPeer() {
- return (ComponentPeer) peer;
- }
-
public void repaintNow() {
paintImmediately(getBounds());
}
@Override
public Graphics getGraphics() {
- return peer.getGraphics();
+ return xwin.getGraphics();
}
@Override
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -175,6 +175,7 @@
return uidefaults;
}
+ @Override
public void loadSystemColors(int[] systemColors) {
nativeLoadSystemColors(systemColors);
MotifColorUtilities.loadSystemColors(systemColors);
@@ -347,18 +348,21 @@
}
}
+ @Override
public ButtonPeer createButton(Button target) {
ButtonPeer peer = new XButtonPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public FramePeer createLightweightFrame(LightweightFrame target) {
FramePeer peer = new XLightweightFramePeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public FramePeer createFrame(Frame target) {
FramePeer peer = new XFramePeer(target);
targetCreatedPeer(target, peer);
@@ -540,6 +544,7 @@
static native void awt_toolkit_init();
+ @Override
public void run() {
awt_toolkit_init();
run(PRIMARY_LOOP);
@@ -605,7 +610,7 @@
Component owner =
XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
if (owner != null) {
- XWindow ownerWindow = (XWindow) AWTAccessor.getComponentAccessor().getPeer(owner);
+ XWindow ownerWindow = AWTAccessor.getComponentAccessor().getPeer(owner);
if (ownerWindow != null) {
w = ownerWindow.getContentWindow();
}
@@ -680,10 +685,12 @@
return screenHeight;
}
+ @Override
protected int getScreenWidth() {
return getDefaultScreenWidth();
}
+ @Override
protected int getScreenHeight() {
return getDefaultScreenHeight();
}
@@ -724,6 +731,7 @@
* not set, we try to calculate the insets ourselves using
* getScreenInsetsManually method.
*/
+ @Override
public Insets getScreenInsets(GraphicsConfiguration gc)
{
XNETProtocol netProto = XWM.getWM().getNETProtocol();
@@ -911,6 +919,7 @@
SunToolkit.targetDisposedPeer(target, peer);
}
+ @Override
public RobotPeer createRobot(Robot target, GraphicsDevice screen) {
return new XRobotPeer(screen.getDefaultConfiguration());
}
@@ -922,10 +931,12 @@
* automatically. The setter method for this property is
* irrelevant on X.
*/
+ @Override
public void setDynamicLayout(boolean b) {
dynamicLayoutSetting = b;
}
+ @Override
protected boolean isDynamicLayoutSet() {
return dynamicLayoutSetting;
}
@@ -937,15 +948,17 @@
return XWM.getWM().supportsDynamicLayout();
}
+ @Override
public boolean isDynamicLayoutActive() {
return isDynamicLayoutSupported();
}
-
+ @Override
public FontPeer getFontPeer(String name, int style){
return new XFontPeer(name, style);
}
+ @Override
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
final LightweightFrame f = SunToolkit.getLightweightFrame(dge.getComponent());
if (f != null) {
@@ -955,6 +968,7 @@
return XDragSourceContextPeer.createDragSourceContextPeer(dge);
}
+ @Override
@SuppressWarnings("unchecked")
public <T extends DragGestureRecognizer> T
createDragGestureRecognizer(Class<T> recognizerClass,
@@ -974,6 +988,7 @@
return null;
}
+ @Override
public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
XCheckboxMenuItemPeer peer = new XCheckboxMenuItemPeer(target);
//vb157120: looks like we don't need to map menu items
@@ -982,6 +997,7 @@
return peer;
}
+ @Override
public MenuItemPeer createMenuItem(MenuItem target) {
XMenuItemPeer peer = new XMenuItemPeer(target);
//vb157120: looks like we don't need to map menu items
@@ -990,72 +1006,84 @@
return peer;
}
+ @Override
public TextFieldPeer createTextField(TextField target) {
TextFieldPeer peer = new XTextFieldPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public LabelPeer createLabel(Label target) {
LabelPeer peer = new XLabelPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public ListPeer createList(java.awt.List target) {
ListPeer peer = new XListPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public CheckboxPeer createCheckbox(Checkbox target) {
CheckboxPeer peer = new XCheckboxPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public ScrollbarPeer createScrollbar(Scrollbar target) {
XScrollbarPeer peer = new XScrollbarPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public ScrollPanePeer createScrollPane(ScrollPane target) {
XScrollPanePeer peer = new XScrollPanePeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public TextAreaPeer createTextArea(TextArea target) {
TextAreaPeer peer = new XTextAreaPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public ChoicePeer createChoice(Choice target) {
XChoicePeer peer = new XChoicePeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public CanvasPeer createCanvas(Canvas target) {
XCanvasPeer peer = (isXEmbedServerRequested() ? new XEmbedCanvasPeer(target) : new XCanvasPeer(target));
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public PanelPeer createPanel(Panel target) {
PanelPeer peer = new XPanelPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public WindowPeer createWindow(Window target) {
WindowPeer peer = new XWindowPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public DialogPeer createDialog(Dialog target) {
DialogPeer peer = new XDialogPeer(target);
targetCreatedPeer(target, peer);
@@ -1076,6 +1104,7 @@
return sunAwtDisableGtkFileDialogs.booleanValue();
}
+ @Override
public FileDialogPeer createFileDialog(FileDialog target) {
FileDialogPeer peer = null;
// The current GtkFileChooser is available from GTK+ 2.4
@@ -1088,12 +1117,14 @@
return peer;
}
+ @Override
public MenuBarPeer createMenuBar(MenuBar target) {
XMenuBarPeer peer = new XMenuBarPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public MenuPeer createMenu(Menu target) {
XMenuPeer peer = new XMenuPeer(target);
//vb157120: looks like we don't need to map menu items
@@ -1102,12 +1133,14 @@
return peer;
}
+ @Override
public PopupMenuPeer createPopupMenu(PopupMenu target) {
XPopupMenuPeer peer = new XPopupMenuPeer(target);
targetCreatedPeer(target, peer);
return peer;
}
+ @Override
public synchronized MouseInfoPeer getMouseInfoPeer() {
if (xPeer == null) {
xPeer = new XMouseInfoPeer();
@@ -1128,6 +1161,7 @@
return peer;
}
+ @Override
public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() throws HeadlessException {
return XKeyboardFocusManagerPeer.getInstance();
}
@@ -1135,11 +1169,13 @@
/**
* Returns a new custom cursor.
*/
+ @Override
public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
throws IndexOutOfBoundsException {
return new XCustomCursor(cursor, hotSpot, name);
}
+ @Override
public TrayIconPeer createTrayIcon(TrayIcon target)
throws HeadlessException, AWTException
{
@@ -1148,11 +1184,13 @@
return peer;
}
+ @Override
public SystemTrayPeer createSystemTray(SystemTray target) throws HeadlessException {
SystemTrayPeer peer = new XSystemTrayPeer(target);
return peer;
}
+ @Override
public boolean isTraySupported() {
XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
if (peer != null) {
@@ -1169,16 +1207,19 @@
/**
* Returns the supported cursor size
*/
+ @Override
public Dimension getBestCursorSize(int preferredWidth, int preferredHeight) {
return XCustomCursor.getBestCursorSize(
java.lang.Math.max(1,preferredWidth), java.lang.Math.max(1,preferredHeight));
}
+ @Override
public int getMaximumCursorColors() {
return 2; // Black and white.
}
+ @Override
public Map<TextAttribute, ?> mapInputMethodHighlight( InputMethodHighlight highlight) {
return XInputMethod.mapInputMethodHighlight(highlight);
}
@@ -1196,6 +1237,7 @@
}
}
+ @Override
public Clipboard getSystemClipboard() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
@@ -1209,6 +1251,7 @@
return clipboard;
}
+ @Override
public Clipboard getSystemSelection() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
@@ -1222,6 +1265,7 @@
return selection;
}
+ @Override
public void beep() {
awtLock();
try {
@@ -1232,6 +1276,7 @@
}
}
+ @Override
public PrintJob getPrintJob(final Frame frame, final String doctitle,
final Properties props) {
@@ -1247,6 +1292,7 @@
return printJob;
}
+ @Override
public PrintJob getPrintJob(final Frame frame, final String doctitle,
final JobAttributes jobAttributes,
final PageAttributes pageAttributes)
@@ -1274,6 +1320,7 @@
}
}
+ @Override
public int getScreenResolution() {
long display = getDisplay();
awtLock();
@@ -1299,6 +1346,7 @@
return screenmodel;
}
+ @Override
public ColorModel getColorModel() {
return getStaticColorModel();
}
@@ -1306,6 +1354,7 @@
/**
* Returns a new input method adapter descriptor for native input methods.
*/
+ @Override
public InputMethodDescriptor getInputMethodAdapterDescriptor() throws AWTException {
return new XInputMethodDescriptor();
}
@@ -1357,6 +1406,7 @@
}
}
+ @Override
public boolean isFrameStateSupported(int state)
throws HeadlessException
{
@@ -1399,6 +1449,7 @@
private static final XEventDispatcher timeFetcher =
new XEventDispatcher() {
+ @Override
public void dispatchEvent(XEvent ev) {
switch (ev.get_type()) {
case XConstants.PropertyNotify:
@@ -1467,6 +1518,7 @@
}
return timeStamp;
}
+ @Override
protected void initializeDesktopProperties() {
desktopProperties.put("DnD.Autoscroll.initialDelay",
Integer.valueOf(50));
@@ -1525,6 +1577,7 @@
private final static String postfix = ".32x32";
private static final String dndPrefix = "DnD.";
+ @Override
protected Object lazilyLoadDesktopProperty(String name) {
if (name.startsWith(prefix)) {
String cursorName = name.substring(prefix.length(), name.length()) + postfix;
@@ -1547,6 +1600,7 @@
return super.lazilyLoadDesktopProperty(name);
}
+ @Override
public synchronized void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
if (name == null) {
// See JavaDoc for the Toolkit.addPropertyChangeListener() method
@@ -2045,12 +2099,14 @@
/**
* @see sun.awt.SunToolkit#needsXEmbedImpl
*/
+ @Override
protected boolean needsXEmbedImpl() {
// XToolkit implements supports for XEmbed-client protocol and
// requires the supports from the embedding host for it to work.
return true;
}
+ @Override
public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
return (modalityType == null) ||
(modalityType == Dialog.ModalityType.MODELESS) ||
@@ -2059,6 +2115,7 @@
(modalityType == Dialog.ModalityType.TOOLKIT_MODAL);
}
+ @Override
public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
return (exclusionType == null) ||
(exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE) ||
@@ -2081,6 +2138,7 @@
.removeSourceEvents(queue, source, removeAllEvents);
}
+ @Override
public boolean isAlwaysOnTopSupported() {
for (XLayerProtocol proto : XWM.getWM().getProtocols(XLayerProtocol.class)) {
if (proto.supportsLayer(XLayerProtocol.LAYER_ALWAYS_ON_TOP)) {
@@ -2090,6 +2148,7 @@
return false;
}
+ @Override
public boolean useBufferPerWindow() {
return XToolkit.getBackingStoreType() == XConstants.NotUseful;
}
@@ -2398,11 +2457,13 @@
/**
* @inheritDoc
*/
+ @Override
protected boolean syncNativeQueue(final long timeout) {
XBaseWindow win = XBaseWindow.getXAWTRootWindow();
if (oops_waiter == null) {
oops_waiter = new XEventDispatcher() {
+ @Override
public void dispatchEvent(XEvent e) {
if (e.get_type() == XConstants.ConfigureNotify) {
// OOPS ConfigureNotify event catched
@@ -2449,17 +2510,19 @@
awtUnlock();
}
}
- @SuppressWarnings("deprecation")
+ @Override
public void grab(Window w) {
- if (w.getPeer() != null) {
- ((XWindowPeer)w.getPeer()).setGrab(true);
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((XWindowPeer) peer).setGrab(true);
}
}
- @SuppressWarnings("deprecation")
+ @Override
public void ungrab(Window w) {
- if (w.getPeer() != null) {
- ((XWindowPeer)w.getPeer()).setGrab(false);
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((XWindowPeer) peer).setGrab(false);
}
}
/**
@@ -2469,14 +2532,17 @@
* The methods of java.awt.Desktop class are supported on the Gnome desktop.
* Check if the running desktop is Gnome by checking the window manager.
*/
+ @Override
public boolean isDesktopSupported(){
return XDesktopPeer.isDesktopSupported();
}
+ @Override
public DesktopPeer createDesktopPeer(Desktop target){
return new XDesktopPeer();
}
+ @Override
public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
return areExtraMouseButtonsEnabled;
}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. 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
@@ -30,8 +30,6 @@
import java.awt.peer.TrayIconPeer;
import sun.awt.*;
import java.awt.image.*;
-import java.text.BreakIterator;
-import java.util.concurrent.ArrayBlockingQueue;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.lang.reflect.InvocationTargetException;
@@ -347,7 +345,6 @@
}
// It's synchronized with disposal by EDT.
- @SuppressWarnings("deprecation")
public void showPopupMenu(int x, int y) {
if (isDisposed())
return;
@@ -366,7 +363,9 @@
}
if (popup != null) {
- Point loc = ((XBaseWindow)eframe.getPeer()).toLocal(new Point(x, y));
+ final XBaseWindow peer = AWTAccessor.getComponentAccessor()
+ .getPeer(eframe);
+ Point loc = peer.toLocal(new Point(x, y));
popup.show(eframe, loc.x, loc.y);
}
}
@@ -416,9 +415,9 @@
canvas.addMouseMotionListener(eventProxy);
}
- @SuppressWarnings("deprecation")
long getWindow() {
- return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow();
+ return AWTAccessor.getComponentAccessor()
+ .<XEmbeddedFramePeer>getPeer(eframe).getWindow();
}
public boolean isDisposed() {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. 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
@@ -34,6 +34,7 @@
import java.lang.reflect.Method;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.util.logging.PlatformLogger;
import sun.awt.*;
@@ -282,15 +283,15 @@
return reparented;
}
- @SuppressWarnings("deprecation")
static long getParentWindowID(Component target) {
- ComponentPeer peer = target.getParent().getPeer();
Component temp = target.getParent();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ ComponentPeer peer = acc.getPeer(temp);
while (!(peer instanceof XWindow))
{
temp = temp.getParent();
- peer = temp.getPeer();
+ peer = acc.getPeer(temp);
}
if (peer != null && peer instanceof XWindow)
@@ -299,17 +300,17 @@
}
- @SuppressWarnings("deprecation")
static XWindow getParentXWindowObject(Component target) {
if (target == null) return null;
Component temp = target.getParent();
if (temp == null) return null;
- ComponentPeer peer = temp.getPeer();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ ComponentPeer peer = acc.getPeer(temp);
if (peer == null) return null;
while ((peer != null) && !(peer instanceof XWindow))
{
temp = temp.getParent();
- peer = temp.getPeer();
+ peer = acc.getPeer(temp);
}
if (peer != null && peer instanceof XWindow)
return (XWindow) peer;
@@ -552,7 +553,7 @@
int h = xe.get_height();
Component target = getEventSource();
- AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+ ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
if (!compAccessor.getIgnoreRepaint(target)
&& compAccessor.getWidth(target) != 0
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.util.logging.PlatformLogger;
import sun.awt.AWTAccessor;
@@ -225,7 +226,7 @@
Window t_window = (Window)target;
Window owner = t_window.getOwner();
if (owner != null) {
- ownerPeer = (XWindowPeer)owner.getPeer();
+ ownerPeer = AWTAccessor.getComponentAccessor().getPeer(owner);
if (focusLog.isLoggable(PlatformLogger.Level.FINER)) {
focusLog.finer("Owner is " + owner);
focusLog.finer("Owner peer is " + ownerPeer);
@@ -401,15 +402,15 @@
}
}
- @SuppressWarnings("deprecation")
public void recursivelySetIcon(java.util.List<IconInfo> icons) {
dumpIcons(winAttr.icons);
setIconHints(icons);
Window target = (Window)this.target;
Window[] children = target.getOwnedWindows();
int cnt = children.length;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
for (int i = 0; i < cnt; i++) {
- ComponentPeer childPeer = children[i].getPeer();
+ final ComponentPeer childPeer = acc.getPeer(children[i]);
if (childPeer != null && childPeer instanceof XWindowPeer) {
if (((XWindowPeer)childPeer).winAttr.iconsInherited) {
((XWindowPeer)childPeer).winAttr.icons = icons;
@@ -1161,7 +1162,7 @@
if (warningWindow != null) {
// We can't use the coordinates stored in the XBaseWindow since
// they are zeros for decorated frames.
- AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+ ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
int x = compAccessor.getX(target);
int y = compAccessor.getY(target);
int width = compAccessor.getWidth(target);
@@ -1486,7 +1487,7 @@
XToolkit.awtLock();
try {
if (isReparented() && delayedModalBlocking) {
- addToTransientFors((XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
+ addToTransientFors(AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
delayedModalBlocking = false;
}
} finally {
@@ -1570,7 +1571,7 @@
try {
// State lock should always be after awtLock
synchronized(getStateLock()) {
- XDialogPeer blockerPeer = (XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(d);
+ XDialogPeer blockerPeer = AWTAccessor.getComponentAccessor().getPeer(d);
if (blocked) {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine("{0} is blocked by {1}", this, blockerPeer);
@@ -1852,7 +1853,7 @@
// current chain iterator in the order from next to prev
XWindowPeer chainToSplit = prevTransientFor;
while (chainToSplit != null) {
- XWindowPeer blocker = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
+ XWindowPeer blocker = AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
if (thisChainBlockers.contains(blocker)) {
// add to this dialog's chain
setToplevelTransientFor(thisChain, chainToSplit, true, false);
@@ -1913,7 +1914,7 @@
}
focusLog.fine("Parent window is not active");
- XDecoratedPeer wpeer = (XDecoratedPeer)AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
+ XDecoratedPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
if (wpeer != null && wpeer.requestWindowFocus(this, time, timeProvided)) {
focusLog.fine("Parent window accepted focus request - generating focus for this window");
return true;
@@ -2259,7 +2260,7 @@
while (w != null && toplevel != this && !(toplevel instanceof XDialogPeer)) {
w = (Window) AWTAccessor.getComponentAccessor().getParent(w);
if (w != null) {
- toplevel = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+ toplevel = AWTAccessor.getComponentAccessor().getPeer(w);
}
}
if (w == null || (w != this.target && w instanceof Dialog)) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,7 @@
import java.awt.Graphics;
public interface X11ComponentPeer {
+ long getWindow();
long getContentWindow();
SurfaceData getSurfaceData();
GraphicsConfiguration getGraphicsConfiguration();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,7 +40,7 @@
import java.util.Vector;
import javax.swing.plaf.FontUIResource;
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
import sun.font.CompositeFont;
import sun.font.FontManager;
import sun.font.SunFontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -299,11 +299,7 @@
@Override
public boolean isFullScreenSupported() {
- // REMIND: for now we will only allow fullscreen exclusive mode
- // on the primary screen; we could change this behavior slightly
- // in the future by allowing only one screen to be in fullscreen
- // exclusive mode at any given time...
- boolean fsAvailable = (screen == 0) && isXrandrExtensionSupported();
+ boolean fsAvailable = isXrandrExtensionSupported();
if (fsAvailable) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
@@ -326,21 +322,19 @@
return (isFullScreenSupported() && (getFullScreenWindow() != null));
}
- @SuppressWarnings("deprecation")
private static void enterFullScreenExclusive(Window w) {
- X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+ X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer != null) {
- enterFullScreenExclusive(peer.getContentWindow());
+ enterFullScreenExclusive(peer.getWindow());
peer.setFullScreenExclusiveModeState(true);
}
}
- @SuppressWarnings("deprecation")
private static void exitFullScreenExclusive(Window w) {
- X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+ X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer != null) {
peer.setFullScreenExclusiveModeState(false);
- exitFullScreenExclusive(peer.getContentWindow());
+ exitFullScreenExclusive(peer.getWindow());
}
}
@@ -382,7 +376,11 @@
@Override
public synchronized DisplayMode getDisplayMode() {
if (isFullScreenSupported()) {
- return getCurrentDisplayMode(screen);
+ DisplayMode mode = getCurrentDisplayMode(screen);
+ if (mode == null) {
+ mode = getDefaultDisplayMode();
+ }
+ return mode;
} else {
if (origDisplayMode == null) {
origDisplayMode = getDefaultDisplayMode();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java Wed Jul 05 20:33:55 2017 +0200
@@ -43,7 +43,7 @@
import java.util.*;
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
import sun.font.FcFontConfiguration;
import sun.font.Font2D;
import sun.font.FontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/MFontConfiguration.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import sun.awt.FontConfiguration;
-import sun.awt.X11FontManager;
-import sun.font.FontUtilities;
-import sun.font.SunFontManager;
-import sun.util.logging.PlatformLogger;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Scanner;
-
-public class MFontConfiguration extends FontConfiguration {
-
- private static FontConfiguration fontConfig = null;
- private static PlatformLogger logger;
-
- public MFontConfiguration(SunFontManager fm) {
- super(fm);
- if (FontUtilities.debugFonts()) {
- logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
- }
- initTables();
- }
-
-
- public MFontConfiguration(SunFontManager fm,
- boolean preferLocaleFonts,
- boolean preferPropFonts) {
- super(fm, preferLocaleFonts, preferPropFonts);
- if (FontUtilities.debugFonts()) {
- logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
- }
- initTables();
- }
-
- /* Needs to be kept in sync with updates in the languages used in
- * the fontconfig files.
- */
- protected void initReorderMap() {
- reorderMap = new HashMap<>();
- if (osName == null) { /* null means SunOS */
- initReorderMapForSolaris();
- } else {
- initReorderMapForLinux();
- }
- }
-
- private void initReorderMapForSolaris() {
- /* Don't create a no-op entry, so we can optimize this case
- * i.e. we don't need to do anything so can avoid slower paths in
- * the code.
- */
-// reorderMap.put("UTF-8", "latin-1");
- reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
- reorderMap.put("UTF-8.ja",
- split("japanese-x0201,japanese-x0208,japanese-x0212"));
- reorderMap.put("UTF-8.ko", "korean-johab");
- reorderMap.put("UTF-8.th", "thai");
- reorderMap.put("UTF-8.zh.TW", "chinese-big5");
- reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
- if (FontUtilities.isSolaris8) {
- reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
- } else {
- reorderMap.put("UTF-8.zh.CN",
- split("chinese-gb18030-0,chinese-gb18030-1"));
- }
- reorderMap.put("UTF-8.zh",
- split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
- reorderMap.put("Big5", "chinese-big5");
- reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
- if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
- reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
- } else {
- reorderMap.put("GB2312","chinese-gb2312");
- }
- reorderMap.put("x-EUC-TW",
- split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
- reorderMap.put("GBK", "chinese-gbk");
- reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
-
- reorderMap.put("TIS-620", "thai");
- reorderMap.put("x-PCK",
- split("japanese-x0201,japanese-x0208,japanese-x0212"));
- reorderMap.put("x-eucJP-Open",
- split("japanese-x0201,japanese-x0208,japanese-x0212"));
- reorderMap.put("EUC-KR", "korean");
- /* Don't create a no-op entry, so we can optimize this case */
-// reorderMap.put("ISO-8859-1", "latin-1");
- reorderMap.put("ISO-8859-2", "latin-2");
- reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
- reorderMap.put("windows-1251", "cyrillic-cp1251");
- reorderMap.put("KOI8-R", "cyrillic-koi8-r");
- reorderMap.put("ISO-8859-6", "arabic");
- reorderMap.put("ISO-8859-7", "greek");
- reorderMap.put("ISO-8859-8", "hebrew");
- reorderMap.put("ISO-8859-9", "latin-5");
- reorderMap.put("ISO-8859-13", "latin-7");
- reorderMap.put("ISO-8859-15", "latin-9");
- }
-
- private void initReorderMapForLinux() {
- reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
- reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
- reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
- reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
- reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
- reorderMap.put("x-euc-jp-linux",
- split("japanese-x0201,japanese-x0208"));
- reorderMap.put("GB2312", "chinese-gb18030");
- reorderMap.put("Big5", "chinese-big5");
- reorderMap.put("EUC-KR", "korean");
- if (osName.equals("Sun")){
- reorderMap.put("GB18030", "chinese-cn-iso10646");
- }
- else {
- reorderMap.put("GB18030", "chinese-gb18030");
- }
- }
-
- /**
- * Sets the OS name and version from environment information.
- */
- protected void setOsNameAndVersion(){
- super.setOsNameAndVersion();
-
- if (osName.equals("SunOS")) {
- //don't care os name on Solaris
- osName = null;
- } else if (osName.equals("Linux")) {
- try {
- File f;
- if ((f = new File("/etc/fedora-release")).canRead()) {
- osName = "Fedora";
- osVersion = getVersionString(f);
- } else if ((f = new File("/etc/redhat-release")).canRead()) {
- osName = "RedHat";
- osVersion = getVersionString(f);
- } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
- osName = "Turbo";
- osVersion = getVersionString(f);
- } else if ((f = new File("/etc/SuSE-release")).canRead()) {
- osName = "SuSE";
- osVersion = getVersionString(f);
- } else if ((f = new File("/etc/lsb-release")).canRead()) {
- /* Ubuntu and (perhaps others) use only lsb-release.
- * Syntax and encoding is compatible with java properties.
- * For Ubuntu the ID is "Ubuntu".
- */
- Properties props = new Properties();
- props.load(new FileInputStream(f));
- osName = props.getProperty("DISTRIB_ID");
- osVersion = props.getProperty("DISTRIB_RELEASE");
- }
- } catch (Exception e) {
- }
- }
- return;
- }
-
- /**
- * Gets the OS version string from a Linux release-specific file.
- */
- private String getVersionString(File f){
- try {
- Scanner sc = new Scanner(f);
- return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
- }
- catch (Exception e){
- }
- return null;
- }
-
- private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
-
- protected String mapFileName(String fileName) {
- if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
- return SunFontManager.jreFontDirName
- + fileName.substring(fontsDirPrefix.length());
- }
- return fileName;
- }
-
- // overrides FontConfiguration.getFallbackFamilyName
- public String getFallbackFamilyName(String fontName, String defaultFallback) {
- // maintain compatibility with old font.properties files, which
- // either had aliases for TimesRoman & Co. or defined mappings for them.
- String compatibilityName = getCompatibilityFamilyName(fontName);
- if (compatibilityName != null) {
- return compatibilityName;
- }
- return defaultFallback;
- }
-
- protected String getEncoding(String awtFontName,
- String characterSubsetName) {
- // extract encoding field from XLFD
- int beginIndex = 0;
- int fieldNum = 13; // charset registry field
- while (fieldNum-- > 0 && beginIndex >= 0) {
- beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
- }
- if (beginIndex == -1) {
- return "default";
- }
- String xlfdEncoding = awtFontName.substring(beginIndex);
- if (xlfdEncoding.indexOf("fontspecific") > 0) {
- if (awtFontName.indexOf("dingbats") > 0) {
- return "sun.awt.motif.X11Dingbats";
- } else if (awtFontName.indexOf("symbol") > 0) {
- return "sun.awt.Symbol";
- }
- }
- String encoding = encodingMap.get(xlfdEncoding);
- if (encoding == null) {
- encoding = "default";
- }
- return encoding;
- }
-
- protected Charset getDefaultFontCharset(String fontName) {
- return Charset.forName("ISO8859_1");
- }
-
- protected String getFaceNameFromComponentFontName(String componentFontName) {
- return null;
- }
-
- protected String getFileNameFromComponentFontName(String componentFontName) {
- // for X11, component font name is XLFD
- // if we have a file name already, just use it; otherwise let's see
- // what the graphics environment can provide
- String fileName = getFileNameFromPlatformName(componentFontName);
- if (fileName != null && fileName.charAt(0) == '/' &&
- !needToSearchForFile(fileName)) {
- return fileName;
- }
- return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
- }
-
- public HashSet<String> getAWTFontPathSet() {
- HashSet<String> fontDirs = new HashSet<String>();
- short[] scripts = getCoreScripts(0);
- for (int i = 0; i< scripts.length; i++) {
- String path = getString(table_awtfontpaths[scripts[i]]);
- if (path != null) {
- int start = 0;
- int colon = path.indexOf(':');
- while (colon >= 0) {
- fontDirs.add(path.substring(start, colon));
- start = colon + 1;
- colon = path.indexOf(':', start);
- }
- fontDirs.add((start == 0) ? path : path.substring(start));
- }
- }
- return fontDirs;
- }
-
- /* methods for table setup ***********************************************/
-
- private static HashMap<String, String> encodingMap = new HashMap<>();
-
- private void initTables() {
- // encodingMap maps XLFD encoding component to
- // name of corresponding java.nio charset
- encodingMap.put("iso8859-1", "ISO-8859-1");
- encodingMap.put("iso8859-2", "ISO-8859-2");
- encodingMap.put("iso8859-4", "ISO-8859-4");
- encodingMap.put("iso8859-5", "ISO-8859-5");
- encodingMap.put("iso8859-6", "ISO-8859-6");
- encodingMap.put("iso8859-7", "ISO-8859-7");
- encodingMap.put("iso8859-8", "ISO-8859-8");
- encodingMap.put("iso8859-9", "ISO-8859-9");
- encodingMap.put("iso8859-13", "ISO-8859-13");
- encodingMap.put("iso8859-15", "ISO-8859-15");
- encodingMap.put("gb2312.1980-0", "sun.awt.motif.X11GB2312");
- if (osName == null) {
- // use standard converter on Solaris
- encodingMap.put("gbk-0", "GBK");
- } else {
- encodingMap.put("gbk-0", "sun.awt.motif.X11GBK");
- }
- encodingMap.put("gb18030.2000-0", "sun.awt.motif.X11GB18030_0");
- encodingMap.put("gb18030.2000-1", "sun.awt.motif.X11GB18030_1");
- encodingMap.put("cns11643-1", "sun.awt.motif.X11CNS11643P1");
- encodingMap.put("cns11643-2", "sun.awt.motif.X11CNS11643P2");
- encodingMap.put("cns11643-3", "sun.awt.motif.X11CNS11643P3");
- encodingMap.put("big5-1", "Big5");
- encodingMap.put("big5-0", "Big5");
- encodingMap.put("hkscs-1", "Big5-HKSCS");
- encodingMap.put("ansi-1251", "windows-1251");
- encodingMap.put("koi8-r", "KOI8-R");
- encodingMap.put("jisx0201.1976-0", "sun.awt.motif.X11JIS0201");
- encodingMap.put("jisx0208.1983-0", "sun.awt.motif.X11JIS0208");
- encodingMap.put("jisx0212.1990-0", "sun.awt.motif.X11JIS0212");
- encodingMap.put("ksc5601.1987-0", "sun.awt.motif.X11KSC5601");
- encodingMap.put("ksc5601.1992-3", "sun.awt.motif.X11Johab");
- encodingMap.put("tis620.2533-0", "TIS-620");
- encodingMap.put("iso10646-1", "UTF-16BE");
- }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
- private final int plane;
- public X11CNS11643 (int plane, String name) {
- super(name, null);
- switch (plane) {
- case 1:
- this.plane = 0; // CS1
- break;
- case 2:
- case 3:
- this.plane = plane;
- break;
- default:
- throw new IllegalArgumentException
- ("Only planes 1, 2, and 3 supported");
- }
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this, plane);
- }
-
- public CharsetDecoder newDecoder() {
- return new Decoder(this, plane);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11CNS11643;
- }
-
- private class Encoder extends EUC_TW.Encoder {
- private int plane;
- public Encoder(Charset cs, int plane) {
- super(cs);
- this.plane = plane;
- }
-
- private byte[] bb = new byte[4];
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- int nb = toEUC(c, bb);
- if (nb == -1)
- return false;
- int p = 0;
- if (nb == 4)
- p = (bb[1] & 0xff) - 0xa0;
- return (p == plane);
- }
-
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if ( c > '\u007f'&& c < '\uFFFE') {
- int nb = toEUC(c, bb);
- if (nb != -1) {
- int p = 0;
- if (nb == 4)
- p = (bb[1] & 0xff) - 0xa0;
- if (p == plane) {
- if (dl - dp < 2)
- return CoderResult.OVERFLOW;
- if (nb == 2) {
- da[dp++] = (byte)(bb[0] & 0x7f);
- da[dp++] = (byte)(bb[1] & 0x7f);
- } else {
- da[dp++] = (byte)(bb[2] & 0x7f);
- da[dp++] = (byte)(bb[3] & 0x7f);
- }
- sp++;
- continue;
- }
- }
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- }
-
- private class Decoder extends EUC_TW.Decoder {
- int plane;
- private String table;
- protected Decoder(Charset cs, int plane) {
- super(cs);
- if (plane == 0)
- this.plane = plane;
- else if (plane == 2 || plane == 3)
- this.plane = plane - 1;
- else
- throw new IllegalArgumentException
- ("Only planes 1, 2, and 3 supported");
- }
-
- //we only work on array backed buffer.
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
-
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- int b1 = (sa[sp] & 0xff) | 0x80;
- int b2 = (sa[sp + 1] & 0xff) | 0x80;
- char[] cc = toUnicode(b1, b2, plane);
- // plane3 has non-bmp characters(added), x11cnsp3
- // however does not support them
- if (cc == null || cc.length == 2)
- return CoderResult.unmappableForLength(2);
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = cc[0];
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P1.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-public class X11CNS11643P1 extends X11CNS11643 {
- public X11CNS11643P1() {
- super(1, "X11CNS11643P1");
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P2.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P2 extends X11CNS11643 {
- public X11CNS11643P2() {
- super(2, "X11CNS11643P2");
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P3.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P3 extends X11CNS11643 {
- public X11CNS11643P3() {
- super(3, "X11CNS11643P3");
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Dingbats.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-public class X11Dingbats extends Charset {
- public X11Dingbats () {
- super("X11Dingbats", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- /* Seems like supporting a decoder is required, but we aren't going
- * to be publically exposing this class, so no need to waste work
- */
- public CharsetDecoder newDecoder() {
- throw new Error("Decoder is not supported by X11Dingbats Charset");
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11Dingbats;
- }
-
- private static class Encoder extends CharsetEncoder {
- public Encoder(Charset cs) {
- super(cs, 1.0f, 1.0f);
- }
-
- public boolean canEncode(char ch) {
- if (ch >= 0x2701 && ch <= 0x275e) { // direct map
- return true;
- }
- if (ch >= 0x2761 && ch <= 0x27be) {
- return (table[ch - 0x2761] != 0x00);
- }
- return false;
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
-
- if (!canEncode(c))
- return CoderResult.unmappableForLength(1);
- sp++;
- if (c >= 0x2761){
- da[dp++] = table[c - 0x2761]; // table lookup
- } else {
- da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
- }
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
-
- private static byte[] table = {
- (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
- (byte)0xa5, (byte)0xa6, (byte)0xa7,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
- (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
- (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
- (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
- (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
- (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
- (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
- (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
- (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
- (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
- (byte)0x00, (byte)0x00, (byte)0x00};
-
- /* The default implementation creates a decoder and we don't have one */
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_0.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4274 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_0 extends Charset {
- public X11GB18030_0 () {
- super("X11GB18030_0", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- /* Seems like supporting a decoder is required, but we aren't going
- * to be publically exposing this class, so no need to waste work
- */
- public CharsetDecoder newDecoder() {
- throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GB18030_0;
- }
-
- private static class Encoder extends DoubleByteEncoder {
- public Encoder(Charset cs) {
- super(cs, index1, index2);
- }
- protected int encodeSingle(char inputChar) {
- return -1;
- }
- private final static String innerIndex0=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
- "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
- "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
- "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
- "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
- "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
- "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
- "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
- "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
- "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
- "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
- "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
- "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
- "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
- "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
- "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
- "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
- "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
- "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
- "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
- "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
- "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
- "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
- "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
- "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
- "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
- "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
- "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
- "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
- "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
- "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
- "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
- "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
- "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
- "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
- "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
- "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
- "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
- "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
- "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
- "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
- "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
- "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
- "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
- "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
- "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
- "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
- "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
- "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
- "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
- "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
- "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
- "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
- "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
- "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
- "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
- "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
- "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
- "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
- "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
- "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
- "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
- "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
- "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
- "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
- "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
- "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
- "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
- "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
- "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
- "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
- "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
- "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
- "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
- "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
- "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
- "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
- "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
- "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
- "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
- "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
- "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
- "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
- "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
- "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
- "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
- "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
- "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
- "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
- "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
- "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
- "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
- "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
- "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
- "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
- "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
-
- private final static String innerIndex1=
- "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
- "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
- "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
- "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
- "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
- "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
- "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
- "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
- "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
- "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
- "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
- "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex2=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
- "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
- "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
- "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
- "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
- "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
- "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
- "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
- "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
- "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
- "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
- "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
- "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
- "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
- "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
- "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
- "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
- "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
- "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
- "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
- "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
- "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
- "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
- "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
- "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
- "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
- "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
- "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
- "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
- "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
- "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
- "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
- "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
- "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
- "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
- "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
- "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
- "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
- "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
- "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
- "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
- "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
- "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
- "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
- "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
- "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
- "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
- "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
- "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
- "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
- "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
- "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
- "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
- "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
- "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
- "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
- "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
- "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
- "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
- "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
- "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
- "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
- "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
- "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
- "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
- "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
- "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
- "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
- "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
- "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
- "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
- "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
- "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
- "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
- "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
- "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
- "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
- "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
- "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
- "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
- "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
- "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
- "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
- "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
- "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
- "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
- "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
- "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
- "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
- "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
- "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
- "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
- "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
- "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
- "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
- "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
- "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
- "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
- "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
- "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
- "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
- "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
- "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
- "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
- "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
- "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
- "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
- "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
- "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
- "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
- "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
- "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
- "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
- "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
- "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
- "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
- "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
- "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
- "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
- "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
- "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
- "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
- "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
- "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
- "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
- "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
- "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
- "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
- "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
- "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
- "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
- "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
- "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
- "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
- "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
- "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
- "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
- "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
- "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
- "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
- "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
- "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
- "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
- "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
- "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
- "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
- "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
- "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
- "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
- "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
- "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
- "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
- "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
- "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
- "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
- "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
- "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
- "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
- "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
- "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
- "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
- "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
- "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
- "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
- "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
- "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
- "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
- "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
- "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
- "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
- "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
- "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
- "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
- "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
- "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
- "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
- "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
- "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
- "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
- "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
- "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
- "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
- "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
- "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
- "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
- "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
- "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
- "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
- "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
- "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
- "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
- "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
- "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
- "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
- "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
- "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
- "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
- "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
- "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
- "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
- "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
- "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
- "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
- "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
- "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
- "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
- "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
- "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
- "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
- "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
- "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
- "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
- "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
- "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
- "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
- "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
- "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
- "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
- "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
- "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
- "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
- "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
- "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
- "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
- "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
- "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
- "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
- "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
- "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
- "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
- "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
- "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
- "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
- "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
- "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
- "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
- "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
- "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
- "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
- "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
- "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
- "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
- "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
- "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
- "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
- "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
- "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
- "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
- "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
- "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
- "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
- "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
- "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
- "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
- "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
- "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
- "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
- "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
- "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
- "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
- "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
- "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
- "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
- "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
- "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
- "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
- "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
- "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
- "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
- "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
- "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
- "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
- "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
- "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
- "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
- "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
- "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
- "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
- "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
- "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
- "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
- "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
- "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
- "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
- "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
- "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
- "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
- "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
- "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
- "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
- "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
- "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
- "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
- "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
- "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
- "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
- "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
- "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
- "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
- "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
- "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
- "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
- "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
- "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
- "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
- "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
- "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
- "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
- "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
- "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
- "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
- "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
- "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
- "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
- "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
- "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
- "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
- "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
- "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
- "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
- "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
- "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
- "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
- "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
- "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
- "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
- "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
- "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
- "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
- "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
- "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
- "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
- "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
- "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
- "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
- "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
- "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
- "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
- "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
- "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
- "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
- "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
- "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
- "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
- "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
- "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
- "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
- "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
- "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
- "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
- "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
- "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
- "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
- "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
- "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
- "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
- "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
- "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
- "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
- "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
- "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
- "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
- "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
- "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
- "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
- "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
- "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
- "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
- "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
- "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
- "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
- "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
- "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
- "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
- "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
- "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
- "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
- "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
- "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
- "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
- "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
- "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
- "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
- "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
- "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
- "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
- "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
- "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
- "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
- "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
- "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
- "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
- "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
- "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
- "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
- "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
- "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
- "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
- "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
- "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
- "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
- "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
- "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
- "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
- "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
- "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
- "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
- "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
- "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
- "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
- "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
- "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
- "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
- "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
- "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
- "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
- "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
- "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
- "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
-
- private final static String innerIndex3=
- "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
- "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
- "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
- "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
- "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
- "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
- "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
- "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
- "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
- "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
- "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
- "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
- "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
- "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
- "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
- "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
- "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
- "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
- "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
- "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
- "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
- "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
- "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
- "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
- "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
- "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
- "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
- "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
- "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
- "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
- "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
- "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
- "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
- "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
- "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
- "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
- "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
- "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
- "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
- "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
- "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
- "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
- "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
- "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
- "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
- "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
- "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
- "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
- "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
- "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
- "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
- "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
- "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
- "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
- "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
- "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
- "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
- "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
- "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
- "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
- "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
- "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
- "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
- "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
- "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
- "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
- "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
- "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
- "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
- "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
- "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
- "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
- "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
- "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
- "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
- "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
- "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
- "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
- "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
- "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
- "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
- "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
- "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
- "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
- "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
- "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
- "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
- "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
- "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
- "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
- "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
- "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
- "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
- "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
- "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
- "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
- "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
- "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
- "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
- "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
- "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
- "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
- "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
- "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
- "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
- "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
- "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
- "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
- "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
- "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
- "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
- "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
- "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
- "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
- "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
- "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
- "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
- "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
- "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
- "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
- "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
- "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
- "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
- "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
- "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
- "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
- "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
- "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
- "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
- "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
- "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
- "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
- "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
- "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
- "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
- "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
- "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
- "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
- "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
- "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
- "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
- "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
- "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
- "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
- "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
- "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
- "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
- "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
- "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
- "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
- "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
- "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
- "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
- "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
- "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
- "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
- "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
- "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
- "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
- "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
- "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
- "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
- "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
- "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
- "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
- "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
- "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
- "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
- "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
- "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
- "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
- "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
- "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
- "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
- "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
- "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
- "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
- "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
- "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
- "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
- "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
- "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
- "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
- "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
- "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
- "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
- "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
- "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
- "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
- "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
- "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
- "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
- "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
- "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
- "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
- "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
- "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
- "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
- "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
- "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
- "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
- "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
- "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
- "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
- "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
- "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
- "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
- "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
- "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
- "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
- "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
- "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
- "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
- "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
- "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
- "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
- "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
- "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
- "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
- "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
- "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
- "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
- "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
- "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
- "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
- "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
- "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
- "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
- "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
- "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
- "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
- "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
- "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
- "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
- "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
- "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
- "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
- "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
- "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
- "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
- "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
- "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
- "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
- "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
- "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
- "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
- "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
- "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
- "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
- "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
- "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
- "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
- "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
- "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
- "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
- "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
- "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
- "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
- "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
- "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
- "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
- "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
- "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
- "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
- "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
- "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
- "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
- "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
- "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
- "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
- "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
- "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
- "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
- "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
- "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
- "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
- "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
- "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
- "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
- "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
- "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
- "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
- "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
- "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
- "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
- "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
- "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
- "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
- "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
- "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
- "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
- "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
- "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
- "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
- "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
- "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
- "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
- "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
- "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
- "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
- "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
- "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
- "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
- "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
- "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
- "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
- "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
- "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
- "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
- "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
- "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
- "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
- "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
- "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
- "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
- "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
- "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
- "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
- "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
- "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
- "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
- "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
- "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
- "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
- "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
- "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
- "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
- "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
- "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
- "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
- "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
- "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
- "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
- "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
- "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
- "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
- "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
- "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
- "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
- "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
- "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
- "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
- "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
- "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
- "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
- "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
- "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
- "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
- "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
- "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
- "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
- "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
- "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
- "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
- "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
- "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
- "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
- "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
- "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
- "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
- "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
- "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
- "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
- "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
- "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
- "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
- "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
- "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
- "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
- "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
- "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
- "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
- "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
- "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
- "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
- "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
- "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
- "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
- "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
- "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
- "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
- "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
- "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
- "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
- "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
- "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
- "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
- "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
- "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
- "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
- "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
- "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
- "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
- "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
- "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
- "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
- "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
- "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
- "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
- "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
- "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
- "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
- "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
- "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
- "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
- "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
- "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
- "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
- "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
- "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
- "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
- "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
- "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
- "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
- "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
- "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
- "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
- "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
- "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
- "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
- "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
- "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
- "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
- "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
- "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
- "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
- "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
- "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
- "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
- "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
- "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
- "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
- "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
- "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
- "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
- "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
- "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
- "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
- "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
- "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
- "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
- "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
- "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
- "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
- "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
- "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
- "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
- "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
- "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
- "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
- "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
- "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
- "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
- "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
- "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
- "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
- "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
- "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
- "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
- "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
- "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
- "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
- "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
- "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
- "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
- "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
- "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
- "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
- "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
- "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
- "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
- "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
- "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
- "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
- "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
- "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
- "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
- "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
- "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
- "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
- "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
- "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
- "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
- "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
- "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
- "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
- "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
- "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
- "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
- "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
- "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
- "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
- "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
- "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
- "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
- "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
- "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
- "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
- "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
- "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
- "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
- "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
- "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
- "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
- "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
- "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
- "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
- "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
- "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
- "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
- "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
- "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
-
- private final static String innerIndex4=
- "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
- "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
- "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
- "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
- "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
- "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
- "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
- "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
- "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
- "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
- "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
- "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
- "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
- "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
- "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
- "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
- "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
- "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
- "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
- "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
- "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
- "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
- "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
- "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
- "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
- "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
- "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
- "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
- "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
- "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
- "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
- "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
- "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
- "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
- "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
- "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
- "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
- "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
- "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
- "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
- "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
- "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
- "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
- "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
- "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
- "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
- "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
- "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
- "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
- "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
- "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
- "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
- "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
- "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
- "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
- "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
- "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
- "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
- "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
- "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
- "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
- "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
- "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
- "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
- "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
- "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
- "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
- "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
- "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
- "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
- "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
- "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
- "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
- "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
- "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
- "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
- "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
- "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
- "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
- "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
- "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
- "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
- "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
- "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
- "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
- "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
- "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
- "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
- "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
- "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
- "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
- "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
- "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
- "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
- "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
- "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
- "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
- "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
- "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
- "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
- "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
- "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
- "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
- "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
- "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
- "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
- "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
- "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
- "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
- "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
- "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
- "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
- "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
- "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
- "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
- "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
- "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
- "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
- "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
- "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
- "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
- "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
- "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
- "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
- "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
- "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
- "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
- "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
- "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
- "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
- "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
- "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
- "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
- "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
- "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
- "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
- "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
- "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
- "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
- "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
- "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
- "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
- "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
- "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
- "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
- "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
- "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
- "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
- "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
- "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
- "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
- "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
- "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
- "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
- "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
- "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
- "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
- "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
- "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
- "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
- "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
- "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
- "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
- "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
- "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
- "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
- "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
- "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
- "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
- "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
- "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
- "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
- "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
- "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
- "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
- "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
- "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
- "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
- "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
- "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
- "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
- "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
- "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
- "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
- "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
- "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
- "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
- "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
- "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
- "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
- "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
- "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
- "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
- "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
- "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
- "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
- "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
- "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
- "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
- "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
- "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
- "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
- "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
- "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
- "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
- "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
- "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
- "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
- "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
- "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
- "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
- "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
- "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
- "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
- "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
- "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
- "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
- "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
- "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
- "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
- "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
- "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
- "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
- "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
- "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
- "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
- "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
- "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
- "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
- "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
- "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
- "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
- "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
- "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
- "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
- "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
- "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
- "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
- "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
- "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
- "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
- "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
- "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
- "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
- "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
- "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
- "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
- "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
- "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
- "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
- "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
- "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
- "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
- "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
- "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
- "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
- "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
- "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
- "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
- "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
- "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
- "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
- "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
- "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
- "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
- "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
- "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
- "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
- "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
- "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
- "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
- "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
- "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
- "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
- "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
- "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
- "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
- "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
- "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
- "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
- "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
- "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
- "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
- "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
- "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
- "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
- "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
- "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
- "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
- "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
- "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
- "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
- "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
- "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
- "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
- "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
- "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
- "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
- "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
- "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
- "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
- "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
- "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
- "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
- "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
- "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
- "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
- "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
- "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
- "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
- "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
- "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
- "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
- "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
- "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
- "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
- "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
- "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
- "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
- "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
- "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
- "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
- "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
- "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
- "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
- "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
- "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
- "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
- "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
- "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
- "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
- "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
- "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
- "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
- "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
- "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
- "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
- "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
- "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
- "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
- "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
- "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
- "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
- "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
- "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
- "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
- "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
- "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
- "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
- "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
- "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
- "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
- "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
- "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
- "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
- "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
- "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
- "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
- "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
- "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
- "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
- "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
- "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
- "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
- "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
- "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
- "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
- "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
- "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
- "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
- "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
- "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
- "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
- "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
- "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
- "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
- "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
- "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
- "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
- "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
- "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
- "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
- "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
- "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
- "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
- "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
- "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
- "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
- "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
- "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
- "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
- "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
- "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
- "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
- "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
- "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
- "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
- "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
- "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
- "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
- "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
- "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
- "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
- "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
- "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
- "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
- "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
- "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
- "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
- "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
- "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
- "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
- "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
- "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
- "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
- "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
- "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
- "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
- "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
- "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
- "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
- "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
- "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
- "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
- "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
- "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
- "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
- "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
- "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
- "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
- "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
- "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
- "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
- "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
- "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
- "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
- "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
- "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
- "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
- "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
- "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
- "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
- "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
- "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
- "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
- "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
- "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
- "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
- "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
- "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
- "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
- "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
- "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
- "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
- "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
- "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
- "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
- "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
- "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
- "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
- "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
- "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
- "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
- "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
- "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
- "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
- "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
- "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
- "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
- "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
- "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
- "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
- "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
- "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
- "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
- "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
- "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
- "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
- "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
- "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
- "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
- "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
- "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
- "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
- "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
- "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
- "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
- "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
- "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
- "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
- "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
- "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
- "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
- "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
- "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
- "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
- "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
- "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
- "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
- "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
- "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
- "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
- "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
- "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
- "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
- "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
- "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
- "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
- "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
- "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
- "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
- "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
-
- private final static String innerIndex5=
- "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
- "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
- "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
- "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
- "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
- "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
- "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
- "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
- "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
- "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
- "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
- "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
- "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
- "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
- "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
- "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
- "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
- "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
- "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
- "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
- "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
- "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
- "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
- "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
- "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
- "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
- "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
- "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
- "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
- "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
- "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
- "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
- "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
- "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
- "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
- "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
- "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
- "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
- "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
- "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
- "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
- "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
- "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
- "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
- "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
- "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
- "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
- "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
- "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
- "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
- "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
- "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
- "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
- "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
- "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
- "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
- "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
- "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
- "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
- "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
- "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
- "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
- "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
- "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
- "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
- "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
- "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
- "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
- "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
- "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
- "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
- "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
- "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
- "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
- "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
- "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
- "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
- "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
- "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
- "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
- "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
- "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
- "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
- "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
- "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
- "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
- "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
- "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
- "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
- "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
- "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
- "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
- "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
- "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
- "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
- "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
- "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
- "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
- "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
- "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
- "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
- "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
- "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
- "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
- "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
- "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
- "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
- "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
- "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
- "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
- "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
- "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
- "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
- "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
- "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
- "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
- "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
- "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
- "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
- "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
- "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
- "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
- "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
- "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
- "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
- "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
- "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
- "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
- "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
- "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
- "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
- "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
- "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
- "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
- "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
- "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
- "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
- "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
- "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
- "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
- "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
- "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
- "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
- "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
- "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
- "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
- "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
- "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
- "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
- "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
- "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
- "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
- "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
- "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
- "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
- "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
- "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
- "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
- "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
- "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
- "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
- "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
- "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
- "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
- "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
- "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
- "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
- "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
- "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
- "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
- "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
- "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
- "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
- "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
- "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
- "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
- "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
- "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
- "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
- "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
- "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
- "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
- "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
- "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
- "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
- "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
- "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
- "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
- "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
- "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
- "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
- "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
- "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
- "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
- "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
- "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
- "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
- "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
- "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
- "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
- "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
- "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
- "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
- "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
- "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
- "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
- "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
- "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
- "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
- "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
- "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
- "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
- "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
- "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
- "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
- "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
- "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
- "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
- "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
- "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
- "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
- "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
- "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
- "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
- "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
- "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
- "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
- "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
- "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
- "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
- "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
- "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
- "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
- "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
- "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
- "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
- "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
- "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
- "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
- "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
- "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
- "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
- "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
- "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
- "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
- "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
- "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
- "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
- "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
- "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
- "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
- "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
- "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
- "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
- "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
- "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
- "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
- "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
- "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
- "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
- "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
- "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
- "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
- "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
- "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
- "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
- "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
- "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
- "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
- "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
- "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
- "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
- "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
- "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
- "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
- "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
- "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
- "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
- "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
- "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
- "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
- "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
- "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
- "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
- "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
- "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
- "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
- "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
- "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
- "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
- "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
- "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
- "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
- "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
- "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
- "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
- "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
- "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
- "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
- "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
- "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
- "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
- "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
- "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
- "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
- "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
- "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
- "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
- "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
- "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
- "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
- "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
- "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
- "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
- "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
- "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
- "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
- "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
- "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
- "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
- "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
- "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
- "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
- "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
- "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
- "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
- "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
- "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
- "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
- "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
- "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
- "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
- "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
- "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
- "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
- "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
- "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
- "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
- "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
- "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
- "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
- "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
- "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
- "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
- "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
- "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
- "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
- "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
- "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
- "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
- "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
- "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
- "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
- "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
- "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
- "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
- "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
- "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
- "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
- "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
- "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
- "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
- "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
- "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
- "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
- "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
- "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
- "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
- "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
- "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
- "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
- "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
- "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
- "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
- "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
- "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
- "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
- "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
- "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
- "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
- "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
- "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
- "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
- "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
- "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
- "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
- "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
- "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
- "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
- "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
- "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
- "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
- "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
- "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
- "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
- "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
- "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
- "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
- "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
- "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
- "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
- "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
- "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
- "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
- "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
- "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
- "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
- "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
- "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
- "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
- "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
- "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
- "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
- "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
- "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
- "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
- "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
- "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
- "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
- "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
- "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
- "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
- "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
- "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
- "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
- "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
- "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
- "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
- "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
- "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
- "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
- "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
- "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
- "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
- "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
- "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
- "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
- "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
- "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
- "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
- "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
- "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
- "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
- "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
- "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
- "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
- "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
- "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
- "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
- "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
- "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
- "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
- "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
- "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
- "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
- "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
- "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
- "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
- "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
- "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
- "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
- "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
- "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
- "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
- "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
- "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
- "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
- "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
- "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
- "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
- "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
- "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
- "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
- "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
- "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
- "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
- "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
- "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
- "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
- "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
- "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
- "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
- "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
- "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
- "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
- "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
- "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
- "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
- "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
- "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
- "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
- "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
- "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
- "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
- "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
- "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
- "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
- "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
- "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
- "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
- "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
- "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
- "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
- "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
- "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
- "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
- "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
- "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
- "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
- "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
- "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
- "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
-
- private final static String innerIndex6=
- "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
- "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
- "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
- "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
- "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
- "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
- "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
- "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
- "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
- "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
- "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
- "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
- "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
- "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
- "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
- "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
- "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
- "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
- "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
- "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
- "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
- "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
- "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
- "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
- "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
- "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
- "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
- "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
- "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
- "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
- "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
- "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
- "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
- "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
- "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
- "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
- "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
- "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
- "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
- "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
- "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
- "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
- "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
- "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
- "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
- "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
- "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
- "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
- "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
- "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
- "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
- "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
- "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
- "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
- "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
- "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
- "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
- "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
- "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
- "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
- "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
- "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
- "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
- "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
- "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
- "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
- "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
- "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
- "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
- "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
- "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
- "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
- "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
- "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
- "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
- "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
- "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
- "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
- "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
- "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
- "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
- "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
- "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
- "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
- "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
- "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
- "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
- "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
- "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
- "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
- "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
- "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
- "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
- "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
- "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
- "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
- "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
- "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
- "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
- "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
- "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
- "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
- "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
- "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
- "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
- "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
- "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
- "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
- "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
- "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
- "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
- "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
- "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
- "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
- "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
- "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
- "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
- "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
- "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
- "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
- "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
- "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
- "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
- "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
- "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
- "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
- "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
- "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
- "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
- "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
- "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
- "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
- "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
- "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
- "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
- "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
- "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
- "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
- "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
- "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
- "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
- "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
- "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
- "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
- "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
- "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
- "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
- "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
- "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
- "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
- "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
- "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
- "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
- "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
- "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
- "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
- "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
- "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
- "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
- "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
- "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
- "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
- "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
- "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
- "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
- "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
- "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
- "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
- "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
- "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
- "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
- "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
- "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
- "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
- "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
- "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
- "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
- "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
- "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
- "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
- "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
- "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
- "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
- "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
- "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
- "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
- "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
- "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
- "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
- "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
- "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
- "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
- "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
- "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
- "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
- "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
- "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
- "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
- "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
- "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
- "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
- "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
- "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
- "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
- "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
- "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
- "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
- "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
- "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
- "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
- "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
- "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
- "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
- "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
- "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
- "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
- "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
- "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
- "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
- "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
- "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
- "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
- "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
- "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
- "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
- "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
- "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
- "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
- "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
- "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
- "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
- "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
- "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
- "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
- "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
- "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
- "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
- "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
- "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
- "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
- "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
- "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
- "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
- "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
- "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
- "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
- "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
- "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
- "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
- "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
- "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
- "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
- "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
- "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
- "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
- "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
- "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
- "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
- "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
- "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
- "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
- "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
- "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
- "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
- "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
- "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
- "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
- "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
- "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
- "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
- "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
- "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
- "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
- "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
- "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
- "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
- "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
- "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
- "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
- "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
- "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
- "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
- "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
- "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
- "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
- "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
- "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
- "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
- "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
- "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
- "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
- "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
- "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
- "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
- "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
- "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
- "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
- "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
- "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
- "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
- "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
- "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
- "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
- "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
- "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
- "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
- "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
- "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
- "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
- "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
- "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
- "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
- "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
- "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
- "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
- "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
- "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
- "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
- "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
- "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
- "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
- "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
- "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
- "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
- "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
- "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
- "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
- "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
- "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
- "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
- "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
- "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
- "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
- "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
- "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
- "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
- "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
- "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
- "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
- "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
- "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
- "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
- "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
- "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
- "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
- "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
- "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
- "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
- "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
- "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
- "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
- "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
- "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
- "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
- "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
- "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
- "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
- "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
- "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
- "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
- "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
- "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
- "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
- "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
- "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
- "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
- "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
- "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
- "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
- "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
- "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
- "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
- "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
- "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
- "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
- "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
- "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
- "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
- "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
- "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
- "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
- "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
- "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
- "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
- "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
- "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
- "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
- "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
- "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
- "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
- "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
- "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
- "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
- "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
- "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
- "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
- "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
- "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
- "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
- "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
- "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
- "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
- "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
- "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
- "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
- "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
- "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
- "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
- "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
- "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
- "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
- "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
- "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
- "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
- "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
- "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
- "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
- "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
- "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
- "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
- "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
- "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
- "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
- "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
- "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
- "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
- "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
- "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
- "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
- "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
- "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
- "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
- "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
- "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
- "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
- "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
- "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
- "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
- "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
- "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
- "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
- "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
- "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
- "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
- "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
- "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
- "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
- "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
- "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
- "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
- "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
- "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
- "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
- "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
- "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
- "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
- "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
- "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
- "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
- "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
- "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
- "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
- "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
- "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
- "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
- "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
- "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
- "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
- "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
- "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
- "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
- "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
- "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
- "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
- "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
- "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
- "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
- "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
- "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
- "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
- "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
- "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
- "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
- "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
- "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
- "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
- "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
- "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
- "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
- "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
- "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
- "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
- "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
- "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
- "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
- "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
- "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
- "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
- "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
- "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
- "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
- "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
- "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
- "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
- "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
- "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
- "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
- "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
- "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
- "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
- "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
- "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
-
- private final static String innerIndex7=
- "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
- "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
- "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
- "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
- "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
- "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
- "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
- "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
- "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
- "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
- "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
- "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
- "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
- "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
- "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
- "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
- "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
- "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
- "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
- "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
- "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
- "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
- "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
- "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
- "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
- "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
- "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
- "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
- "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
- "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
- "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
- "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
- "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
- "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
- "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
- "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
- "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
- "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
- "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
- "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
- "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
- "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
- "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
- "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
- "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
- "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
- "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
- "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
- "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
- "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
- "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
- "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
- "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
- "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
- "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
- "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
- "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
- "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
- "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
- "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
- "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
- "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
- "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
- "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
- "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
- "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
- "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
- "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
- "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
- "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
- "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
- "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
- "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
- "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
- "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
- "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
- "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
- "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
- "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
- "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
- "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
- "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
- "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
- "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
- "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
- "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
- "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
- "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
- "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
- "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
- "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
- "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
- "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
- "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
- "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
- "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
- "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
- "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
- "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
- "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
- "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
- "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
- "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
- "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
- "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
- "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
- "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
- "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
- "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
- "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
- "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
- "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
- "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
- "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
- "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
- "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
- "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
- "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
- "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
- "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
- "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
- "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
- "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
- "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
- "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
- "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
- "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
- "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
- "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
- "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
- "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
- "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
- "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
- "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
- "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
- "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
- "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
- "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
- "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
- "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
- "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
- "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
- "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
- "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
- "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
- "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
- "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
- "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
- "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
- "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
- "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
- "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
- "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
- "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
- "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
- "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
- "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
- "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
- "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
- "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
- "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
- "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
- "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
- "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
- "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
- "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
- "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
- "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
- "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
- "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
- "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
- "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
- "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
- "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
- "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
- "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
- "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
- "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
- "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
- "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
- "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
- "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
- "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
- "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
- "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
- "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
- "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
- "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
- "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
- "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
- "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
- "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
- "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
- "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
- "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
- "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
- "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
- "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
- "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
- "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
- "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
- "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
- "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
- "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
- "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
- "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
- "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
- "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
- "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
- "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
- "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
- "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
- "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
- "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
- "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
- "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
- "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
- "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
- "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
- "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
- "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
- "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
- "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
- "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
- "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
- "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
- "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
- "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
- "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
- "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
- "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
- "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
- "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
- "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
- "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
- "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
- "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
- "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
- "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
- "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
- "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
- "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
- "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
- "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
- "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
- "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
- "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
- "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
- "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
- "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
- "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
- "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
- "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
- "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
- "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
- "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
- "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
- "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
- "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
- "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
- "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
- "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
- "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
- "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
- "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
- "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
- "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
- "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
- "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
- "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
- "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
- "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
- "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
- "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
- "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
- "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
- "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
- "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
- "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
- "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
- "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
- "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
- "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
- "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
- "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
- "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
- "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
- "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
- "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
- "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
- "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
- "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
- "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
- "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
- "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
- "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
- "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
- "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
- "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
- "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
- "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
- "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
- "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
- "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
- "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
- "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
- "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
- "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
- "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
- "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
- "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
- "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
- "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
- "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
- "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
- "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
- "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
- "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
- "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
- "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
- "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
- "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
- "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
- "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
- "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
- "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
- "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
- "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
- "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
- "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
- "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
- "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
- "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
- "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
- "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
- "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
- "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
- "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
- "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
- "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
- "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
- "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
- "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
- "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
- "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
- "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
- "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
- "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
- "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
- "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
- "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
- "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
- "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
- "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
- "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
- "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
- "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
- "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
- "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
- "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
- "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
- "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
- "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
- "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
- "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
- "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
- "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
- "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
- "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
- "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
- "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
- "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
- "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
- "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
- "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
- "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
- "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
- "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
- "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
- "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
- "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
- "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
- "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
- "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
- "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
- "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
- "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
- "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
- "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
- "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
- "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
- "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
- "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
- "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
- "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
- "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
- "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
- "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
- "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
- "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
- "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
- "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
- "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
- "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
- "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
- "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
- "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
- "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
- "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
- "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
- "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
- "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex8=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
- "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
- "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
- "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
- "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
- "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
- "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
- "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
- "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
- "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
- "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
- "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
- "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
- "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
- "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
- "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
- "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
- "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
- "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static short index1[] = {
- 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
- 26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
- };
-
- private final static String index2[] = {
- innerIndex0,
- innerIndex1,
- innerIndex2,
- innerIndex3,
- innerIndex4,
- innerIndex5,
- innerIndex6,
- innerIndex7,
- innerIndex8
- };
-
- /* The default implementation creates a decoder and we don't have one */
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_1.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5271 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_1 extends Charset {
- public X11GB18030_1 () {
- super("X11GB18030_1", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- /* Seems like supporting a decoder is required, but we aren't going
- * to be publically exposing this class, so no need to waste work
- */
- public CharsetDecoder newDecoder() {
- throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GB18030_1;
- }
- private static class Encoder extends DoubleByteEncoder {
- public Encoder(Charset cs) {
- super(cs, index1, index2);
- }
- protected int encodeSingle(char inputChar) {
- return -1;
- }
- private final static String innerIndex0=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
- "\b\t\n\u000B\f\r\u000E\u000F"+
- "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
- "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
- "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
- "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
- "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
- "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
- "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
- "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
- "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
- "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
- "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
- "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
- "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
- "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
- "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
- "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
- "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
- "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
- "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
- "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
- "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
- "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
- "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
- "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
- "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
- "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
- "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
- "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
- "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
- "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
- "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
- "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
- "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
- "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
- "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
- "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
- "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
- "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
- "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
- "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
- "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
- "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
- "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
- "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
- "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
- "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
- "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
- "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
- "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
- "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
- "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
- "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
- "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
- "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
- "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
- "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
- "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
- "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
- "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
- "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
- "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
- "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
- "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
- "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
- "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
- "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
- "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
- "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
- "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
- "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
- "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
- "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
- "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
- "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
- "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
- "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
- "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
- "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
- "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
- "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
- "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
- "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
- "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
- "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
- "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
- "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
- "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
- "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
- "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
- "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
- "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
- "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
- "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
- "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
- "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
- "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
- "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
- "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
- "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
- "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
- "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
- "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
- "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
- "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
- "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
- "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
- "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
- "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
- "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
- "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
- "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
- "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
- "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
- "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
- "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
- "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
- "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
- "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
- "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
- "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
- "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
- "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
- "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
- "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
- "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
- "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
- "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
- "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
- "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
- "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
- "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
- "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
- "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
- "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
- "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
- "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
- "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
- "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
- "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
- "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
- "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
- "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
- "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
- "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
- "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
- "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
- "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
- "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
- "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
- "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
- "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
- "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
- "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
- "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
- "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
- "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
- "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
- "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
- "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
- "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
- "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
- "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
- "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
- "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
- "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
- "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
- "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
- "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
- "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
- "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
- "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
- "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
- "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
- "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
- "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
- "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
- "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
- "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
- "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
- "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
- "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
- "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
- "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
- "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
- "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
- "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
- "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
- "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
- "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
- "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
- "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
- "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
- "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
- "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
- "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
- "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
- "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
- "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
- "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
- "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
- "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
- "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
- "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
- "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
- "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
- "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
- "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
- "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
- "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
- "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
- "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
- "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
- "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
- "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
- "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
- "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
- "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
- "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
- "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
- "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
- "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
- "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
- "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
- "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
- "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
- "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
- "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
- "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
- "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
- "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
- "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
- "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
- "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
- "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
- "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
- "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
- "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
- "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
- "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
- "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
- "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
- "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
- "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
- "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
- "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
- "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
- "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
- "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
- "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
- "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
- "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
- "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
- "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
- "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
- "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
- "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
- "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
- "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
- "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
- "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
- "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
- "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
- "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
- "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
- "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
- "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
- "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
- "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
- "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
- "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
- "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
- "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
- "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
- "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
- "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
- "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
- "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
- "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
- "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
- "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
- "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
- "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
- "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
- "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
- "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
- "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
- "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
- "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
- "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
- "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
- "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
- "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
- "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
- "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
- "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
- "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
- "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
- "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
- "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
- "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
- "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
- "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
- "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
- "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
- "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
- "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
- "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
- "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
- "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
- "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
- "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
- "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
- "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
- "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
- "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
- "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
- "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
- "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
- "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
- "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
- "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
- "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
- "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
- "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
- "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
- "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
- "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
- "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
- "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
- "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
- "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
- "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
- "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
- "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
- "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
- "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
- "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
- "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
- "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
- "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
- "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
- "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
- "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
- "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
- "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
- "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
- "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
- "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
- "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
- "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
- "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
- "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
- "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
- "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
- "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
- "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
- "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
- "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
- "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
- "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
- "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
- "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
- "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
- "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
- "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
- "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
- "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
- "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
- "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
- "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
- "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
- "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
- "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
- "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
- "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
- "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
- "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
- "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
- "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
- "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
- "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
- "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
- "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
- "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
- "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
- "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
- "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
- "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
- "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
- "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
- "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
- "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
- "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
- "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
- "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
- "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
- "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
- "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
- "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
- "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
- "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
- "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
- "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
- "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
- "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
- "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
- "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
- "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
- "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
- "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
- "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
- "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
- "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
- "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
- "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
- "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
- "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
- "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
- "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
- "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
- "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
- "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
- "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
- "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
- "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
- "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
- "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
- "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
- "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
- "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
- "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
- "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
- "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
- "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
- "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
- "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
- "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
- "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
- "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
- "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
- "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
- "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
- "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
- "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
- "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
- "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
- "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
-
- private final static String innerIndex1=
- "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
- "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
- "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
- "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
- "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
- "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
- "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
- "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
- "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
- "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
- "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
- "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
- "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
- "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
- "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
- "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
- "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
- "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
- "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
- "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
- "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
- "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
- "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
- "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
- "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
- "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
- "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
- "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
- "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
- "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
- "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
- "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
- "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
- "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
- "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
- "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
- "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
- "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
- "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
- "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
- "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
- "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
- "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
- "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
- "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
- "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
- "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
- "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
- "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
- "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
- "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
- "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
- "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
- "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
- "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
- "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
- "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
- "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
- "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
- "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
- "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
- "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
- "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
- "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
- "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
- "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
- "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
- "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
- "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
- "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
- "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
- "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
- "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
- "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
- "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
- "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
- "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
- "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
- "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
- "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
- "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
- "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
- "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
- "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
- "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
- "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
- "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
- "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
- "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
- "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
- "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
- "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
- "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
- "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
- "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
- "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
- "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
- "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
- "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
- "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
- "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
- "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
- "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
- "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
- "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
- "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
- "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
- "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
- "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
- "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
- "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
- "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
- "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
- "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
- "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
- "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
- "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
- "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
- "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
- "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
- "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
- "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
- "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
- "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
- "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
- "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
- "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
- "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
- "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
- "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
- "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
- "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
- "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
- "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
- "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
- "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
- "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
- "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
- "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
- "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
- "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
- "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
- "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
- "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
- "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
- "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
- "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
- "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
- "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
- "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
- "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
- "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
- "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
- "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
- "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
- "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
- "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
- "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
- "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
- "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
- "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
- "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
- "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
- "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
- "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
- "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
- "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
- "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
- "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
- "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
- "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
- "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
- "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
- "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
- "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
- "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
- "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
- "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
- "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
- "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
- "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
- "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
- "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
- "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
- "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
- "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
- "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
- "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
- "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
- "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
- "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
- "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
- "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
- "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
- "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
- "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
- "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
- "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
- "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
- "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
- "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
- "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
- "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
- "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
- "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
- "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
- "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
- "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
- "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
- "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
- "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
- "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
- "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
- "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
- "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
- "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
- "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
- "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
- "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
- "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
- "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
- "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
- "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
- "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
- "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
- "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
- "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
- "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
- "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
- "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
- "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
- "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
- "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
- "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
- "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
- "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
- "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
- "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
- "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
- "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
- "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
- "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
- "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
- "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
- "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
- "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
- "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
- "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
- "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
- "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
- "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
- "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
- "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
- "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
- "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
- "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
- "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
- "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
- "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
- "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
- "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
- "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
- "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
- "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
- "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
- "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
- "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
- "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
- "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
- "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
- "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
- "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
- "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
- "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
- "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
- "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
- "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
- "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
- "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
- "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
- "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
- "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
- "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
- "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
- "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
- "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
- "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
- "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
- "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
- "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
- "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
- "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
- "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
- "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
- "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
- "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
- "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
- "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
- "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
- "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
- "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
- "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
- "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
- "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
- "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
- "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
- "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
- "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
- "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
- "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
- "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
- "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
- "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
- "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
- "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
- "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
- "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
- "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
- "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
- "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
- "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
- "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
- "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
- "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
- "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
- "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
- "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
- "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
- "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
- "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
- "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
- "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
- "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
- "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
- "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
- "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
- "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
- "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
- "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
- "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
- "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
- "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
- "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
- "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
- "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
- "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
- "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
- "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
- "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
- "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
- "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
- "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
- "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
- "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
- "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
- "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
- "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
- "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
- "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
- "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
- "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
- "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
- "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
- "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
- "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
- "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
- "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
- "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
- "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
- "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
- "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
- "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
- "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
- "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
- "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
- "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
- "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
- "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
- "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
- "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
- "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
- "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
- "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
- "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
- "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
- "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
- "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
- "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
- "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
- "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
- "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
- "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
- "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
- "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
- "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
- "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
- "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
- "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
- "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
- "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
- "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
- "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
- "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
- "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
- "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
- "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
- "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
- "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
- "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
- "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
- "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
- "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
- "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
- "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
- "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
- "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
- "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
- "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
- "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
- "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
- "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
- "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
- "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
- "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
- "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
- "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
- "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
- "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
- "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
- "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
- "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
- "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
- "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
- "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
- "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
- "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
- "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
- "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
- "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
- "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
- "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
- "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
- "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
- "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
- "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
- "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
- "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
- "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
- "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
- "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
- "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
- "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
- "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
- "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
- "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
- "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
- "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
- "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
- "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
- "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
- "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
- "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
- "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
- "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
- "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
- "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
- "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
- "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
- "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
- "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
- "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
- "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
- "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
- "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
- "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
- "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
- "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
- "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
- "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
- "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
- "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
- "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
- "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
- "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
- "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
- "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
- "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
- "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
- "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
- "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
- "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
- "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
- "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
- "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
- "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
- "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
- "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
- "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
- "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
- "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
- "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
- "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
- "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
- "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
- "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
- "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
- "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
- "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
- "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
- "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
- "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
- "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
-
- private final static String innerIndex2=
- "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
- "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
- "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
- "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
- "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
- "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
- "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
- "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
- "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
- "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
- "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
- "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
- "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
- "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
- "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
- "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
- "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
- "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
- "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
- "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
- "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
- "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
- "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
- "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
- "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
- "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
- "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
- "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
- "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
- "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
- "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
- "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
- "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
- "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
- "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
- "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
- "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
- "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
- "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
- "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
- "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
- "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
- "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
- "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
- "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
- "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
- "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
- "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
- "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
- "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
- "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
- "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
- "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
- "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
- "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
- "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
- "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
- "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
- "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
- "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
- "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
- "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
- "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
- "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
- "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
- "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
- "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
- "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
- "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
- "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
- "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
- "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
- "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
- "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
- "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
- "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
- "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
- "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
- "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
- "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
- "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
- "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
- "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
- "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
- "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
- "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
- "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
- "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
- "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
- "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
- "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
- "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
- "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
- "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
- "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
- "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
- "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
- "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
- "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
- "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
- "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
- "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
- "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
- "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
- "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
- "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
- "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
- "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
- "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
- "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
- "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
- "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
- "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
- "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
- "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
- "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
- "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
- "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
- "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
- "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
- "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
- "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
- "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
- "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
- "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
- "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
- "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
- "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
- "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
- "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
- "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
- "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
- "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
- "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
- "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
- "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
- "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
- "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
- "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
- "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
- "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
- "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
- "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
- "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
- "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
- "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
- "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
- "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
- "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
- "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
- "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
- "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
- "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
- "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
- "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
- "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
- "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
- "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
- "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
- "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
- "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
- "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
- "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
- "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
- "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
- "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
- "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
- "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
- "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
- "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
- "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
- "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
- "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
- "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
- "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
- "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
- "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
- "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
- "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
- "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
- "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
- "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
- "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
- "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
- "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
- "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
- "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
- "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
- "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
- "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
- "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
- "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
- "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
- "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
- "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
- "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
- "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
- "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
- "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
- "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
- "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
- "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
- "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
- "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
- "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
- "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
- "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
- "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
- "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
- "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
- "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
- "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
- "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
- "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
- "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
- "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
- "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
- "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
- "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
- "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
- "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
- "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
- "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
- "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
- "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
- "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
- "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
- "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
- "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
- "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
- "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
- "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
- "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
- "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
- "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
- "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
- "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
- "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
- "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
- "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
- "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
- "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
- "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
- "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
- "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
- "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
- "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
- "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
- "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
- "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
- "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
- "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
- "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
- "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
- "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
- "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
- "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
- "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
- "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
- "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
- "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
- "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
- "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
- "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
- "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
- "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
- "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
- "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
- "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
- "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
- "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
- "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
- "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
- "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
- "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
- "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
- "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
- "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
- "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
- "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
- "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
- "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
- "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
- "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
- "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
- "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
- "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
- "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
- "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
- "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
- "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
- "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
- "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
- "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
- "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
- "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
- "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
- "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
- "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
- "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
- "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
- "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
- "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
- "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
- "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
- "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
- "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
- "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
- "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
- "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
- "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
- "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
- "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
- "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
- "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
- "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
- "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
- "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
- "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
- "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
- "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
- "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
- "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
- "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
- "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
- "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
- "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
- "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
- "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
- "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
- "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
- "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
- "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
- "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
- "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
- "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
- "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
- "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
- "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
- "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
- "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
- "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
- "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
- "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
- "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
- "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
- "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
- "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
- "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
- "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
- "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
- "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
- "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
- "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
- "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
- "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
- "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
- "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
- "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
- "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
- "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
- "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
- "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
- "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
- "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
- "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
- "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
- "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
- "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
- "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
- "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
- "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
- "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
- "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
- "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
- "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
- "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
- "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
- "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
- "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
- "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
- "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
- "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
- "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
- "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
- "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
- "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
- "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
- "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
- "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
- "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
- "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
- "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
- "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
- "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
- "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
- "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
- "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
- "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
- "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
- "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
- "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
- "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
- "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
- "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
- "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
- "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
- "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
- "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
- "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
- "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
- "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
- "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
- "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
- "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
- "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
- "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
- "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
- "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
- "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
- "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
- "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
- "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
- "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
- "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
- "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
- "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
- "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
- "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
- "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
- "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
- "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
- "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
- "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
- "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
- "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
- "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
- "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
- "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
- "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
- "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
- "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
- "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
- "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
- "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
- "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
- "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
- "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
- "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
- "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
- "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
- "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
- "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
- "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
- "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
- "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
- "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
- "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
- "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
- "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
- "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
- "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
- "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
- "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
- "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
- "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
- "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
- "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
- "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
- "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
- "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
- "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
- "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
- "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
- "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
- "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
- "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
- "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
- "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
- "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
- "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
- "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
- "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
- "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
-
- private final static String innerIndex3=
- "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
- "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
- "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
- "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
- "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
- "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
- "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
- "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
- "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
- "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
- "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
- "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
- "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
- "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
- "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
- "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
- "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
- "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
- "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
- "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
- "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
- "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
- "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
- "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
- "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
- "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
- "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
- "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
- "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
- "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
- "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
- "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
- "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
- "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
- "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
- "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
- "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
- "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
- "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
- "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
- "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
- "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
- "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
- "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
- "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
- "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
- "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
- "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
- "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
- "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
- "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
- "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
- "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
- "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
- "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
- "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
- "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
- "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
- "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
- "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
- "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
- "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
- "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
- "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
- "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
- "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
- "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
- "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
- "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
- "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
- "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
- "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
- "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
- "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
- "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
- "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
- "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
- "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
- "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
- "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
- "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
- "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
- "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
- "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
- "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
- "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
- "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
- "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
- "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
- "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
- "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
- "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
- "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
- "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
- "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
- "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
- "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
- "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
- "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
- "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
- "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
- "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
- "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
- "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
- "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
- "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
- "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
- "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
- "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
- "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
- "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
- "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
- "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
- "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
- "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
- "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
- "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
- "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
- "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
- "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
- "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
- "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
- "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
- "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
- "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
- "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
- "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
- "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
- "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
- "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
- "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
- "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
- "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
- "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
- "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
- "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
- "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
- "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
- "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
- "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
- "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
- "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
- "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
- "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
- "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
- "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
- "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
- "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
- "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
- "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
- "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
- "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
- "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
- "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
- "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
- "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
- "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
- "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
- "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
- "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
- "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
- "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
- "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
- "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
- "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
- "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
- "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
- "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
- "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
- "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
- "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
- "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
- "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
- "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
- "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
- "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
- "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
- "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
- "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
- "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
- "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
- "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
- "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
- "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
- "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
- "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
- "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
- "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
- "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
- "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
- "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
- "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
- "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
- "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
- "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
- "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
- "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
- "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
- "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
- "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
- "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
- "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
- "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
- "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
- "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
- "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
- "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
- "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
- "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
- "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
- "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
- "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
- "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
- "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
- "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
- "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
- "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
- "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
- "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
- "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
- "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
- "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
- "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
- "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
- "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
- "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
- "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
- "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
- "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
- "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
- "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
- "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
- "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
- "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
- "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
- "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
- "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
- "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
- "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
- "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
- "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
- "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
- "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
- "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
- "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
- "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
- "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
- "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
- "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
- "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
- "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
- "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
- "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
- "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
- "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
- "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
- "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
- "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
- "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
- "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
- "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
- "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
- "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
- "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
- "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
- "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
- "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
- "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
- "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
- "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
- "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
- "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
- "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
- "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
- "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
- "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
- "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
- "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
- "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
- "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
- "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
- "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
- "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
- "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
- "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
- "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
- "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
- "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
- "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
- "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
- "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
- "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
- "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
- "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
- "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
- "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
- "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
- "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
- "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
- "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
- "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
- "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
- "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
- "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
- "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
- "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
- "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
- "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
- "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
- "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
- "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
- "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
- "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
- "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
- "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
- "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
- "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
- "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
- "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
- "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
- "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
- "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
- "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
- "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
- "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
- "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
- "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
- "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
- "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
- "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
- "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
- "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
- "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
- "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
- "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
- "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
- "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
- "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
- "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
- "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
- "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
- "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
- "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
- "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
- "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
- "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
- "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
- "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
- "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
- "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
- "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
- "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
- "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
- "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
- "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
- "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
- "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
- "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
- "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
- "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
- "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
- "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
- "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
- "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
- "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
- "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
- "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
- "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
- "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
- "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
- "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
- "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
- "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
- "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
- "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
- "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
- "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
- "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
- "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
- "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
- "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
- "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
- "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
- "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
- "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
- "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
- "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
- "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
- "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
- "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
- "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
- "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
- "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
- "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
- "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
- "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
- "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
- "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
- "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
- "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
- "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
- "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
- "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
- "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
- "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
- "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
- "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
- "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
- "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
- "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
- "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
- "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
- "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
- "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
- "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
- "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
- "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
- "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
- "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
- "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
- "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
- "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
- "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
- "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
- "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
- "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
- "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
- "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
- "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
- "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
- "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
- "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
- "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
- "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
- "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
- "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
- "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
- "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
- "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
- "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
- "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
- "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
- "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
- "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
- "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
- "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
- "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
- "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
- "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
- "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
- "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
- "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
- "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
- "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
- "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
- "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
- "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
- "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
- "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
- "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
- "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
- "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
- "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
- "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
- "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
- "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
- "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
- "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
- "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
- "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
- "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
- "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
- "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
- "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
- "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
- "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
- "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
- "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
- "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
-
- private final static String innerIndex4=
- "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
- "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
- "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
- "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
- "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
- "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
- "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
- "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
- "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
- "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
- "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
- "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
- "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
- "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
- "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
- "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
- "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
- "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
- "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
- "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
- "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
- "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
- "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
- "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
- "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
- "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
- "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
- "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
- "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
- "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
- "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
- "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
- "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
- "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
- "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
- "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
- "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
- "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
- "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
- "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
- "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
- "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
- "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
- "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
- "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
- "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
- "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
- "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
- "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
- "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
- "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
- "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
- "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
- "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
- "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
- "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
- "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
- "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
- "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
- "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
- "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
- "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
- "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
- "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
- "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
- "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
- "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
- "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
- "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
- "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
- "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
- "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
- "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
- "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
- "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
- "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
- "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
- "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
- "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
- "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
- "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
- "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
- "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
- "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
- "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
- "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
- "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
- "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
- "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
- "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
- "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
- "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
- "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
- "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
- "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
- "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
- "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
- "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
- "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
- "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
- "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
- "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
- "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
- "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
- "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
- "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
- "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
- "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
- "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
- "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
- "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
- "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
- "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
- "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
- "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
- "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
- "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
- "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
- "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
- "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
- "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
- "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
- "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
- "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
- "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
- "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
- "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
- "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
- "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
- "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
- "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
- "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
- "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
- "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
- "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
- "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
- "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
- "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
- "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
- "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
- "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
- "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
- "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
- "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
- "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
- "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
- "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
- "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
- "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
- "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
- "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
- "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
- "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
- "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
- "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
- "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
- "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
- "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
- "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
- "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
- "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
- "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
- "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
- "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
- "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
- "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
- "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
- "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
- "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
- "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
- "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
- "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
- "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
- "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
- "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
- "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
- "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
- "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
- "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
- "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
- "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
- "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
- "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
- "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
- "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
- "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
- "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
- "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
- "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
- "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
- "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
- "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
- "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
- "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
- "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
- "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
- "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
- "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
- "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
- "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
- "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
- "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
- "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
- "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
- "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
- "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
- "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
- "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
- "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
- "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
- "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
- "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
- "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
- "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
- "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
- "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
- "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
- "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
- "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
- "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
- "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
- "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
- "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
- "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
- "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
- "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
- "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
- "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
- "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
- "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
- "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
- "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
- "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
- "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
- "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
- "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
- "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
- "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
- "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
- "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
- "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
- "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
- "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
- "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
- "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
- "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
- "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
- "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
- "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
- "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
- "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
- "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
- "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
- "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
- "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
- "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
- "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
- "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
- "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
- "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
- "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
- "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
- "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
- "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
- "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
- "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
- "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
- "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
- "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
- "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
- "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
- "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
- "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
- "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
- "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
- "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
- "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
- "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
- "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
- "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
- "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
- "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
- "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
- "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
- "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
- "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
- "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
- "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
- "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
- "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
- "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
- "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
- "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
- "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
- "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
- "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
- "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
- "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
- "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
- "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
- "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
- "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
- "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
- "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
- "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
- "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
- "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
- "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
- "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
- "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
- "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
- "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
- "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
- "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
- "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
- "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
- "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
- "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
- "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
- "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
- "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
- "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
- "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
- "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
- "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
- "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
- "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
- "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
- "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
- "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
- "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
- "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
- "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
- "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
- "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
- "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
- "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
- "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
- "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
- "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
- "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
- "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
- "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
- "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
- "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
- "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
- "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
- "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
- "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
- "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
- "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
- "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
- "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
- "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
- "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
- "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
- "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
- "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
- "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
- "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
- "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
- "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
- "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
- "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
- "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
- "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
- "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
- "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
- "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
- "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
- "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
- "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
- "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
- "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
- "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
- "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
- "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
- "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
- "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
- "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
- "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
- "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
- "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
- "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
- "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
- "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
- "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
- "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
- "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
- "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
- "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
- "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
- "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
- "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
- "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
- "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
- "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
- "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
- "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
- "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
- "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
- "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
- "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
- "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
- "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
- "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
- "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
- "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
- "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
- "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
- "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
- "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
- "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
- "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
- "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
- "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
- "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
- "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
- "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
- "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
- "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
- "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
- "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
- "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
- "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
- "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
- "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
- "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
- "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
- "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
- "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
- "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
- "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
- "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
- "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
- "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
- "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
- "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
- "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
- "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
- "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
- "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
- "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
- "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
- "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
- "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
- "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
- "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
- "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
- "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
- "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
- "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
- "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
- "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
- "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
- "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
- "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
- "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
- "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
- "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
- "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
- "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
- "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
- "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
- "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
- "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
- "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
- "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
- "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
- "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
- "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
- "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
- "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
- "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
- "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
- "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
- "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
- "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
- "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
- "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
- "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
- "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
- "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
- "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
- "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
- "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
- "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
- "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
- "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
- "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
-
- private final static String innerIndex5=
- "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
- "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
- "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
- "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
- "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
- "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
- "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
- "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
- "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
- "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
- "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
- "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
- "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
- "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
- "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
- "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
- "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
- "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
- "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
- "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
- "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
- "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
- "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
- "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
- "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
- "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
- "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
- "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
- "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
- "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
- "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
- "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
- "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
- "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
- "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
- "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
- "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
- "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
- "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
- "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
- "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
- "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
- "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
- "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
- "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
- "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
- "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
- "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
- "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
- "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
- "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
- "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
- "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
- "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
- "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
- "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
- "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
- "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
- "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
- "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
- "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
- "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
- "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
- "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
- "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
- "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
- "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
- "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
- "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
- "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
- "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
- "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
- "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
- "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
- "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
- "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
- "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
- "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
- "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
- "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
- "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
- "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
- "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
- "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
- "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
- "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
- "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
- "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
- "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
- "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
- "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
- "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
- "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
- "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
- "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
- "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
- "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
- "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
- "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
- "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
- "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
- "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
- "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
- "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
- "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
- "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
- "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
- "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
- "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
- "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
- "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
- "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
- "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
- "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
- "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
- "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
- "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
- "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
- "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
- "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
- "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
- "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
- "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
- "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
- "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
- "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
- "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
- "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
- "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
- "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
- "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
- "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
- "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
- "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
- "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
- "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
- "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
- "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
- "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
- "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
- "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
- "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
- "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
- "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
- "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
- "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
- "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
- "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
- "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
- "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
- "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
- "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
- "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
- "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
- "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
- "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
- "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
- "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
- "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
- "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
- "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
- "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
- "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
- "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
- "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
- "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
- "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
- "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
- "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
- "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
- "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
- "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
- "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
- "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
- "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
- "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
- "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
- "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
- "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
- "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
- "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
- "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
- "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
- "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
- "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
- "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
- "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
- "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
- "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
- "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
- "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
- "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
- "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
- "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
- "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
- "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
- "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
- "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
- "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
- "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
- "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
- "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
- "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
- "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
- "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
- "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
- "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
- "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
- "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
- "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
- "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
- "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
- "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
- "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
- "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
- "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
- "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
- "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
- "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
- "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
- "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
- "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
- "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
- "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
- "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
- "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
- "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
- "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
- "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
- "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
- "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
- "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
- "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
- "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
- "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
- "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
- "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
- "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
- "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
- "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
- "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
- "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
- "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
- "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
- "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
- "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
- "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
- "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
- "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
- "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
- "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
- "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
- "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
- "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
- "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
- "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
- "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
- "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
- "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
- "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
- "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
- "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
- "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
- "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
- "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
- "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
- "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
- "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
- "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
- "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
- "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
- "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
- "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
- "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
- "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
- "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
- "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
- "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
- "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
- "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
- "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
- "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
- "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
- "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
- "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
- "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
- "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
- "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
- "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
- "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
- "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
- "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
- "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
- "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
- "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
- "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
- "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
- "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
- "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
- "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
- "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
- "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
- "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
- "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
- "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
- "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
- "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
- "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
- "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
- "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
- "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
- "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
- "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
- "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
- "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
- "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
- "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
- "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
- "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
- "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
- "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
- "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
- "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
- "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
- "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
- "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
- "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
- "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
- "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
- "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
- "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
- "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
- "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
- "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
- "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
- "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
- "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
- "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
- "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
- "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
- "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
- "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
- "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
- "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
- "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
- "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
- "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
- "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
- "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
- "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
- "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
- "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
- "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
- "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
- "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
- "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
- "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
- "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
- "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
- "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
- "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
- "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
- "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
- "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
- "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
- "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
- "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
- "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
- "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
- "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
- "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
- "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
- "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
- "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
- "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
- "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
- "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
- "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
- "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
- "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
- "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
- "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
- "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
- "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
- "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
- "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
- "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
- "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
- "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
- "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
- "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
- "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
- "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
- "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
- "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
- "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
- "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
- "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
- "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
- "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
- "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
- "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
- "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
- "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
- "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
- "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
- "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
- "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
- "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
- "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
- "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
- "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
- "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
- "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
- "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
- "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
- "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
- "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
- "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
- "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
- "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
- "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
- "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
- "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
- "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
- "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
- "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
- "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
- "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
- "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
- "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
- "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
- "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
- "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
- "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
- "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
- "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
- "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
- "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
- "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
- "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
- "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
- "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
- "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
- "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
- "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
- "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
- "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
- "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
- "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
- "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
- "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
- "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
- "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
- "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
- "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
- "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
- "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
- "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
- "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
- "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
- "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
- "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
- "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
- "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
- "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
- "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
- "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
- "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
- "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
- "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
- "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
- "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
- "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
- "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
- "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
- "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
- "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
- "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
- "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
- "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
- "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
- "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
- "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
- "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
- "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
- "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
- "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
- "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
- "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
- "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
- "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
- "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
- "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
- "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
- "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
- "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
- "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
- "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
- "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
- "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
- "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
- "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
- "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
- "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
- "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
- "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
- "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
- "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
- "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
- "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
- "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
-
- private final static String innerIndex6=
- "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
- "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
- "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
- "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
- "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
- "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
- "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
- "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
- "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
- "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
- "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
- "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
- "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
- "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
- "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
- "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
- "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
- "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
- "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
- "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
- "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
- "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
- "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
- "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
- "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
- "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
- "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
- "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
- "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
- "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
- "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
- "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
- "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
- "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
- "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
- "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
- "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
- "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
- "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
- "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
- "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
- "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
- "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
- "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
- "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
- "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
- "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
- "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
- "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
- "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
- "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
- "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
- "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
- "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
- "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
- "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
- "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
- "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
- "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
- "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
- "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
- "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
- "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
- "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
- "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
- "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
- "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
- "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
- "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
- "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
- "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
- "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
- "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
- "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
- "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
- "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
- "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
- "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
- "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
- "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
- "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
- "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
- "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
- "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
- "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
- "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
- "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
- "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
- "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
- "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
- "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
- "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
- "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
- "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
- "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
- "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
- "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
- "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
- "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
- "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
- "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
- "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
- "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
- "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
- "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
- "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
- "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
- "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
- "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
- "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
- "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
- "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
- "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
- "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
- "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
- "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
- "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
- "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
- "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
- "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
- "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
- "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
- "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
- "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
- "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
- "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
- "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
- "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
- "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
- "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
- "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
- "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
- "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
- "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
- "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
- "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
- "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
- "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
- "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
- "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
- "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
- "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
- "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
- "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
- "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
- "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
- "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
- "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
- "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
- "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
- "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
- "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
- "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
- "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
- "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
- "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
- "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
- "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
- "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
- "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
- "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
- "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
- "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
- "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
- "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
- "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
- "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
- "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
- "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
- "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
- "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
- "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
- "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
- "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
- "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
- "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
- "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
- "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
- "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
- "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
- "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
- "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
- "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
- "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
- "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
- "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
- "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
- "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
- "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
- "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
- "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
- "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
- "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
- "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
- "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
- "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
- "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
- "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
- "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
- "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
- "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
- "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
- "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
- "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
- "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
- "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
- "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
- "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
- "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
- "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
- "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
- "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
- "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
- "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
- "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
- "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
- "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
- "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
- "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
- "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
- "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
- "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
- "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
- "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
- "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
- "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
- "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
- "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
- "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
- "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
- "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
- "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
- "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
- "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
- "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
- "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
- "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
- "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
- "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
- "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
- "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
- "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
- "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
- "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
- "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
- "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
- "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
- "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
- "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
- "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
- "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
- "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
- "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
- "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
- "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
- "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
- "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
- "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
- "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
- "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
- "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
- "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
- "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
- "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
- "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
- "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
- "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
- "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
- "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
- "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
- "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
- "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
- "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
- "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
- "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
- "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
- "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
- "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
- "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
- "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
- "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
- "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
- "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
- "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
- "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
- "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
- "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
- "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
- "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
- "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
- "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
- "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
- "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
- "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
- "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
- "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
- "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
- "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
- "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
- "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
- "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
- "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
- "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
- "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
- "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
- "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
- "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
- "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
- "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
- "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
- "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
- "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
- "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
- "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
- "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
- "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
- "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
- "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
- "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
- "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
- "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
- "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
- "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
- "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
- "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
- "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
- "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
- "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
- "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
- "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
- "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
- "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
- "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
- "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
- "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
- "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
- "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
- "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
- "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
- "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
- "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
- "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
- "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
- "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
- "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
- "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
- "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
- "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
- "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
- "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
- "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
- "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
- "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
- "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
- "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
- "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
- "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
- "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
- "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
- "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
- "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
- "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
- "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
- "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
- "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
- "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
- "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
- "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
- "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
- "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
- "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
- "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
- "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
- "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
- "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
- "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
- "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
- "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
- "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
- "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
- "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
- "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
- "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
- "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
- "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
- "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
- "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
- "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
- "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
- "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
- "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
- "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
- "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
- "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
- "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
- "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
- "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
- "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
- "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
- "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
- "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
- "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
- "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
- "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
- "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
- "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
- "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
- "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
- "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
- "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
- "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
- "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
- "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
- "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
- "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
- "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
- "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
- "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
- "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
- "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
- "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
- "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
- "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
- "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
- "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
- "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
- "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
- "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
- "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
- "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
- "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
- "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
- "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
- "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
- "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
- "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
- "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
- "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
- "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
- "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
- "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
- "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
- "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
- "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
- "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
- "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
- "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
- "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
- "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
- "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
- "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
- "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
- "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
- "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
- "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
- "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
- "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
- "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
- "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
- "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
- "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
- "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
- "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
- "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
- "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
- "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
- "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
- "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
- "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
- "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
- "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
- "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
- "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
- "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
- "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
- "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
- "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
- "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
- "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
- "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
- "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
- "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
- "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
- "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
- "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
- "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
- "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
- "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
- "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
- "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
- "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
- "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
- "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
- "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
- "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
- "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
- "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
- "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
- "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
- "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
- "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
- "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
- "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
- "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
- "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
- "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
- "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
- "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
- "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
- "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
- "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
- "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
-
- private final static String innerIndex7=
- "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
- "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
- "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
- "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
- "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
- "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
- "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
- "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
- "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
- "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
- "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
- "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
- "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
- "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
- "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
- "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
- "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
- "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
- "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
- "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
- "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
- "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
- "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
- "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
- "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
- "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
- "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
- "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
- "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
- "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
- "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
- "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
- "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
- "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
- "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
- "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
- "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
- "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
- "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
- "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
- "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
- "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
- "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
- "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
- "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
- "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
- "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
- "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
- "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
- "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
- "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
- "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
- "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
- "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
- "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
- "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
- "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
- "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
- "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
- "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
- "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
- "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
- "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
- "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
- "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
- "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
- "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
- "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
- "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
- "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
- "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
- "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
- "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
- "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
- "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
- "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
- "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
- "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
- "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
- "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
- "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
- "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
- "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
- "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
- "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
- "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
- "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
- "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
- "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
- "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
- "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
- "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
- "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
- "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
- "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
- "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
- "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
- "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
- "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
- "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
- "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
- "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
- "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
- "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
- "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
- "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
- "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
- "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
- "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
- "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
- "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
- "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
- "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
- "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
- "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
- "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
- "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
- "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
- "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
- "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
- "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
- "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
- "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
- "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
- "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
- "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
- "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
- "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
- "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
- "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
- "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
- "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
- "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
- "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
- "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
- "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
- "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
- "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
- "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
- "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
- "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
- "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
- "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
- "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
- "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
- "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
- "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
- "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
- "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
- "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
- "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
- "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
- "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
- "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
- "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
- "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
- "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
- "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
- "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
- "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
- "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
- "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
- "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
- "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
- "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
- "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
- "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
- "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
- "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
- "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
- "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
- "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
- "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
- "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
- "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
- "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
- "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
- "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
- "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
- "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
- "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
- "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
- "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
- "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
- "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
- "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
- "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
- "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
- "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
- "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
- "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
- "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
- "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
- "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
- "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
- "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
- "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
- "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
- "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
- "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
- "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
- "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
- "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
- "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
- "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
- "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
- "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
- "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
- "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
- "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
- "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
- "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
- "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
- "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
- "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
- "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
- "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
- "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
- "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
- "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
- "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
- "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
- "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
- "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
- "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
- "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
- "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
- "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
- "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
- "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
- "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
- "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
- "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
- "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
- "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
- "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
- "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
- "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
- "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
- "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
- "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
- "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
- "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
- "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
- "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
- "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
- "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
- "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
- "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
- "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
- "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
- "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
- "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
- "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
- "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
- "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
- "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
- "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
- "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
- "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
- "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
- "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
- "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
- "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
- "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
- "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
- "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
- "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
- "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
- "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
- "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
- "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
- "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
- "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
- "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
- "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
- "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
- "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
- "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
- "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
- "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
- "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
- "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
- "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
- "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
- "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
- "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
- "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
- "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
- "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
- "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
- "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
- "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
- "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
- "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
- "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
- "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
- "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
- "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
- "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
- "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
- "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
- "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
- "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
- "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
- "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
- "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
- "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
- "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
- "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
- "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
- "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
- "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
- "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
- "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
- "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
- "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
- "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
- "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
- "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
- "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
- "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
- "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
- "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
- "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
- "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
- "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
- "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
- "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
- "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
- "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
- "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
- "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
- "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
- "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
- "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
- "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
- "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
- "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
- "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
- "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
- "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
- "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
- "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
- "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
- "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
- "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
- "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
- "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
- "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
- "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
- "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
- "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
- "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
- "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
- "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
- "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
- "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
- "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
- "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
- "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
- "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
- "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
- "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
- "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
- "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
- "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
- "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
- "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
- "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
- "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
- "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
- "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
- "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
- "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
- "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
- "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
- "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
- "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
- "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
- "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
- "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
- "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
- "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
- "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
- "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
- "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
- "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
- "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
- "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
- "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
- "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
- "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
- "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
- "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
- "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
- "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
- "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
- "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
- "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
- "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
- "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
- "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
- "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
- "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
- "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
- "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
- "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
- "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
- "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
- "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
- "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
- "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
- "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
- "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
- "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
- "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
- "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
- "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
- "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
- "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
- "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
- "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
- "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
- "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
- "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
- "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
- "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
- "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
- "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
- "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
- "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
- "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
- "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
- "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
- "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
- "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
- "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
- "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
- "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
- "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
- "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
- "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
- "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
- "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
- "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
- "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
- "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
- "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
- "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
- "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
- "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
- "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
- "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
- "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
- "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
- "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
- "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
- "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
- "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
- "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
- "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
- "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
- "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
- "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
- "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
- "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
- "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
- "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
- "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
- "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
- "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
- "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
- "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
- "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
- "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
- "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
- "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
- "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
- "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
- "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
- "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
- "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
- "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
- "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
- "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
- "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
- "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
- "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
- "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
- "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
- "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
- "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
- "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
- "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
- "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
- "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
- "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
- "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
- "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
- "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
- "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
- "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
- "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
- "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
- "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
- "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
- "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
- "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
- "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
- "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
- "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
-
- private final static String innerIndex8=
- "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
- "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
- "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
- "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
- "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
- "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
- "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
- "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
- "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
- "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
- "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
- "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
- "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
- "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
- "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
- "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
- "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
- "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
- "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
- "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
- "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
- "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
- "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
- "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
- "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
- "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
- "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
- "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
- "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
- "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
- "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
- "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
- "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
- "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
- "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
- "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
- "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
- "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
- "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
- "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
- "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
- "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
- "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
- "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
- "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
- "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
- "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
- "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
- "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
- "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
- "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
- "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
- "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
- "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
- "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
- "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
- "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
- "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
- "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
- "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
- "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
- "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
- "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
- "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
- "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
- "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
- "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
- "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
- "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
- "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
- "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
- "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
- "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
- "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
- "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
- "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
- "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
- "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
- "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
- "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
- "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
- "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
- "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
- "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
- "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
- "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
- "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
- "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
- "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
- "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
- "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
- "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
- "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
- "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
- "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
- "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
- "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
- "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
- "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
- "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
- "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
- "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
- "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
- "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
- "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
- "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
- "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
- "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
- "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
- "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
- "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
- "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
- "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
- "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
- "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
- "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
- "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
- "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
- "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
- "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
- "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
- "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
- "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
- "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
- "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
- "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
- "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
- "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
- "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
- "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
- "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
- "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
- "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
- "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
- "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
- "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
- "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
- "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
- "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
- "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
- "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
- "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
- "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
- "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
- "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
- "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
- "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
- "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
- "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
- "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
- "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
- "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
- "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
- "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
- "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
- "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
- "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
- "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
- "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
- "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
- "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
- "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
- "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
- "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
- "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
- "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
- "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
- "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
- "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
- "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
- "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
- "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
- "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
- "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
- "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
- "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
- "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
- "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
- "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
- "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
- "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
- "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
- "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
- "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
- "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
- "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
- "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
- "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
- "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
- "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
- "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
- "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
- "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
- "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
- "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
- "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
- "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
- "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
- "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
- "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
- "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
- "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
- "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
- "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
- "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
- "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
- "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
- "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
- "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
- "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
- "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
- "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
- "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
- "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
- "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
- "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
- "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
- "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
- "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
- "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
- "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
- "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
- "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
- "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
- "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
- "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
- "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
- "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
- "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
- "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
- "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
- "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
- "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
- "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
- "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
- "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
- "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
- "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
- "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
- "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
- "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
- "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
- "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
- "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
- "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
- "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
- "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
- "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
- "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
- "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
- "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
- "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
- "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
- "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
- "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
- "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
- "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
- "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
- "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
- "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
- "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
- "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
- "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
- "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
- "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
- "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
- "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
- "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
- "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
- "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
- "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
- "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
- "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
- "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
- "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
- "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
- "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
- "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
- "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
- "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
- "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
- "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
- "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
- "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
- "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
- "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
- "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
- "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
- "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
- "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
- "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
- "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
- "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
- "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
- "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
- "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
- "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
- "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
- "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
- "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
- "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
- "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
- "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
- "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
- "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
- "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
- "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
- "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
- "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
- "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
- "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
- "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
- "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
- "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
- "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
- "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
- "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
- "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
- "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
- "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
- "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
- "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
- "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
- "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
- "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
- "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
- "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
- "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
- "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
- "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
- "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
- "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
- "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
- "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
- "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
- "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
- "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
- "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
- "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
- "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
- "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
- "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
- "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
- "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
- "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
- "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
- "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
- "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
- "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
- "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
- "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
- "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
- "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
- "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
- "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
- "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
- "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
- "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
- "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
- "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
- "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
- "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
- "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
- "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
- "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
- "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
- "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
- "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
- "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
- "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
- "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
- "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
- "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
- "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
- "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
- "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
- "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
- "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
- "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
- "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
- "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
- "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
- "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
- "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
- "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
- "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
- "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
- "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
- "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
- "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
- "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
- "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
- "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
- "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
- "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
- "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
- "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
- "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
- "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
- "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
- "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
- "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
- "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
- "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
- "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
- "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
- "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
- "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
- "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
- "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
- "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
- "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
- "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
- "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
- "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
- "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
- "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
- "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
- "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
- "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
- "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
- "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
- "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
- "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
- "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
- "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
- "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
- "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
- "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
- "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
- "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
- "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
- "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
- "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
- "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
- "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
- "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
- "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
- "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
- "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
- "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
- "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
- "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
- "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
- "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
- "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
- "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
- "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
- "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
- "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
- "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
- "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
- "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
- "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
- "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
- "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
- "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
- "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
- "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
- "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
- "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
- "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
- "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
- "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
- "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
- "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
- "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
- "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
- "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
- "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
- "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
- "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
- "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
- "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
- "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
- "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
- "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
- "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
- "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
-
- private final static String innerIndex9=
- "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
- "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
- "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
- "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
- "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
- "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
- "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
- "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
- "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
- "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
- "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
- "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
- "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
- "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
- "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
- "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
- "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
- "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
- "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
- "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
- "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
- "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
- "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
- "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
- "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
- "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
- "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
- "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
- "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
- "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
- "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
- "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
- "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
- "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
- "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
- "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
- "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
- "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
- "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
- "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
- "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
- "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
- "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
- "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
- "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
- "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
- "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
- "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
- "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
- "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
- "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
- "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
- "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
- "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
- "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
- "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
- "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
- "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
- "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
- "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
- "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
- "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
- "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
- "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
- "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
- "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
- "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
- "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
- "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
- "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
- "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
- "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
- "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
- "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
- "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
- "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
- "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
- "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
- "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
- "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
- "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
- "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
- "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
- "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
- "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
- "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
- "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
- "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
- "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
- "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
- "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
- "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
- "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
- "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
- "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
- "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
- "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
- "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
- "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
- "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
- "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
- "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
- "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
- "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
- "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
- "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
- "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
- "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
- "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
- "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
- "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
- "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
- "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
- "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
- "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
- "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
- "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
- "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
- "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
- "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
- "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
- "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
- "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
- "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
- "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
- "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
- "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
- "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
- "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
- "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
- "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
- "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
- "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
- "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
- "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
- "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
- "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
- "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
- "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
- "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
- "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
- "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
- "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
- "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
- "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
- "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
- "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
- "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
- "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
- "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
- "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
- "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
- "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
- "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
- "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
- "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
- "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
- "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
- "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
- "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
- "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
- "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
- "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
- "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
- "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
- "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
- "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
- "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
- "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
- "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
- "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
- "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
- "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
- "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
- "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
- "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
- "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
- "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
- "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
- "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
- "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
- "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
- "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
- "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
- "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
- "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
- "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
- "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
- "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
- "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
- "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
- "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
- "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
- "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
- "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
- "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
- "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
- "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
- "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
- "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
- "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
- "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
- "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
- "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
- "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
- "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
- "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
- "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
- "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
- "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
- "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
- "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
- "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
- "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
- "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
- "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
- "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
- "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
- "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
- "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
- "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
- "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
- "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
- "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
- "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
- "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
- "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
- "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
- "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
- "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
- "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
- "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
- "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
- "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
- "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
- "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
- "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
- "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
- "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
- "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
- "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
- "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
- "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
- "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
- "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
- "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
- "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
- "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
- "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
- "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
- "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
- "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
- "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
- "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
- "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
- "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
- "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
- "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
- "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
- "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
- "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
- "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
- "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
- "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
- "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
- "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
- "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
- "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
- "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
- "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
- "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
- "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
- "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
- "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
- "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
- "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
- "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
- "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
- "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
- "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
- "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
- "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
- "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
- "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
- "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
- "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
- "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
- "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
- "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
- "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
- "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
- "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
- "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
- "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
- "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
- "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
- "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
- "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
- "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
- "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
- "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
- "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
- "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
- "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
- "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
- "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
- "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
- "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
- "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
- "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
- "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
- "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
- "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
- "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
- "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
- "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
- "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
- "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
- "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
- "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
- "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
- "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
- "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
- "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
- "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
- "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
- "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
- "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
- "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
- "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
- "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
- "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
- "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
- "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
- "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
- "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
- "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
- "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
- "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
- "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
- "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
- "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
- "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
- "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
- "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
- "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
- "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
- "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
- "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
- "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
- "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
- "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
- "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
- "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
- "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
- "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
- "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
- "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
- "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
- "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
- "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
- "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
- "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
- "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
- "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
- "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
- "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
- "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
- "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
- "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
- "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
- "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
- "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
- "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
- "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
- "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
- "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
- "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
- "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
- "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
- "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
- "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
- "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
- "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
- "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
- "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
- "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
- "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
- "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
- "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
- "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
- "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
- "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
- "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
- "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
- "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
- "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
- "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
- "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
- "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
- "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
- "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
- "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
- "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
- "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
- "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
- "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
- "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
- "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
- "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
- "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
- "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
- "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
- "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
- "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
- "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
- "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
- "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
- "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
- "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
- "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
- "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
- "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
- "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
- "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
- "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
- "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
- "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
- "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
- "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
- "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
- "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
- "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
- "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
- "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
- "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
- "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
- "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
- "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
- "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
- "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
- "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
- "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
- "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
- "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
- "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
- "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
- "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
- "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
- "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
- "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
- "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
- "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
- "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
- "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
- "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
- "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
- "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
- "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
- "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
- "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
- "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
- "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
- "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
- "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
- "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
- "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
- "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
- "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
- "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
- "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
- "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
- "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
- "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
- "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
- "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
- "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
- "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
- "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
- "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
- "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
- "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
- "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
- "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
- "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
- "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
- "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
- "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
- "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
- "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
- "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
- "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
- "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
- "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
- "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
- "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
- "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
- "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
- "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
- "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
- "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
- "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
- "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
- "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
- "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
- "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
- "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
- "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
-
- private final static String innerIndex10=
- "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
- "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
- "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
- "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
- "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
- "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
- "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
- "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
- "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
- "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
- "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
- "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
- "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
- "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
- "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
- "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
- "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
- "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
- "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
- "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
-
- private final static short index1[] = {
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
- };
-
- private final static String index2[] = {
- innerIndex0,
- innerIndex1,
- innerIndex2,
- innerIndex3,
- innerIndex4,
- innerIndex5,
- innerIndex6,
- innerIndex7,
- innerIndex8,
- innerIndex9,
- innerIndex10
- };
-
- /* The default implementation creates a decoder and we don't have one */
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB2312.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GB2312 extends Charset {
- public X11GB2312 () {
- super("X11GB2312", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GB2312;
- }
-
- private class Encoder extends CharsetEncoder {
- private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
-
- public Encoder(Charset cs) {
- super(cs, 2.0f, 2.0f);
- }
-
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- return enc.canEncode(c);
- }
-
- protected int encodeDouble(char c) {
- return enc.encodeChar(c);
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
-
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (c <= '\u007f')
- return CoderResult.unmappableForLength(1);
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000' ) {
- da[dp++] = (byte) ((ncode >> 8) & 0x7f);
- da[dp++] = (byte) (ncode & 0x7f);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-
- private class Decoder extends CharsetDecoder {
- private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
-
- public Decoder(Charset cs) {
- super(cs, 0.5f, 1.0f);
- }
-
- protected char decodeDouble(int b1, int b2) {
- return dec.decodeDouble(b1, b2);
- }
-
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- int b1 = sa[sp] & 0xFF | 0x80;
- int b2 = sa[sp + 1] & 0xFF | 0x80;
- char c = decodeDouble(b1, b2);
- if (c == UNMAPPABLE_DECODING) {
- return CoderResult.unmappableForLength(2);
- }
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = c;
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
-
- }
- }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GBK.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GBK extends Charset {
- public X11GBK () {
- super("X11GBK", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new GBK().newDecoder();
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GBK;
- }
-
- private class Encoder extends DoubleByte.Encoder {
-
- private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
-
- Encoder(Charset cs) {
- super(cs, (char[])null, (char[])null);
- }
-
- public boolean canEncode(char ch){
- if (ch < 0x80) return false;
- return enc.canEncode(ch);
- }
-
- public int encodeChar(char ch) {
- if (ch < 0x80)
- return UNMAPPABLE_ENCODING;
- return enc.encodeChar(ch);
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0201.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11JIS0201 extends Charset {
-
- private static Charset jis0201 = new JIS_X_0201();
- private static SingleByte.Encoder enc =
- (SingleByte.Encoder)jis0201.newEncoder();
-
- public X11JIS0201 () {
- super("X11JIS0201", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- public CharsetDecoder newDecoder() {
- return jis0201.newDecoder();
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11JIS0201;
- }
-
- private class Encoder extends CharsetEncoder {
-
- public Encoder(Charset cs) {
- super(cs, 1.0f, 1.0f);
- }
-
- public boolean canEncode(char c){
- if ((c >= 0xff61 && c <= 0xff9f)
- || c == 0x203e
- || c == 0xa5) {
- return true;
- }
- return false;
- }
-
- private Surrogate.Parser sgp;
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
-
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- CoderResult cr = CoderResult.UNDERFLOW;
- if ((dl - dp) < (sl - sp)) {
- sl = sp + (dl - dp);
- cr = CoderResult.OVERFLOW;
- }
- try {
- while (sp < sl) {
- char c = sa[sp];
- int b = enc.encode(c);
- if (b == UNMAPPABLE_ENCODING) {
- if (Character.isSurrogate(c)) {
- if (sgp == null)
- sgp = new Surrogate.Parser();
- if (sgp.parse(c, sa, sp, sl) >= 0)
- return CoderResult.unmappableForLength(2);
- }
- return CoderResult.unmappableForLength(1);
- }
- da[dp++] = (byte)b;
- sp++;
- }
- return cr;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0208.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0208 extends Charset {
-
- private static Charset jis0208 = new JIS_X_0208();
-
- public X11JIS0208 () {
- super("X11JIS0208", null);
- }
-
- public CharsetEncoder newEncoder() {
- return jis0208.newEncoder();
- }
-
- public CharsetDecoder newDecoder() {
- return jis0208.newDecoder();
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11JIS0208;
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0212.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0212 extends Charset {
- private static Charset jis0212 = new JIS_X_0212();
-
- public X11JIS0212 () {
- super("X11JIS0212", null);
- }
- public CharsetEncoder newEncoder() {
- return jis0212.newEncoder();
- }
- public CharsetDecoder newDecoder() {
- return jis0212.newDecoder();
- }
- public boolean contains(Charset cs) {
- return cs instanceof X11JIS0212;
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Johab.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4783 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11Johab extends Charset {
- public X11Johab () {
- super("X11Johab", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- public CharsetDecoder newDecoder() {
- throw new Error("Decoder is not supported by X11Johab Charset");
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GB18030_1;
- }
-
- private static class Encoder extends DoubleByteEncoder {
- public Encoder(Charset cs) {
- super(cs, index1, index2);
- }
-
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
-
- private final static String innerIndex0=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
- "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
- "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
- "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
- "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
- "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
- "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
- "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
- "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
- "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
- "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
- "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
- "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
- "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
- "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
- "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
- "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
- "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
- "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
- "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
- "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
- "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
- "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
- "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
- "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
- "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
- "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
- "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
- "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
- "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
- "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
- "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
- "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
- "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
- "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
- "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
- "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
- "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
- "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
- "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
- "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
- "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
- "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
- "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
- "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
- "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
- "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
- "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
- "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
- "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
- "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
- "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
- "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
- "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
- "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
- "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
- "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
- "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
- "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
- "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
- "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
- "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
- "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
- "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
- "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
- "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
- "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
- "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
- "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
- "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
- "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
- "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
- "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
- "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
- "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
- "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
- "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
- "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
- "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
- "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
- "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
- "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
- "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
- "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
- "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
- "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
- "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
- "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
- "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
- "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
- "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
- "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
- "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
- "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
- "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
- "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
- "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
- "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
- "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
- "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex1=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
- "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
- "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
- "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
- "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
- "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
- "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
- "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
- "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
- "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
- "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
- "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
- "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
- "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
- "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
- "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
- "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
- "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
- "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
- "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
- "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
- "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
- "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
- "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
- "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
- "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
- "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
- "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
- "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
- "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
- "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
- "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
- "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
- "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
- "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
- "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
- "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
- "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
- "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
- "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
- "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
- "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
- "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
- "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
- "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
- "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
- "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
- "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
- "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
- "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
- "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
- "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
- "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
- "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
- "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
- "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
- "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
- "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
- "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
- "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
- "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
- "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
- "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
- "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
- "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
- "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
- "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
- "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
- "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
- "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
- "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
- "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
- "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
- "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
- "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
- "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
- "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
- "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
- "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
- "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
- "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
- "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
- "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
- "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
- "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
- "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
- "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
- "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
- "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
- "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
- "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
- "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
- "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
- "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
- "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
- "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
- "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
- "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
- "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
- "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
- "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
- "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
- "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
- "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
- "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
- "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
- "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
- "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
- "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
- "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
- "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
- "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
- "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
- "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
- "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
- "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
- "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
- "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
- "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
- "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
- "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
- "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
- "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
- "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
- "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
- "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
- "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
- "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
- "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
- "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
- "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
- "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
- "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
- "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
- "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
- "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
- "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
- "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
- "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
- "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
- "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
- "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
- "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
- "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
- "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
- "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
- "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
- "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
- "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
- "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
- "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
- "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
- "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
- "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
- "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
- "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
- "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
- "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
- "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
- "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
- "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
- "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
- "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
- "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
- "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
- "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
- "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
- "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
- "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
- "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
- "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
- "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
- "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
- "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
- "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
- "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
- "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
- "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
- "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
- "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
- "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
- "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
- "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
- "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
- "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
- "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
- "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
- "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
- "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
- "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
- "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
- "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
- "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
- "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
- "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
- "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
- "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
- "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
- "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
- "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
- "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
- "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
- "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
- "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
- "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
- "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
- "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
- "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
- "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
- "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
- "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
- "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
- "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
- "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
- "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
- "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
- "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
- "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
- "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
- "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
- "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
- "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
- "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
- "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
- "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
- "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
- "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
- "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
- "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
- "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
- "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
- "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
- "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
- "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
- "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
- "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
- "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
- "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
- "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
- "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
- "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
- "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
- "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
- "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
- "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
- "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
- "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
- "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
- "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
- "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
- "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
- "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
- "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
- "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
- "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
- "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
- "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
- "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
- "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
-
- private final static String innerIndex2=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
- "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
- "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
- "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
- "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
- "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
- "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
- "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
- "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
- "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
- "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
- "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
- "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
- "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
- "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
- "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
- "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
- "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
- "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
- "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
- "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
- "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
- "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
- "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
- "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
- "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
- "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
- "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
- "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
- "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
- "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
- "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
- "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
- "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
- "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
- "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
- "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
- "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
- "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
- "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
- "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
- "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
- "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
- "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
- "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
- "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
- "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
- "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
- "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
- "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
- "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
- "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
- "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
- "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
- "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
- "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
- "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
- "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
- "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
- "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
- "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
- "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
- "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
- "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
- "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
- "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
- "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
- "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
- "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
- "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
- "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
- "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
- "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
- "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
- "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
- "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
- "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
- "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
- "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
- "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
- "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
- "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
- "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
- "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
- "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
- "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
- "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
- "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
- "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
- "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
- "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
- "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
- "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
- "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
- "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
- "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
- "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
- "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
- "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
- "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
- "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
- "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
- "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
- "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
- "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
- "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
- "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
- "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
- "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
- "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
- "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
- "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
- "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
- "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
- "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
- "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
- "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
- "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
- "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
- "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
- "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
- "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
- "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
- "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
- "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
- "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
- "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
- "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
- "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
- "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
- "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
- "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
- "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
- "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
- "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
- "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
- "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
- "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
- "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
- "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
- "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
- "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
- "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
- "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
- "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
- "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
- "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
- "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
- "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
- "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
- "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
- "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
- "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
- "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
- "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
- "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
- "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
- "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
- "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
- "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
- "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
- "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
- "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
- "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
- "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
- "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
- "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
- "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
- "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
- "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
- "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
- "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
- "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
- "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
- "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
- "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
- "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
- "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
- "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
- "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
- "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
- "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
- "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
- "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
- "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
- "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
- "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
- "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
- "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
- "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
- "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
- "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
- "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
- "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
- "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
- "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
- "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
- "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
- "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
- "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
- "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
- "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
- "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
- "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
- "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
- "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
- "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
- "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
- "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
- "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
- "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
- "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
- "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
- "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
- "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
- "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
- "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
- "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
- "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
- "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
- "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
- "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
- "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
- "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
- "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
- "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
- "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
- "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
- "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
- "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
- "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
- "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
- "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
- "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
- "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
- "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
- "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
- "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
- "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
- "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
- "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
- "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
- "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
- "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
- "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
- "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
- "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
- "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
- "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
- "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
- "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
- "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
- "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
- "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
- "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
- "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
- "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
- "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
- "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
- "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
- "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
- "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
- "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
- "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
- "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
- "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
- "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
- "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
- "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
- "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
- "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
- "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
- "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
- "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
- "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
- "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
- "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
- "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
- "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
- "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
- "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
- "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
- "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex3=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
- "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
- "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
- "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
- "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
- "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
- "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
- "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
- "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
- "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
- "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
- "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
- "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
- "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
- "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
- "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
- "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
- "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
- "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
- "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
- "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
- "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
- "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
- "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
- "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
- "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
- "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
- "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
- "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
- "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
- "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
- "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
- "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
- "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
- "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
- "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
- "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
- "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
- "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
- "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
- "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
- "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
- "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
- "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
- "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
- "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
- "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
- "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
- "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
- "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
- "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
- "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
- "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
- "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
- "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
- "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
- "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
- "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
- "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
- "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
- "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
- "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
- "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
- "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
- "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
- "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
- "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
- "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
- "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
- "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
- "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
- "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
- "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
- "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
- "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
- "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
- "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
- "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
- "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
- "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
- "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
- "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
- "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
- "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
- "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
- "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
- "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
- "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
- "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
- "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
- "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
- "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
- "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
- "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
- "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
- "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
- "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
- "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
- "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
- "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
- "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
- "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
- "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
- "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
- "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
- "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
- "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
- "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
- "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
- "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
- "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
- "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
- "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
- "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
- "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
- "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
- "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
- "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
- "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
- "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
- "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
- "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
- "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
- "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
- "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
- "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
- "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
- "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
- "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
- "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
- "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
- "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
- "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
- "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
- "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
- "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
- "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
- "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
- "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
- "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
- "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
- "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
- "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
- "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
- "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
- "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
- "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
- "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
- "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
- "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
- "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
- "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
- "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
- "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
- "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
- "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
- "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
- "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
- "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
- "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
- "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
- "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
- "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
- "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
- "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
- "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
- "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
- "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
- "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
- "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
- "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
- "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
- "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
- "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
- "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
- "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
- "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
- "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
- "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
- "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
- "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
- "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
- "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
- "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
- "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
- "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
- "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
- "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
- "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
- "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
- "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
- "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
- "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
- "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
- "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
- "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
- "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
- "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
- "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
- "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
- "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
- "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
- "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
- "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
- "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
- "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
- "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
- "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
- "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
- "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
- "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
- "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
- "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
- "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
- "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
- "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
- "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
- "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
- "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
- "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
- "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
- "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
- "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
- "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
- "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
- "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
- "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
- "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
- "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
- "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
- "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
- "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
- "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
- "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
- "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
- "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
- "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
- "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
- "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
- "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
- "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
- "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
- "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
- "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
- "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
- "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
- "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
- "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
- "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
- "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
-
- private final static String innerIndex4=
- "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
- "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
- "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
- "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
- "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
- "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
- "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
- "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
- "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
- "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
- "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
- "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
- "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
- "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
- "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
- "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
- "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
- "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
- "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
- "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
- "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
- "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
- "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
- "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
- "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
- "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
- "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
- "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
- "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
- "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
- "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
- "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
- "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
- "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
- "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
- "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
- "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
- "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
- "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
- "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
- "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
- "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
- "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
- "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
- "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
- "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
- "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
- "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
- "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
- "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
- "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
- "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
- "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
- "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
- "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
- "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
- "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
- "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
- "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
- "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
- "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
- "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
- "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
- "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
- "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
- "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
- "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
- "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
- "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
- "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
- "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
- "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
- "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
- "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
- "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
- "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
- "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
- "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
- "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
- "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
- "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
- "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
- "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
- "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
- "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
- "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
- "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
- "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
- "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
- "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
- "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
- "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
- "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
- "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
- "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
- "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
- "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
- "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
- "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
- "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
- "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
- "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
- "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
- "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
- "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
- "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
- "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
- "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
- "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
- "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
- "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
- "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
- "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
- "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
- "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
- "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
- "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
- "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
- "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
- "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
- "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
- "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
- "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
- "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
- "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
- "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
- "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
- "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
- "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
- "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
- "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
- "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
- "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
- "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
- "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
- "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
- "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
- "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
- "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
- "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
- "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
- "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
- "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
- "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
- "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
- "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
- "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
- "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
- "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
- "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
- "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
- "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
- "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
- "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
- "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
- "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
- "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
- "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
- "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
- "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
- "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
- "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
- "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
- "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
- "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
- "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
- "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
- "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
- "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
- "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
- "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
- "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
- "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
- "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
- "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
- "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
- "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
- "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
- "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
- "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
- "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
- "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
- "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
- "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
- "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
- "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
- "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
- "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
- "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
- "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
- "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
- "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
- "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
- "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
- "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
- "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
- "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
- "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
- "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
- "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
- "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
- "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
- "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
- "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
- "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
- "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
- "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
- "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
- "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
- "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
- "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
- "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
- "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
- "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
- "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
- "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
- "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
- "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
- "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
- "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
- "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
- "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
- "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
- "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
-
- private final static String innerIndex5=
- "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
- "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
- "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
- "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
- "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
- "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
- "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
- "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
- "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
- "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
- "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
- "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
- "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
- "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
- "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
- "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
- "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
- "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
- "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
- "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
- "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
- "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
- "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
- "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
- "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
- "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
- "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
- "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
- "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
- "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
- "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
- "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
- "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
- "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
- "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
- "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
- "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
- "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
- "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
- "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
- "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
- "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
- "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
- "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
- "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
- "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
- "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
- "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
- "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
- "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
- "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
- "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
- "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
- "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
- "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
- "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
- "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
- "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
- "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
- "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
- "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
- "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
- "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
- "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
- "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
- "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
- "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
- "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
- "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
- "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
- "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
- "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
- "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
- "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
- "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
- "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
- "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
- "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
- "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
- "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
- "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
- "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
- "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
- "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
- "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
- "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
- "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
- "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
- "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
- "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
- "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
- "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
- "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
- "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
- "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
- "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
- "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
- "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
- "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
- "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
- "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
- "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
- "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
- "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
- "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
- "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
- "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
- "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
- "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
- "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
- "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
- "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
- "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
- "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
- "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
- "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
- "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
- "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
- "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
- "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
- "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
- "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
- "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
- "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
- "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
- "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
- "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
- "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
- "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
- "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
- "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
- "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
- "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
- "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
- "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
- "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
- "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
- "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
- "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
- "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
- "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
- "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
- "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
- "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
- "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
- "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
- "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
- "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
- "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
- "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
- "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
- "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
- "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
- "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
- "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
- "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
- "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
- "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
- "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
- "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
- "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
- "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
- "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
- "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static String innerIndex6=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
- "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
- "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
- "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
- "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
- "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
- "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
- "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
- "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
- "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
- "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
- "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
- "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
- "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
- "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
- "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
- "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
- "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
- "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
- "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
- "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
- "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
- "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
- "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
- "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
- "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
- "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
- "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
- "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
- "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
- "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
- "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
- "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
- "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
- "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
- "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
- "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
- "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
- "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
- "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
- "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
- "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
- "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
- "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
- "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
- "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
- "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
- "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
- "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
- "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
- "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
- "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
- "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
- "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
- "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
- "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
- "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
- "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
- "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
- "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
- "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
- "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
- "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
- "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
- "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
- "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
- "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
- "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
- "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
- "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
- "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
- "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
- "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
- "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
- "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
- "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
- "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
- "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
- "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
- "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
- "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
- "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
- "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
- "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
- "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
- "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
- "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
- "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
- "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
- "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
- "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
- "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
- "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
- "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
- "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
- "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
- "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
- "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
- "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
- "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
- "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
- "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
- "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
- "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
- "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
- "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
- "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
- "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
- "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
- "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
- "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
- "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
- "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
- "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
- "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
- "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
- "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
- "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
- "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
- "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
- "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
- "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
- "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
- "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
- "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
- "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
- "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
- "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
- "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
- "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
- "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
- "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
- "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
- "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
- "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
- "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
- "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
- "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
- "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
- "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
- "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
- "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
- "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
- "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
- "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
- "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
- "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
- "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
- "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
- "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
- "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
- "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
- "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
- "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
- "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
- "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
- "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
- "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
- "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
- "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
- "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
- "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
- "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
- "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
- "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
- "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
- "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
- "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
- "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
- "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
- "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
- "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
- "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
- "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
- "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
- "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
- "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
- "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
- "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
- "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
- "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
- "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
- "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
- "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
- "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
- "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
- "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
- "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
- "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
- "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
- "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
- "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
- "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
- "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
- "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
- "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
- "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
- "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
- "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
- "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
- "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
- "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
- "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
- "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
- "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
- "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
- "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
- "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
- "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
- "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
- "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
- "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
- "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
- "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
- "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
- "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
- "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
- "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
- "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
- "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
- "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
- "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
- "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
- "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
- "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
- "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
- "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
- "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
- "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
- "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
- "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
- "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
- "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
- "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
- "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
- "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
- "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
- "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
- "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
- "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
- "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
- "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
- "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
- "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
- "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
- "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
- "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
- "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
- "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
- "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
- "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
- "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
- "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
- "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
- "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
- "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
- "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
- "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
- "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
- "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
- "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
- "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
- "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
- "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
- "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
- "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
- "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
- "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
- "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
- "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
- "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
- "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
- "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
- "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
- "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
- "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
- "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
- "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
- "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
- "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
- "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
- "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
- "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
- "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
- "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
- "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
- "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
- "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
- "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
- "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
- "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
- "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
- "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
- "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
- "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
- "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
- "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
- "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
- "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
- "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
- "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
- "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
- "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
- "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
- "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
- "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
- "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
- "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
- "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
- "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
- "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
- "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
- "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
- "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
- "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
- "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
- "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
- "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
- "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
- "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
- "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
- "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
- "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
- "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
- "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
- "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
- "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
- "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
- "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
- "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
- "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
- "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
- "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
- "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
- "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
- "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
- "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
- "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
- "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
- "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
- "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
- "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
- "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
- "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
- "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
- "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
- "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
- "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
- "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
- "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
- "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
- "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
- "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
- "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
- "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
- "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
- "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
- "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
- "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
- "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
- "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
- "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
- "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
- "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
- "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
- "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
- "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
- "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
- "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
- "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
- "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
- "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
- "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
- "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
- "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
- "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
- "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
- "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
- "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
- "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
- "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
- "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
- "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
- "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
- "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
- "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
- "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
- "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
- "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
- "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
- "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
- "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
- "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
- "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
- "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
- "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
- "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
- "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
- "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
- "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
- "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
- "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
- "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
- "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
- "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
- "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
- "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
- "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
- "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
- "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
- "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
- "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
- "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
- "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
- "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
- "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
- "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
- "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
- "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
- "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
- "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
- "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
- "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
- "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
- "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
- "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
- "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
- "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
- "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
- "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
- "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
- "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
- "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
- "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
-
- private final static String innerIndex7=
- "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
- "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
- "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
- "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
- "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
- "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
- "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
- "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
- "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
- "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
- "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
- "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
- "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
- "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
- "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
- "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
- "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
- "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
- "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
- "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
- "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
- "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
- "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
- "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
- "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
- "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
- "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
- "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
- "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
- "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
- "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
- "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
- "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
- "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
- "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
- "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
- "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
- "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
- "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
- "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
- "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
- "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
- "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
- "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
- "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
- "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
- "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
- "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
- "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
- "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
- "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
- "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
- "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
- "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
- "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
- "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
- "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
- "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
- "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
- "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
- "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
- "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
- "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
- "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
- "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
- "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
- "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
- "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
- "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
- "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
- "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
- "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
- "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
- "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
- "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
- "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
- "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
- "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
- "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
- "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
- "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
- "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
- "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
- "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
- "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
- "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
- "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
- "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
- "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
- "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
- "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
- "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
- "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
- "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
- "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
- "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
- "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
- "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
- "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
- "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
- "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
- "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
- "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
- "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
- "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
- "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
- "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
- "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
- "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
- "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
- "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
- "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
- "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
- "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
- "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
- "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
- "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
- "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
- "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
- "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
- "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
- "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
- "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
- "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
- "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
- "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
- "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
- "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
- "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
- "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
- "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
- "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
- "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
- "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
- "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
- "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
- "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
- "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
- "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
- "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
- "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
- "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
- "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
- "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
- "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
- "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
- "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
- "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
- "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
- "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
- "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
- "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
- "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
- "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
- "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
- "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
- "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
- "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
- "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
- "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
- "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
- "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
- "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
- "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
- "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
- "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
- "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
- "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
- "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
- "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
- "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
- "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
- "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
- "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
- "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
- "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
- "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
- "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
- "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
- "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
- "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
- "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
- "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
- "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
- "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
- "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
- "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
- "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
- "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
- "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
- "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
- "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
- "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
- "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
- "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
- "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
- "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
- "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
- "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
- "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
- "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
- "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
- "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
- "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
- "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
- "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
- "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
- "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
- "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
- "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
- "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
- "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
- "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
- "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
- "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
- "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
- "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
- "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
- "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
- "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
- "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
- "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
- "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
- "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
- "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
- "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
- "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
- "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
- "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
- "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
- "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
- "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
- "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
- "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
- "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
- "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
- "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
- "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
- "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
- "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
- "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
- "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
- "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
- "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
- "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
- "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
- "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
- "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
- "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
- "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
- "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
- "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
- "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
- "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
- "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
- "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
- "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
- "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
- "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
- "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
- "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
- "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
- "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
- "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
- "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
- "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
- "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
- "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
- "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
- "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
- "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
- "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
- "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
- "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
- "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
- "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
- "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
- "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
- "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
- "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
- "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
- "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
- "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
- "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
- "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
- "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
- "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
- "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
- "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
- "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
- "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
- "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
- "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
- "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
- "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
- "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
- "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
- "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
- "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
- "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
- "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
- "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
- "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
- "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
- "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
- "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
- "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
- "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
- "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
- "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
- "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
- "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
- "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
- "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
- "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
- "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
- "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
- "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
- "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
- "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
- "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
- "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
- "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
- "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
- "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
- "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
- "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
- "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
- "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
- "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
- "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
- "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
- "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
- "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
- "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
- "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
- "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
- "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
- "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
- "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
- "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
- "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
- "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
- "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
- "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
- "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
- "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
- "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
- "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
- "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
- "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
- "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
- "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
- "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
- "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
- "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
- "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
- "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
- "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
- "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
- "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
- "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
- "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
- "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
- "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
- "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
- "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
- "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
- "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
- "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
- "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
- "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
- "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
- "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
- "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
- "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
- "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
- "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
- "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
- "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
- "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
- "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
- "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
- "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
- "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
- "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
- "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
- "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
- "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
- "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
- "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
- "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
- "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
- "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
- "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
- "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
- "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
- "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
- "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
- "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
- "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
- "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
- "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
- "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
- "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
- "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
- "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
- "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
- "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
- "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
- "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
- "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
- "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
- "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
- "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
- "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
- "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
- "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
- "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
- "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
- "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
- "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
- "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
- "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
- "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
- "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
- "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
- "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
- "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
- "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
- "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
- "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
- "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
- "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
- "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
- "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
- "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
- "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
- "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
- "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
- "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
- "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
- "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
- "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
- "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
- "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
- "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
- "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
- "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
- "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
- "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
- "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
- "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
- "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
- "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
- "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
- "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
- "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
- "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
- "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
- "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
- "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
- "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
- "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
- "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
- "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
- "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
- "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
- "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
- "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
- "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
- "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
- "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
- "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
- "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
- "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
- "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
- "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
- "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
- "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
- "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
- "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
- "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
- "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
- "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
- "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
- "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
- "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
- "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
- "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
- "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
- "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
- "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
- "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
- "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
- "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
- "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
- "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
- "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
- "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
- "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
- "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
- "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
- "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
- "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
- "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
- "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
- "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
- "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
- "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
- "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
- "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
-
- private final static String innerIndex8=
- "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
- "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
- "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
- "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
- "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
- "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
- "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
- "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
- "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
- "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
- "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
- "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
- "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
- "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
- "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
- "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
- "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
- "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
- "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
- "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
- "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
- "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
- "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
- "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
- "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
- "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
- "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
- "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
- "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
- "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
- "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
- "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
- "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
- "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
- "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
- "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
- "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
- "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
- "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
- "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
- "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
- "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
- "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
- "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
- "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
- "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
- "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
- "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
- "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
- "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
- "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
- "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
- "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
- "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
- "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
- "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
- "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
- "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
- "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
- "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
- "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
- "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
- "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
- "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
- "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
- "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
- "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
- "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
- "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
- "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
- "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
- "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
- "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
- "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
- "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
- "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
- "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
- "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
- "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
- "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
- "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
- "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
- "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
- "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
- "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
- "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
- "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
- "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
- "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
- "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
- "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
- "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
- "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
- "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
- "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
- "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
- "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
- "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
- "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
- "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
- "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
- "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
- "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
- "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
- "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
- "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
- "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
- "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
- "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
- "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
- "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
- "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
- "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
- "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
- "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
- "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
- "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
- "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
- "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
- "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
- "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
- "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
- "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
- "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
- "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
- "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
- "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
- "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
- "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
- "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
- "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
- "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
- "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
- "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
- "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
- "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
- "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
- "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
- "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
- "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
- "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
- "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
- "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
- "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
- "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
- "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
- "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
- "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
- "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
- "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
- "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
- "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
- "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
- "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
- "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
- "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
- "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
- "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
- "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
- "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
- "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
- "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
- "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
- "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
- "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
- "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
- "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
- "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
- "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
- "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
- "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
- "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
- "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
- "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
- "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
- "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
- "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
- "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
- "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
- "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
- "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
- "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
- "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
- "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
- "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
- "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
- "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
- "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
- "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
- "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
- "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
- "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
- "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
- "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
- "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
- "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
- "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
- "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
- "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
- "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
- "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
- "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
- "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
- "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
- "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
- "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
- "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
- "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
- "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
- "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
- "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
- "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
- "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
- "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
- "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
- "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
- "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
- "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
- "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
- "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
- "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
- "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
- "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
- "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
- "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
- "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
- "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
- "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
- "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
- "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
- "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
- "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
- "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
- "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
- "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
- "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
- "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
- "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
- "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
- "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
- "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
- "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
- "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
- "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
- "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
- "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
- "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
- "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
- "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
- "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
- "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
- "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
- "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
- "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
- "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
- "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
- "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
- "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
- "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
- "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
- "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
- "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
- "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
- "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
- "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
- "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
- "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
- "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
- "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
- "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
- "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
- "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
- "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
- "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
- "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
- "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
- "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
- "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
- "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
- "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
- "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
- "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
- "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
- "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
- "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
- "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
- "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
- "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
- "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
- "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
- "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
- "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
- "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
- "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
- "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
- "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
- "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
- "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
- "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
- "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
- "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
- "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
- "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
- "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
- "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
- "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
- "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
- "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
- "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
- "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
- "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
- "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
- "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
- "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
- "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
- "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
- "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
- "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
- "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
- "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
- "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
- "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
- "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
- "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
- "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
- "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
- "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
- "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
- "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
- "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
- "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
- "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
- "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
- "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
- "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
- "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
- "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
- "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
- "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
- "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
- "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
- "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
- "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
- "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
- "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
- "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
- "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
- "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
- "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
- "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
- "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
- "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
- "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
- "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
- "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
- "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
- "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
- "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
- "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
- "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
- "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
- "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
- "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
- "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
- "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
- "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
- "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
- "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
- "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
- "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
- "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
- "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
- "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
- "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
- "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
- "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
- "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
- "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
- "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
- "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
- "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
- "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
- "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
- "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
- "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
- "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
- "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
- "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
- "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
- "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
- "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
- "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
- "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
- "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
- "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
- "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
- "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
- "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
- "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
- "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
- "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
- "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
- "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
- "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
- "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
- "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
- "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
- "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
- "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
- "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
- "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
- "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
- "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
- "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
- "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
- "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
- "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
- "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
- "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
- "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
- "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
- "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
- "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
- "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
- "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
- "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
- "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
- "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
- "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
- "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
- "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
- "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
- "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
- "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
- "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
- "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
- "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
- "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
- "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
- "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
- "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
- "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
- "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
- "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
- "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
- "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
- "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
- "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
- "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
- "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
- "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
- "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
- "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
- "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
- "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
- "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
- "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
- "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
- "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
- "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
- "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
- "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
- "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
- "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
- "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
- "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
- "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
- "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
- "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
- "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
- "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
- "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
- "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
- "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
- "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
- "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
- "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
- "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
- "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
- "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
- "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
- "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
- "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
- "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
- "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
- "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
- "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
- "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
- "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
- "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
- "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
- "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
- "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
- "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
- "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
- "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
- "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
- "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
- "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
- "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
-
- private final static String innerIndex9=
- "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
- "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
- "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
- "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
- "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
- "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
- "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
- "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
- "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
- "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
- "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
- "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
- "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static short index1[] = {
- 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
- };
-
- private static String index2[] = {
- innerIndex0,
- innerIndex1,
- innerIndex2,
- innerIndex3,
- innerIndex4,
- innerIndex5,
- innerIndex6,
- innerIndex7,
- innerIndex8,
- innerIndex9
- };
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11KSC5601.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11KSC5601 extends Charset {
- public X11KSC5601 () {
- super("X11KSC5601", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11KSC5601;
- }
-
- private class Encoder extends CharsetEncoder {
- private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
-
- public Encoder(Charset cs) {
- super(cs, 2.0f, 2.0f);
- }
-
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- return enc.canEncode(c);
- }
-
- protected int encodeDouble(char c) {
- return enc.encodeChar(c);
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (c <= '\u007f')
- return CoderResult.unmappableForLength(1);
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000' ) {
- da[dp++] = (byte) ((ncode >> 8) & 0x7f);
- da[dp++] = (byte) (ncode & 0x7f);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-
- private class Decoder extends CharsetDecoder {
- private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
-
- public Decoder(Charset cs) {
- super(cs, 0.5f, 1.0f);
- }
-
- protected char decodeDouble(int b1, int b2) {
- return dec.decodeDouble(b1, b2);
- }
-
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- int b1 = sa[sp] & 0xFF | 0x80;
- int b2 = sa[sp + 1] & 0xFF | 0x80;
- char c = decodeDouble(b1, b2);
- if (c == UNMAPPABLE_DECODING) {
- return CoderResult.unmappableForLength(2);
- }
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = c;
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
-
- }
- }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11SunUnicode_0.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11SunUnicode_0 extends Charset {
- public X11SunUnicode_0 () {
- super("X11SunUnicode_0", null);
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
-
- /* Seems like supporting a decoder is required, but we aren't going
- * to be publically exposing this class, so no need to waste work
- */
- public CharsetDecoder newDecoder() {
- throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11SunUnicode_0;
- }
-
- private static class Encoder extends DoubleByteEncoder {
- public Encoder(Charset cs) {
- super(cs, index1, index2);
- }
-
- private final static String innerIndex0=
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
- "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
- "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
- "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
- "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
- "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
- "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
- "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
- "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
- "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
- "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
- "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
- "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
- "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
- "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
- "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
- private final static short index1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- private final static String index2[] = {
- innerIndex0
- };
-
- /* The default implementation creates a decoder and we don't have one */
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/DoubleByteEncoder.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2006, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import sun.nio.cs.Surrogate;
+
+public abstract class DoubleByteEncoder
+ extends CharsetEncoder
+{
+
+ private short index1[];
+ private String index2[];
+
+ private final Surrogate.Parser sgp = new Surrogate.Parser();
+
+ protected DoubleByteEncoder(Charset cs,
+ short[] index1, String[] index2)
+ {
+ super(cs, 2.0f, 2.0f);
+ this.index1 = index1;
+ this.index2 = index2;
+ }
+
+ protected DoubleByteEncoder(Charset cs,
+ short[] index1, String[] index2,
+ float avg, float max)
+ {
+ super(cs, avg, max);
+ this.index1 = index1;
+ this.index2 = index2;
+ }
+
+ protected DoubleByteEncoder(Charset cs,
+ short[] index1, String[] index2, byte[] repl)
+ {
+ super(cs, 2.0f, 2.0f, repl);
+ this.index1 = index1;
+ this.index2 = index2;
+ }
+
+
+ protected DoubleByteEncoder(Charset cs,
+ short[] index1, String[] index2,
+ byte[] repl, float avg, float max)
+ {
+ super(cs, avg, max,repl);
+ this.index1 = index1;
+ this.index2 = index2;
+ }
+
+ public boolean canEncode(char c) {
+ return (encodeSingle(c) != -1 ||
+ encodeDouble(c) != 0);
+ }
+
+ private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+
+ try {
+ while (sp < sl) {
+ char c = sa[sp];
+ if (Character.isSurrogate(c)) {
+ if (sgp.parse(c, sa, sp, sl) < 0)
+ return sgp.error();
+ if (sl - sp < 2)
+ return CoderResult.UNDERFLOW;
+ char c2 = sa[sp + 1];
+
+ byte[] outputBytes = new byte[2];
+ outputBytes = encodeSurrogate(c, c2);
+
+ if (outputBytes == null) {
+ return sgp.unmappableResult();
+ }
+ else {
+ if (dl - dp < 2)
+ return CoderResult.OVERFLOW;
+ da[dp++] = outputBytes[0];
+ da[dp++] = outputBytes[1];
+ sp += 2;
+ continue;
+ }
+ }
+ if (c >= '\uFFFE')
+ return CoderResult.unmappableForLength(1);
+
+ int b = encodeSingle(c);
+ if (b != -1) { // Single Byte
+ if (dl - dp < 1)
+ return CoderResult.OVERFLOW;
+ da[dp++] = (byte)b;
+ sp++;
+ continue;
+ }
+
+ int ncode = encodeDouble(c);
+ if (ncode != 0 && c != '\u0000' ) {
+ if (dl - dp < 2)
+ return CoderResult.OVERFLOW;
+ da[dp++] = (byte) ((ncode & 0xff00) >> 8);
+ da[dp++] = (byte) (ncode & 0xff);
+ sp++;
+ continue;
+ }
+ return CoderResult.unmappableForLength(1);
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+
+ private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
+ int mark = src.position();
+
+ try {
+ while (src.hasRemaining()) {
+ char c = src.get();
+ if (Character.isSurrogate(c)) {
+ int surr;
+ if ((surr = sgp.parse(c, src)) < 0)
+ return sgp.error();
+ char c2 = Surrogate.low(surr);
+ byte[] outputBytes = new byte[2];
+ outputBytes = encodeSurrogate(c, c2);
+
+ if (outputBytes == null) {
+ return sgp.unmappableResult();
+ } else {
+ if (dst.remaining() < 2)
+ return CoderResult.OVERFLOW;
+ mark += 2;
+ dst.put(outputBytes[0]);
+ dst.put(outputBytes[1]);
+ continue;
+ }
+ }
+ if (c >= '\uFFFE')
+ return CoderResult.unmappableForLength(1);
+ int b = encodeSingle(c);
+
+ if (b != -1) { // Single-byte character
+ if (dst.remaining() < 1)
+ return CoderResult.OVERFLOW;
+ mark++;
+ dst.put((byte)b);
+ continue;
+ }
+ // Double Byte character
+
+ int ncode = encodeDouble(c);
+ if (ncode != 0 && c != '\u0000') {
+ if (dst.remaining() < 2)
+ return CoderResult.OVERFLOW;
+ mark++;
+ dst.put((byte) ((ncode & 0xff00) >> 8));
+ dst.put((byte) ncode);
+ continue;
+ }
+ return CoderResult.unmappableForLength(1);
+ }
+
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(mark);
+ }
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+ if (true && src.hasArray() && dst.hasArray())
+ return encodeArrayLoop(src, dst);
+ else
+ return encodeBufferLoop(src, dst);
+ }
+
+ /*
+ * Can be changed by subclass
+ */
+ protected int encodeDouble(char ch) {
+ int offset = index1[((ch & 0xff00) >> 8 )] << 8;
+ return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
+ }
+
+ /*
+ * Can be changed by subclass
+ */
+ protected int encodeSingle(char inputChar) {
+ if (inputChar < 0x80)
+ return (byte)inputChar;
+ else
+ return -1;
+ }
+
+ /**
+ * Protected method which should be overridden by concrete DBCS
+ * CharsetEncoder classes which included supplementary characters
+ * within their mapping coverage.
+ * null return value indicates surrogate values could not be
+ * handled or encoded.
+ */
+ protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
+ return null;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,332 @@
+/*
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import sun.awt.FontConfiguration;
+import sun.awt.X11FontManager;
+import sun.font.FontUtilities;
+import sun.font.SunFontManager;
+import sun.util.logging.PlatformLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Scanner;
+
+public class MFontConfiguration extends FontConfiguration {
+
+ private static FontConfiguration fontConfig = null;
+ private static PlatformLogger logger;
+
+ public MFontConfiguration(SunFontManager fm) {
+ super(fm);
+ if (FontUtilities.debugFonts()) {
+ logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+ }
+ initTables();
+ }
+
+
+ public MFontConfiguration(SunFontManager fm,
+ boolean preferLocaleFonts,
+ boolean preferPropFonts) {
+ super(fm, preferLocaleFonts, preferPropFonts);
+ if (FontUtilities.debugFonts()) {
+ logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+ }
+ initTables();
+ }
+
+ /* Needs to be kept in sync with updates in the languages used in
+ * the fontconfig files.
+ */
+ protected void initReorderMap() {
+ reorderMap = new HashMap<>();
+ if (osName == null) { /* null means SunOS */
+ initReorderMapForSolaris();
+ } else {
+ initReorderMapForLinux();
+ }
+ }
+
+ private void initReorderMapForSolaris() {
+ /* Don't create a no-op entry, so we can optimize this case
+ * i.e. we don't need to do anything so can avoid slower paths in
+ * the code.
+ */
+// reorderMap.put("UTF-8", "latin-1");
+ reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
+ reorderMap.put("UTF-8.ja",
+ split("japanese-x0201,japanese-x0208,japanese-x0212"));
+ reorderMap.put("UTF-8.ko", "korean-johab");
+ reorderMap.put("UTF-8.th", "thai");
+ reorderMap.put("UTF-8.zh.TW", "chinese-big5");
+ reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
+ if (FontUtilities.isSolaris8) {
+ reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
+ } else {
+ reorderMap.put("UTF-8.zh.CN",
+ split("chinese-gb18030-0,chinese-gb18030-1"));
+ }
+ reorderMap.put("UTF-8.zh",
+ split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
+ reorderMap.put("Big5", "chinese-big5");
+ reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
+ if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
+ reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
+ } else {
+ reorderMap.put("GB2312","chinese-gb2312");
+ }
+ reorderMap.put("x-EUC-TW",
+ split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
+ reorderMap.put("GBK", "chinese-gbk");
+ reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
+
+ reorderMap.put("TIS-620", "thai");
+ reorderMap.put("x-PCK",
+ split("japanese-x0201,japanese-x0208,japanese-x0212"));
+ reorderMap.put("x-eucJP-Open",
+ split("japanese-x0201,japanese-x0208,japanese-x0212"));
+ reorderMap.put("EUC-KR", "korean");
+ /* Don't create a no-op entry, so we can optimize this case */
+// reorderMap.put("ISO-8859-1", "latin-1");
+ reorderMap.put("ISO-8859-2", "latin-2");
+ reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
+ reorderMap.put("windows-1251", "cyrillic-cp1251");
+ reorderMap.put("KOI8-R", "cyrillic-koi8-r");
+ reorderMap.put("ISO-8859-6", "arabic");
+ reorderMap.put("ISO-8859-7", "greek");
+ reorderMap.put("ISO-8859-8", "hebrew");
+ reorderMap.put("ISO-8859-9", "latin-5");
+ reorderMap.put("ISO-8859-13", "latin-7");
+ reorderMap.put("ISO-8859-15", "latin-9");
+ }
+
+ private void initReorderMapForLinux() {
+ reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
+ reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
+ reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
+ reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
+ reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
+ reorderMap.put("x-euc-jp-linux",
+ split("japanese-x0201,japanese-x0208"));
+ reorderMap.put("GB2312", "chinese-gb18030");
+ reorderMap.put("Big5", "chinese-big5");
+ reorderMap.put("EUC-KR", "korean");
+ if (osName.equals("Sun")){
+ reorderMap.put("GB18030", "chinese-cn-iso10646");
+ }
+ else {
+ reorderMap.put("GB18030", "chinese-gb18030");
+ }
+ }
+
+ /**
+ * Sets the OS name and version from environment information.
+ */
+ protected void setOsNameAndVersion(){
+ super.setOsNameAndVersion();
+
+ if (osName.equals("SunOS")) {
+ //don't care os name on Solaris
+ osName = null;
+ } else if (osName.equals("Linux")) {
+ try {
+ File f;
+ if ((f = new File("/etc/fedora-release")).canRead()) {
+ osName = "Fedora";
+ osVersion = getVersionString(f);
+ } else if ((f = new File("/etc/redhat-release")).canRead()) {
+ osName = "RedHat";
+ osVersion = getVersionString(f);
+ } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
+ osName = "Turbo";
+ osVersion = getVersionString(f);
+ } else if ((f = new File("/etc/SuSE-release")).canRead()) {
+ osName = "SuSE";
+ osVersion = getVersionString(f);
+ } else if ((f = new File("/etc/lsb-release")).canRead()) {
+ /* Ubuntu and (perhaps others) use only lsb-release.
+ * Syntax and encoding is compatible with java properties.
+ * For Ubuntu the ID is "Ubuntu".
+ */
+ Properties props = new Properties();
+ props.load(new FileInputStream(f));
+ osName = props.getProperty("DISTRIB_ID");
+ osVersion = props.getProperty("DISTRIB_RELEASE");
+ }
+ } catch (Exception e) {
+ }
+ }
+ return;
+ }
+
+ /**
+ * Gets the OS version string from a Linux release-specific file.
+ */
+ private String getVersionString(File f){
+ try {
+ Scanner sc = new Scanner(f);
+ return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
+ }
+ catch (Exception e){
+ }
+ return null;
+ }
+
+ private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
+
+ protected String mapFileName(String fileName) {
+ if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
+ return SunFontManager.jreFontDirName
+ + fileName.substring(fontsDirPrefix.length());
+ }
+ return fileName;
+ }
+
+ // overrides FontConfiguration.getFallbackFamilyName
+ public String getFallbackFamilyName(String fontName, String defaultFallback) {
+ // maintain compatibility with old font.properties files, which
+ // either had aliases for TimesRoman & Co. or defined mappings for them.
+ String compatibilityName = getCompatibilityFamilyName(fontName);
+ if (compatibilityName != null) {
+ return compatibilityName;
+ }
+ return defaultFallback;
+ }
+
+ protected String getEncoding(String awtFontName,
+ String characterSubsetName) {
+ // extract encoding field from XLFD
+ int beginIndex = 0;
+ int fieldNum = 13; // charset registry field
+ while (fieldNum-- > 0 && beginIndex >= 0) {
+ beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
+ }
+ if (beginIndex == -1) {
+ return "default";
+ }
+ String xlfdEncoding = awtFontName.substring(beginIndex);
+ if (xlfdEncoding.indexOf("fontspecific") > 0) {
+ if (awtFontName.indexOf("dingbats") > 0) {
+ return "sun.font.X11Dingbats";
+ } else if (awtFontName.indexOf("symbol") > 0) {
+ return "sun.awt.Symbol";
+ }
+ }
+ String encoding = encodingMap.get(xlfdEncoding);
+ if (encoding == null) {
+ encoding = "default";
+ }
+ return encoding;
+ }
+
+ protected Charset getDefaultFontCharset(String fontName) {
+ return Charset.forName("ISO8859_1");
+ }
+
+ protected String getFaceNameFromComponentFontName(String componentFontName) {
+ return null;
+ }
+
+ protected String getFileNameFromComponentFontName(String componentFontName) {
+ // for X11, component font name is XLFD
+ // if we have a file name already, just use it; otherwise let's see
+ // what the graphics environment can provide
+ String fileName = getFileNameFromPlatformName(componentFontName);
+ if (fileName != null && fileName.charAt(0) == '/' &&
+ !needToSearchForFile(fileName)) {
+ return fileName;
+ }
+ return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
+ }
+
+ public HashSet<String> getAWTFontPathSet() {
+ HashSet<String> fontDirs = new HashSet<String>();
+ short[] scripts = getCoreScripts(0);
+ for (int i = 0; i< scripts.length; i++) {
+ String path = getString(table_awtfontpaths[scripts[i]]);
+ if (path != null) {
+ int start = 0;
+ int colon = path.indexOf(':');
+ while (colon >= 0) {
+ fontDirs.add(path.substring(start, colon));
+ start = colon + 1;
+ colon = path.indexOf(':', start);
+ }
+ fontDirs.add((start == 0) ? path : path.substring(start));
+ }
+ }
+ return fontDirs;
+ }
+
+ /* methods for table setup ***********************************************/
+
+ private static HashMap<String, String> encodingMap = new HashMap<>();
+
+ private void initTables() {
+ // encodingMap maps XLFD encoding component to
+ // name of corresponding java.nio charset
+ encodingMap.put("iso8859-1", "ISO-8859-1");
+ encodingMap.put("iso8859-2", "ISO-8859-2");
+ encodingMap.put("iso8859-4", "ISO-8859-4");
+ encodingMap.put("iso8859-5", "ISO-8859-5");
+ encodingMap.put("iso8859-6", "ISO-8859-6");
+ encodingMap.put("iso8859-7", "ISO-8859-7");
+ encodingMap.put("iso8859-8", "ISO-8859-8");
+ encodingMap.put("iso8859-9", "ISO-8859-9");
+ encodingMap.put("iso8859-13", "ISO-8859-13");
+ encodingMap.put("iso8859-15", "ISO-8859-15");
+ encodingMap.put("gb2312.1980-0", "sun.font.X11GB2312");
+ if (osName == null) {
+ // use standard converter on Solaris
+ encodingMap.put("gbk-0", "GBK");
+ } else {
+ encodingMap.put("gbk-0", "sun.font.X11GBK");
+ }
+ encodingMap.put("gb18030.2000-0", "sun.font.X11GB18030_0");
+ encodingMap.put("gb18030.2000-1", "sun.font.X11GB18030_1");
+ encodingMap.put("cns11643-1", "sun.font.X11CNS11643P1");
+ encodingMap.put("cns11643-2", "sun.font.X11CNS11643P2");
+ encodingMap.put("cns11643-3", "sun.font.X11CNS11643P3");
+ encodingMap.put("big5-1", "Big5");
+ encodingMap.put("big5-0", "Big5");
+ encodingMap.put("hkscs-1", "Big5-HKSCS");
+ encodingMap.put("ansi-1251", "windows-1251");
+ encodingMap.put("koi8-r", "KOI8-R");
+ encodingMap.put("jisx0201.1976-0", "JIS0201");
+ encodingMap.put("jisx0208.1983-0", "JIS0208");
+ encodingMap.put("jisx0212.1990-0", "JIS0212");
+ encodingMap.put("ksc5601.1987-0", "sun.font.X11KSC5601");
+ encodingMap.put("ksc5601.1992-3", "sun.font.X11Johab");
+ encodingMap.put("tis620.2533-0", "TIS-620");
+ encodingMap.put("iso10646-1", "UTF-16BE");
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Dingbats.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.*;
+
+public class X11Dingbats extends Charset {
+ public X11Dingbats () {
+ super("X11Dingbats", null);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ /* Seems like supporting a decoder is required, but we aren't going
+ * to be publically exposing this class, so no need to waste work
+ */
+ public CharsetDecoder newDecoder() {
+ throw new Error("Decoder is not supported by X11Dingbats Charset");
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11Dingbats;
+ }
+
+ private static class Encoder extends CharsetEncoder {
+ public Encoder(Charset cs) {
+ super(cs, 1.0f, 1.0f);
+ }
+
+ public boolean canEncode(char ch) {
+ if (ch >= 0x2701 && ch <= 0x275e) { // direct map
+ return true;
+ }
+ if (ch >= 0x2761 && ch <= 0x27be) {
+ return (table[ch - 0x2761] != 0x00);
+ }
+ return false;
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ assert (sp <= sl);
+ sp = (sp <= sl ? sp : sl);
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+ assert (dp <= dl);
+ dp = (dp <= dl ? dp : dl);
+
+ try {
+ while (sp < sl) {
+ char c = sa[sp];
+ if (dl - dp < 1)
+ return CoderResult.OVERFLOW;
+
+ if (!canEncode(c))
+ return CoderResult.unmappableForLength(1);
+ sp++;
+ if (c >= 0x2761){
+ da[dp++] = table[c - 0x2761]; // table lookup
+ } else {
+ da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
+ }
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+
+ private static byte[] table = {
+ (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
+ (byte)0xa5, (byte)0xa6, (byte)0xa7,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
+ (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
+ (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
+ (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
+ (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
+ (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
+ (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
+ (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
+ (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
+ (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+ (byte)0x00, (byte)0x00, (byte)0x00};
+
+ /* The default implementation creates a decoder and we don't have one */
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_0.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,4273 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_0 extends Charset {
+ public X11GB18030_0 () {
+ super("X11GB18030_0", null);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ /* Seems like supporting a decoder is required, but we aren't going
+ * to be publically exposing this class, so no need to waste work
+ */
+ public CharsetDecoder newDecoder() {
+ throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11GB18030_0;
+ }
+
+ private static class Encoder extends DoubleByteEncoder {
+ public Encoder(Charset cs) {
+ super(cs, index1, index2);
+ }
+ protected int encodeSingle(char inputChar) {
+ return -1;
+ }
+ private final static String innerIndex0=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
+ "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
+ "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
+ "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
+ "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
+ "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
+ "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
+ "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
+ "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
+ "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
+ "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
+ "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
+ "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
+ "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
+ "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
+ "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
+ "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
+ "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
+ "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
+ "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
+ "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
+ "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
+ "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
+ "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
+ "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
+ "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
+ "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
+ "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+ "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
+ "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
+ "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
+ "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
+ "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
+ "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
+ "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
+ "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
+ "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
+ "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
+ "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
+ "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
+ "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
+ "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
+ "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
+ "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
+ "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
+ "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
+ "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
+ "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
+ "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
+ "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
+ "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
+ "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
+ "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
+ "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
+ "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
+ "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
+ "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
+ "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
+ "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
+ "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
+ "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
+ "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
+ "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
+ "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
+ "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
+ "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
+ "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
+ "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
+ "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
+ "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
+ "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
+ "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
+ "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
+ "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
+ "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
+ "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
+ "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
+ "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
+ "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
+ "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
+ "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
+ "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
+ "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
+ "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
+ "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
+ "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
+ "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
+ "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
+ "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
+ "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
+ "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
+ "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
+ "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
+ "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
+ "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
+ "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
+
+ private final static String innerIndex1=
+ "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
+ "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
+ "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
+ "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
+ "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
+ "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
+ "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
+ "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
+ "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
+ "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
+ "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
+ "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static String innerIndex2=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
+ "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
+ "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
+ "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
+ "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
+ "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
+ "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
+ "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
+ "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
+ "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
+ "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
+ "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
+ "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
+ "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
+ "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
+ "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
+ "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
+ "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
+ "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
+ "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
+ "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
+ "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
+ "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
+ "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
+ "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
+ "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
+ "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
+ "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
+ "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
+ "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
+ "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
+ "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
+ "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
+ "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
+ "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
+ "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
+ "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
+ "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
+ "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
+ "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
+ "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
+ "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
+ "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
+ "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
+ "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
+ "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
+ "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
+ "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
+ "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
+ "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
+ "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
+ "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
+ "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
+ "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
+ "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
+ "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
+ "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
+ "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
+ "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
+ "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
+ "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
+ "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
+ "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
+ "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
+ "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
+ "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
+ "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
+ "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
+ "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
+ "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
+ "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
+ "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
+ "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
+ "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
+ "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
+ "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
+ "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
+ "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
+ "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
+ "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
+ "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
+ "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
+ "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
+ "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
+ "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
+ "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
+ "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
+ "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
+ "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
+ "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
+ "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
+ "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
+ "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
+ "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
+ "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
+ "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
+ "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
+ "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
+ "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
+ "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
+ "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
+ "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
+ "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
+ "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
+ "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
+ "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
+ "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
+ "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
+ "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
+ "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
+ "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
+ "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
+ "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
+ "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
+ "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
+ "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
+ "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
+ "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
+ "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
+ "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
+ "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
+ "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
+ "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
+ "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
+ "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
+ "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
+ "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
+ "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
+ "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
+ "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
+ "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
+ "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
+ "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
+ "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
+ "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
+ "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
+ "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
+ "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
+ "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
+ "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
+ "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
+ "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
+ "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
+ "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
+ "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
+ "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
+ "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
+ "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
+ "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+ "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
+ "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
+ "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
+ "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
+ "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
+ "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
+ "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
+ "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
+ "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
+ "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
+ "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
+ "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
+ "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+ "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
+ "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
+ "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
+ "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
+ "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
+ "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
+ "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
+ "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
+ "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
+ "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
+ "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
+ "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
+ "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
+ "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
+ "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
+ "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
+ "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
+ "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
+ "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
+ "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
+ "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
+ "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
+ "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
+ "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
+ "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
+ "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
+ "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
+ "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
+ "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
+ "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
+ "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
+ "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
+ "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
+ "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
+ "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
+ "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
+ "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
+ "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
+ "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
+ "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
+ "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
+ "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
+ "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
+ "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
+ "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
+ "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
+ "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
+ "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
+ "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
+ "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
+ "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
+ "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
+ "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
+ "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
+ "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
+ "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
+ "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
+ "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
+ "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
+ "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
+ "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
+ "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
+ "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
+ "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
+ "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
+ "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
+ "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
+ "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
+ "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
+ "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
+ "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
+ "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
+ "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
+ "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
+ "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
+ "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
+ "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
+ "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
+ "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
+ "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
+ "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
+ "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
+ "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
+ "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
+ "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
+ "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
+ "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
+ "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
+ "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
+ "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
+ "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
+ "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
+ "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
+ "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
+ "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
+ "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
+ "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
+ "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
+ "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
+ "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
+ "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
+ "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
+ "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
+ "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
+ "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
+ "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
+ "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
+ "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
+ "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
+ "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
+ "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
+ "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
+ "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
+ "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
+ "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
+ "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
+ "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
+ "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
+ "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
+ "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
+ "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
+ "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
+ "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
+ "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
+ "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
+ "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
+ "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
+ "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
+ "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
+ "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
+ "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
+ "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
+ "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
+ "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
+ "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
+ "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
+ "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
+ "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
+ "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
+ "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
+ "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
+ "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
+ "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
+ "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
+ "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
+ "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
+ "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
+ "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
+ "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
+ "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
+ "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
+ "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
+ "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
+ "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
+ "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
+ "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
+ "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
+ "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
+ "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
+ "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
+ "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
+ "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
+ "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
+ "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
+ "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
+ "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
+ "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
+ "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
+ "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
+ "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
+ "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
+ "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
+ "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
+ "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
+ "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
+ "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
+ "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
+ "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
+ "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
+ "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
+ "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
+ "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
+ "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
+ "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
+ "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
+ "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
+ "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
+ "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
+ "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
+ "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
+ "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
+ "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
+ "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+ "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
+ "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
+ "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
+ "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
+ "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
+ "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
+ "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
+ "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
+ "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
+ "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
+ "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
+ "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
+ "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
+ "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
+ "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
+ "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
+ "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
+ "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
+ "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
+ "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
+ "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
+ "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
+ "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
+ "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
+ "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
+ "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
+ "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
+ "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
+ "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
+ "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
+ "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
+ "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
+ "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
+ "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
+ "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
+ "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
+ "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
+ "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+ "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
+ "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
+ "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
+ "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
+ "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
+ "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
+ "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
+ "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
+ "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
+ "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
+ "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+ "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
+ "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
+ "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
+ "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
+ "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
+ "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
+ "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
+ "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
+ "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
+ "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
+ "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
+ "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
+ "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
+ "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
+ "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
+
+ private final static String innerIndex3=
+ "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
+ "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
+ "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
+ "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
+ "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
+ "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
+ "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
+ "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
+ "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
+ "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
+ "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
+ "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
+ "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
+ "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
+ "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
+ "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
+ "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
+ "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
+ "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
+ "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
+ "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
+ "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
+ "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
+ "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
+ "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
+ "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
+ "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
+ "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
+ "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
+ "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
+ "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
+ "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
+ "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
+ "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
+ "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
+ "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
+ "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
+ "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
+ "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
+ "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
+ "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
+ "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
+ "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
+ "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
+ "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
+ "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
+ "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
+ "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
+ "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+ "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
+ "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
+ "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
+ "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
+ "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
+ "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
+ "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
+ "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
+ "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
+ "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
+ "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
+ "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
+ "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
+ "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
+ "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
+ "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
+ "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
+ "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
+ "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
+ "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
+ "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
+ "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
+ "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
+ "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
+ "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
+ "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+ "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
+ "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
+ "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
+ "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
+ "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+ "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
+ "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
+ "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
+ "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
+ "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
+ "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
+ "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
+ "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
+ "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
+ "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
+ "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
+ "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
+ "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
+ "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
+ "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
+ "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
+ "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
+ "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
+ "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
+ "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
+ "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
+ "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
+ "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
+ "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
+ "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
+ "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
+ "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
+ "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
+ "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
+ "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
+ "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
+ "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
+ "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
+ "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
+ "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
+ "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
+ "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
+ "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
+ "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
+ "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
+ "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
+ "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
+ "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
+ "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
+ "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
+ "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+ "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
+ "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
+ "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
+ "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
+ "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
+ "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
+ "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
+ "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
+ "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
+ "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
+ "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
+ "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
+ "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
+ "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
+ "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
+ "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
+ "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
+ "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
+ "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
+ "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
+ "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
+ "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
+ "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
+ "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
+ "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
+ "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
+ "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
+ "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
+ "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
+ "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
+ "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
+ "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
+ "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
+ "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
+ "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
+ "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
+ "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
+ "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
+ "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
+ "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
+ "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
+ "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
+ "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
+ "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
+ "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
+ "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
+ "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
+ "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
+ "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
+ "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
+ "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
+ "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
+ "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
+ "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
+ "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
+ "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
+ "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
+ "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
+ "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
+ "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
+ "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
+ "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
+ "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
+ "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
+ "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
+ "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
+ "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
+ "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
+ "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
+ "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
+ "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
+ "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
+ "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+ "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
+ "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
+ "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
+ "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
+ "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
+ "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
+ "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
+ "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
+ "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
+ "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
+ "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
+ "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
+ "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
+ "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
+ "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
+ "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
+ "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
+ "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
+ "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
+ "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
+ "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
+ "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
+ "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
+ "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
+ "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
+ "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
+ "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
+ "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
+ "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
+ "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
+ "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
+ "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
+ "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
+ "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
+ "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
+ "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
+ "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
+ "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
+ "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
+ "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
+ "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
+ "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
+ "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
+ "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
+ "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
+ "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
+ "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
+ "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
+ "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
+ "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
+ "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
+ "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
+ "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
+ "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
+ "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
+ "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
+ "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
+ "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
+ "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
+ "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
+ "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
+ "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
+ "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
+ "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
+ "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
+ "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
+ "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
+ "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
+ "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
+ "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
+ "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
+ "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
+ "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
+ "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
+ "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
+ "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
+ "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+ "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
+ "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
+ "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
+ "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
+ "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
+ "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
+ "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
+ "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
+ "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
+ "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
+ "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
+ "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
+ "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
+ "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
+ "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
+ "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
+ "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
+ "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
+ "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
+ "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
+ "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
+ "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
+ "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
+ "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
+ "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
+ "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
+ "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
+ "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
+ "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
+ "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
+ "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
+ "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
+ "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
+ "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
+ "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
+ "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
+ "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
+ "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
+ "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
+ "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
+ "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
+ "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
+ "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
+ "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
+ "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
+ "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
+ "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
+ "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
+ "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
+ "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
+ "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
+ "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
+ "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
+ "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
+ "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
+ "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
+ "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
+ "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
+ "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
+ "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
+ "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
+ "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
+ "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
+ "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
+ "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
+ "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
+ "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
+ "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
+ "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
+ "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
+ "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
+ "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
+ "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
+ "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
+ "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
+ "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
+ "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
+ "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
+ "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
+ "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
+ "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
+ "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
+ "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
+ "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
+ "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
+ "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
+ "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
+ "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
+ "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
+ "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
+ "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
+ "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
+ "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
+ "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
+ "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
+ "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
+ "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
+ "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
+ "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
+ "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
+ "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
+ "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
+ "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
+ "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
+ "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
+ "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
+ "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
+ "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
+ "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
+ "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
+ "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
+ "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
+ "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
+ "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
+ "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
+ "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
+ "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
+ "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
+ "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
+ "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
+ "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
+ "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
+ "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
+ "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
+ "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
+ "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
+ "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
+ "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
+ "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
+ "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
+ "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
+ "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
+ "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
+ "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
+ "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
+ "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
+ "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
+ "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
+ "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
+ "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
+ "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
+ "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
+ "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
+ "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
+ "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
+ "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
+ "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
+ "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
+ "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
+ "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
+ "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
+ "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
+ "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
+ "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
+ "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
+ "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
+ "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
+ "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
+ "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
+ "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
+ "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
+ "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
+ "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
+ "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
+ "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
+ "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
+ "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
+ "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
+ "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
+ "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
+ "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
+ "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
+ "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
+ "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
+ "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
+ "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
+ "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
+ "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
+ "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
+ "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
+ "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
+ "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+ "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
+ "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
+ "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
+ "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
+ "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
+ "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
+ "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
+ "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
+ "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
+ "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
+ "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
+ "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
+ "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
+ "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
+ "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
+ "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
+ "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
+ "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
+ "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
+ "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
+ "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
+ "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
+ "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
+ "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+ "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
+ "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
+ "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+ "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
+ "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
+ "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
+ "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
+ "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
+ "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
+ "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
+ "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
+ "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
+ "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
+ "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
+ "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
+ "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
+ "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
+ "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
+ "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
+ "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
+ "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
+ "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
+ "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+ "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
+ "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
+ "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
+ "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
+ "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
+ "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
+ "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
+
+ private final static String innerIndex4=
+ "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+ "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
+ "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
+ "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
+ "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
+ "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
+ "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
+ "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
+ "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
+ "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
+ "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
+ "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
+ "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
+ "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
+ "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
+ "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
+ "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
+ "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
+ "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
+ "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
+ "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
+ "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
+ "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
+ "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
+ "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
+ "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
+ "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
+ "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
+ "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
+ "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
+ "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
+ "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
+ "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
+ "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
+ "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
+ "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
+ "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
+ "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
+ "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
+ "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
+ "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
+ "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+ "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
+ "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
+ "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
+ "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
+ "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
+ "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
+ "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
+ "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
+ "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
+ "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
+ "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
+ "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
+ "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
+ "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
+ "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
+ "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
+ "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
+ "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
+ "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
+ "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
+ "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
+ "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
+ "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
+ "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
+ "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
+ "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
+ "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
+ "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
+ "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
+ "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
+ "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
+ "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
+ "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
+ "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
+ "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
+ "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
+ "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
+ "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
+ "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
+ "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
+ "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
+ "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
+ "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
+ "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
+ "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
+ "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
+ "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
+ "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
+ "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
+ "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
+ "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
+ "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
+ "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
+ "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
+ "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
+ "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
+ "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
+ "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
+ "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
+ "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
+ "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
+ "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
+ "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
+ "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
+ "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
+ "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
+ "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
+ "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
+ "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
+ "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
+ "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
+ "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
+ "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
+ "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
+ "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
+ "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
+ "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
+ "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
+ "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
+ "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
+ "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
+ "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
+ "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
+ "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
+ "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
+ "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
+ "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
+ "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
+ "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
+ "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
+ "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
+ "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
+ "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
+ "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
+ "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
+ "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
+ "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+ "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
+ "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
+ "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
+ "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
+ "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
+ "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
+ "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
+ "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
+ "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
+ "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
+ "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
+ "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
+ "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
+ "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
+ "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
+ "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
+ "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
+ "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
+ "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
+ "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
+ "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
+ "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
+ "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
+ "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
+ "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
+ "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
+ "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
+ "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
+ "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
+ "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
+ "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
+ "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
+ "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
+ "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
+ "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
+ "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
+ "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
+ "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
+ "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
+ "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
+ "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
+ "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
+ "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
+ "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
+ "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
+ "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
+ "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
+ "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+ "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
+ "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
+ "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
+ "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
+ "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
+ "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
+ "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
+ "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
+ "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
+ "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
+ "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
+ "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
+ "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
+ "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
+ "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
+ "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
+ "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
+ "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
+ "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
+ "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
+ "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
+ "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
+ "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
+ "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
+ "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
+ "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
+ "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
+ "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
+ "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
+ "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
+ "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
+ "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
+ "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
+ "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
+ "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
+ "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
+ "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
+ "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
+ "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
+ "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
+ "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
+ "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
+ "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
+ "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
+ "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
+ "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
+ "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
+ "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
+ "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
+ "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
+ "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
+ "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
+ "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
+ "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
+ "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
+ "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
+ "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
+ "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
+ "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
+ "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
+ "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
+ "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
+ "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
+ "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
+ "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
+ "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
+ "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
+ "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
+ "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
+ "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
+ "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
+ "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
+ "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
+ "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
+ "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
+ "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
+ "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
+ "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
+ "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
+ "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
+ "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
+ "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
+ "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
+ "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
+ "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
+ "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
+ "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
+ "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
+ "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
+ "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
+ "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
+ "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
+ "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
+ "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
+ "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
+ "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
+ "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
+ "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
+ "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
+ "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
+ "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
+ "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
+ "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
+ "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
+ "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
+ "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
+ "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
+ "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
+ "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
+ "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
+ "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
+ "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
+ "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
+ "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
+ "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
+ "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
+ "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
+ "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
+ "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
+ "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
+ "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
+ "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
+ "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
+ "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
+ "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
+ "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
+ "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
+ "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
+ "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
+ "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
+ "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
+ "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
+ "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
+ "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
+ "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
+ "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
+ "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
+ "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
+ "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
+ "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
+ "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
+ "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
+ "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
+ "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
+ "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
+ "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
+ "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
+ "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
+ "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
+ "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
+ "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
+ "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
+ "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
+ "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
+ "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
+ "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
+ "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
+ "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
+ "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
+ "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
+ "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
+ "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
+ "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
+ "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
+ "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
+ "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
+ "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
+ "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
+ "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
+ "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
+ "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
+ "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
+ "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
+ "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
+ "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
+ "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
+ "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
+ "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
+ "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
+ "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
+ "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
+ "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
+ "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
+ "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
+ "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
+ "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
+ "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
+ "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
+ "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
+ "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
+ "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
+ "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
+ "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
+ "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
+ "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
+ "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
+ "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
+ "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
+ "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
+ "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
+ "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
+ "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
+ "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
+ "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
+ "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
+ "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
+ "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
+ "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+ "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
+ "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
+ "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
+ "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
+ "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
+ "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
+ "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
+ "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
+ "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
+ "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
+ "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
+ "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
+ "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
+ "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
+ "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
+ "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
+ "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
+ "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
+ "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
+ "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
+ "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
+ "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
+ "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
+ "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
+ "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
+ "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
+ "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
+ "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
+ "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
+ "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
+ "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
+ "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
+ "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
+ "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
+ "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
+ "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
+ "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
+ "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
+ "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
+ "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
+ "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
+ "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
+ "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
+ "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
+ "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
+ "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
+ "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
+ "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
+ "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
+ "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
+ "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
+ "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
+ "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
+ "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
+ "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
+ "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
+ "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
+ "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
+ "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
+ "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
+ "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
+ "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
+ "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
+ "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
+ "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
+ "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
+ "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
+ "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
+ "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
+ "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
+ "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
+ "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
+ "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
+ "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
+ "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
+ "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
+ "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
+ "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
+ "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
+ "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
+ "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
+ "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
+ "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
+ "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+ "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
+ "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
+ "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
+ "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
+ "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
+ "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
+ "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
+ "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
+ "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
+ "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
+ "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
+ "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
+ "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
+ "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+ "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
+ "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
+ "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
+ "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
+ "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
+ "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
+ "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
+ "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
+ "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
+ "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
+ "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
+ "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
+ "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
+ "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
+ "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
+ "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
+ "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
+ "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
+ "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
+
+ private final static String innerIndex5=
+ "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
+ "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
+ "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
+ "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
+ "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
+ "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
+ "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
+ "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
+ "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
+ "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
+ "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
+ "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
+ "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
+ "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
+ "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
+ "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
+ "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
+ "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
+ "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
+ "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
+ "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
+ "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
+ "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
+ "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
+ "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
+ "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
+ "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
+ "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
+ "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
+ "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
+ "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
+ "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
+ "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
+ "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
+ "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
+ "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
+ "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
+ "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
+ "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
+ "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
+ "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
+ "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
+ "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
+ "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
+ "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
+ "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
+ "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
+ "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
+ "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
+ "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
+ "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
+ "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
+ "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
+ "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
+ "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
+ "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
+ "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
+ "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
+ "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
+ "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
+ "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
+ "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
+ "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
+ "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
+ "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
+ "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+ "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
+ "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
+ "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
+ "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
+ "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
+ "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+ "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+ "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
+ "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
+ "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
+ "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
+ "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
+ "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
+ "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
+ "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
+ "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
+ "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
+ "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
+ "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
+ "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
+ "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
+ "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
+ "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+ "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
+ "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
+ "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
+ "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
+ "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
+ "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
+ "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
+ "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
+ "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
+ "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
+ "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
+ "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+ "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
+ "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
+ "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
+ "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
+ "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
+ "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
+ "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
+ "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
+ "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
+ "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
+ "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
+ "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
+ "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+ "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
+ "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
+ "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
+ "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
+ "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
+ "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
+ "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
+ "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
+ "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
+ "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
+ "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
+ "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
+ "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
+ "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
+ "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
+ "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
+ "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
+ "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
+ "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
+ "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
+ "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
+ "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
+ "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
+ "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
+ "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
+ "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
+ "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
+ "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
+ "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
+ "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
+ "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
+ "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
+ "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
+ "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
+ "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
+ "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
+ "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
+ "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
+ "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
+ "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
+ "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
+ "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
+ "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
+ "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
+ "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
+ "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
+ "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
+ "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
+ "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
+ "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
+ "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
+ "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
+ "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
+ "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
+ "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
+ "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
+ "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
+ "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
+ "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
+ "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
+ "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
+ "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
+ "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
+ "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
+ "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
+ "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
+ "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
+ "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
+ "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
+ "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
+ "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
+ "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
+ "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
+ "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
+ "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
+ "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
+ "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
+ "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
+ "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
+ "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
+ "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
+ "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
+ "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
+ "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
+ "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
+ "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
+ "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
+ "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
+ "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
+ "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
+ "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
+ "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
+ "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
+ "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
+ "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
+ "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
+ "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
+ "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
+ "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
+ "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
+ "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
+ "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
+ "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
+ "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
+ "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
+ "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
+ "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
+ "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
+ "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
+ "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
+ "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
+ "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
+ "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
+ "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
+ "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
+ "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
+ "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
+ "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
+ "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
+ "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
+ "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
+ "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
+ "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
+ "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
+ "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
+ "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
+ "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
+ "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
+ "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
+ "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
+ "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
+ "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
+ "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
+ "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
+ "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
+ "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
+ "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
+ "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
+ "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
+ "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
+ "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
+ "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
+ "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
+ "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
+ "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
+ "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
+ "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
+ "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
+ "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
+ "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
+ "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
+ "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
+ "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
+ "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
+ "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
+ "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
+ "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
+ "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
+ "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
+ "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
+ "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
+ "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
+ "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
+ "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
+ "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
+ "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
+ "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
+ "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
+ "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
+ "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
+ "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
+ "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
+ "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
+ "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
+ "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
+ "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
+ "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
+ "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
+ "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
+ "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
+ "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+ "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
+ "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
+ "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
+ "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
+ "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
+ "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
+ "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
+ "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
+ "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
+ "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
+ "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
+ "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
+ "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
+ "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
+ "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
+ "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
+ "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
+ "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
+ "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
+ "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
+ "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
+ "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
+ "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
+ "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
+ "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
+ "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
+ "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
+ "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
+ "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
+ "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+ "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
+ "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
+ "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
+ "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
+ "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
+ "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
+ "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
+ "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
+ "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
+ "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
+ "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
+ "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
+ "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
+ "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
+ "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
+ "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
+ "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
+ "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
+ "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
+ "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
+ "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
+ "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
+ "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
+ "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
+ "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
+ "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
+ "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
+ "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
+ "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
+ "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
+ "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
+ "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
+ "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
+ "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
+ "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
+ "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
+ "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
+ "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
+ "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
+ "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
+ "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
+ "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+ "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
+ "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
+ "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
+ "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
+ "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
+ "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
+ "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
+ "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
+ "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
+ "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
+ "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
+ "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
+ "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
+ "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
+ "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
+ "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
+ "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
+ "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
+ "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
+ "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
+ "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
+ "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
+ "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
+ "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
+ "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
+ "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
+ "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
+ "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
+ "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
+ "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
+ "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
+ "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
+ "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
+ "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
+ "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
+ "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
+ "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
+ "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
+ "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
+ "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
+ "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
+ "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
+ "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
+ "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
+ "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
+ "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
+ "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
+ "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+ "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
+ "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
+ "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
+ "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
+ "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
+ "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
+ "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
+ "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
+ "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
+ "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
+ "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
+ "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
+ "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+ "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
+ "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
+ "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
+ "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
+ "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
+ "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
+ "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
+ "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
+ "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
+ "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
+ "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
+ "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
+ "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
+ "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
+ "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
+ "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
+ "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
+ "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
+ "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
+ "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
+ "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
+ "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
+ "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
+ "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
+ "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
+ "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
+ "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
+ "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
+ "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
+ "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
+ "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+ "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
+ "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
+ "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
+ "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
+ "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
+ "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
+ "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
+ "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
+ "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
+ "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
+ "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
+ "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
+ "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+ "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
+ "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
+ "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
+ "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
+ "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
+ "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
+ "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
+ "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
+ "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
+ "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
+ "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
+ "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
+ "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
+ "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
+ "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
+ "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
+ "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
+ "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
+ "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
+ "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
+ "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
+ "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
+ "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
+ "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
+ "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
+ "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
+ "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
+ "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
+ "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
+ "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
+ "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
+ "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
+ "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
+ "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
+ "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
+ "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
+ "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
+ "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
+ "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
+ "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
+
+ private final static String innerIndex6=
+ "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
+ "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
+ "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
+ "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
+ "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
+ "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
+ "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
+ "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
+ "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
+ "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
+ "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
+ "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
+ "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
+ "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
+ "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
+ "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
+ "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
+ "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
+ "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
+ "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
+ "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
+ "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
+ "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
+ "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
+ "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
+ "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
+ "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
+ "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
+ "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
+ "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
+ "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
+ "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
+ "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
+ "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
+ "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
+ "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
+ "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
+ "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
+ "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
+ "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
+ "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
+ "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
+ "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
+ "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
+ "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
+ "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
+ "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
+ "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
+ "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
+ "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
+ "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
+ "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
+ "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
+ "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
+ "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
+ "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
+ "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
+ "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
+ "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
+ "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
+ "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
+ "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
+ "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
+ "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
+ "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
+ "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
+ "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
+ "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
+ "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
+ "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
+ "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
+ "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
+ "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
+ "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
+ "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
+ "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
+ "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
+ "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
+ "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
+ "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
+ "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
+ "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
+ "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
+ "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
+ "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
+ "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
+ "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
+ "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
+ "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
+ "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
+ "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
+ "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
+ "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
+ "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
+ "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
+ "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
+ "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
+ "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
+ "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
+ "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
+ "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
+ "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
+ "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
+ "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
+ "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
+ "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
+ "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
+ "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
+ "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
+ "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
+ "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
+ "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
+ "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
+ "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
+ "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
+ "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
+ "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
+ "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
+ "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
+ "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
+ "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
+ "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
+ "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
+ "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
+ "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
+ "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
+ "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
+ "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
+ "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
+ "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
+ "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
+ "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
+ "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
+ "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
+ "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
+ "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
+ "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
+ "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
+ "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
+ "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
+ "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
+ "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
+ "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
+ "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
+ "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
+ "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
+ "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
+ "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
+ "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
+ "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
+ "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
+ "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
+ "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
+ "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
+ "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
+ "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
+ "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
+ "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
+ "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
+ "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
+ "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
+ "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
+ "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
+ "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
+ "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
+ "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
+ "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
+ "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
+ "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
+ "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
+ "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
+ "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
+ "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
+ "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
+ "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
+ "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
+ "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
+ "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
+ "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
+ "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
+ "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
+ "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
+ "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
+ "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
+ "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
+ "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
+ "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
+ "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
+ "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
+ "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
+ "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
+ "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
+ "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
+ "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
+ "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
+ "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
+ "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
+ "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
+ "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
+ "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
+ "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
+ "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
+ "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
+ "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
+ "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
+ "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
+ "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
+ "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
+ "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
+ "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
+ "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
+ "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
+ "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
+ "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
+ "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
+ "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
+ "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
+ "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
+ "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
+ "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
+ "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
+ "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
+ "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
+ "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
+ "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
+ "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
+ "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
+ "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
+ "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
+ "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
+ "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
+ "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
+ "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
+ "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
+ "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
+ "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
+ "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
+ "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
+ "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
+ "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
+ "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
+ "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
+ "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
+ "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
+ "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
+ "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
+ "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
+ "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
+ "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
+ "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
+ "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
+ "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
+ "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
+ "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
+ "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
+ "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
+ "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
+ "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
+ "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
+ "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
+ "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
+ "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
+ "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
+ "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
+ "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
+ "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
+ "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
+ "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
+ "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
+ "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
+ "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
+ "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
+ "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
+ "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
+ "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
+ "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
+ "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
+ "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
+ "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
+ "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
+ "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
+ "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
+ "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
+ "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
+ "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
+ "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
+ "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
+ "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
+ "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
+ "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
+ "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
+ "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
+ "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
+ "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
+ "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
+ "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
+ "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
+ "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
+ "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
+ "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
+ "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
+ "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
+ "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
+ "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
+ "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
+ "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
+ "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
+ "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
+ "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
+ "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
+ "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
+ "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
+ "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
+ "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
+ "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
+ "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
+ "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
+ "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
+ "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
+ "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
+ "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
+ "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
+ "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
+ "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
+ "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
+ "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
+ "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
+ "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
+ "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
+ "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
+ "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
+ "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
+ "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
+ "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
+ "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
+ "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
+ "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
+ "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
+ "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
+ "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
+ "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
+ "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
+ "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
+ "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
+ "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
+ "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
+ "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
+ "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
+ "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
+ "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
+ "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
+ "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
+ "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
+ "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
+ "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
+ "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
+ "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
+ "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
+ "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
+ "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
+ "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
+ "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
+ "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
+ "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
+ "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
+ "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
+ "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
+ "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
+ "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
+ "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
+ "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
+ "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
+ "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
+ "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
+ "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
+ "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
+ "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
+ "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
+ "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
+ "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
+ "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
+ "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
+ "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
+ "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
+ "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
+ "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
+ "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
+ "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
+ "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
+ "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
+ "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
+ "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
+ "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
+ "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
+ "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
+ "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
+ "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
+ "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
+ "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
+ "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
+ "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
+ "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
+ "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
+ "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
+ "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
+ "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
+ "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
+ "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
+ "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
+ "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
+ "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
+ "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
+ "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
+ "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
+ "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
+ "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
+ "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
+ "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
+ "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
+ "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
+ "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
+ "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
+ "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
+ "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
+ "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
+ "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
+ "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
+ "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
+ "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
+ "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
+ "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
+ "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
+ "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
+ "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
+ "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
+ "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
+ "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
+ "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
+ "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
+ "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
+ "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
+ "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
+ "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
+ "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
+ "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
+ "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
+ "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
+ "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
+ "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
+ "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
+ "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
+ "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
+ "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
+ "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
+ "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
+ "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
+ "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
+ "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
+ "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
+ "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
+ "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
+ "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
+ "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
+ "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
+ "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
+ "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
+ "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
+ "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
+ "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
+ "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
+ "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
+ "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
+ "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
+ "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
+ "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
+ "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
+ "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
+ "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
+ "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
+ "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
+ "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
+ "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
+ "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
+ "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
+ "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
+ "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
+ "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
+ "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
+ "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
+ "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
+ "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
+ "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
+ "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
+ "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
+ "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
+ "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
+ "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
+ "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
+ "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
+ "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
+ "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
+ "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
+ "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
+ "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
+ "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
+ "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
+ "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
+ "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
+ "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
+ "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
+ "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
+ "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
+
+ private final static String innerIndex7=
+ "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
+ "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
+ "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
+ "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
+ "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
+ "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
+ "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
+ "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
+ "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
+ "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
+ "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
+ "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
+ "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
+ "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
+ "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
+ "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
+ "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
+ "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
+ "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
+ "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
+ "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
+ "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
+ "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
+ "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
+ "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
+ "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
+ "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
+ "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
+ "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
+ "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
+ "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
+ "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
+ "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
+ "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
+ "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
+ "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
+ "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
+ "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
+ "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
+ "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
+ "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
+ "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
+ "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
+ "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
+ "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
+ "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
+ "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
+ "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
+ "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
+ "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
+ "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
+ "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
+ "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
+ "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
+ "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
+ "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
+ "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
+ "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
+ "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
+ "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
+ "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
+ "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
+ "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
+ "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
+ "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
+ "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
+ "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
+ "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
+ "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
+ "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
+ "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
+ "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
+ "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
+ "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
+ "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
+ "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
+ "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
+ "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
+ "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
+ "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
+ "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
+ "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
+ "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
+ "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
+ "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
+ "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
+ "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
+ "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
+ "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
+ "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
+ "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
+ "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
+ "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
+ "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
+ "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
+ "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
+ "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
+ "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
+ "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
+ "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
+ "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
+ "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
+ "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
+ "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
+ "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
+ "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
+ "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
+ "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
+ "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
+ "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
+ "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
+ "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
+ "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
+ "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
+ "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
+ "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
+ "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
+ "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
+ "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
+ "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
+ "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
+ "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
+ "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
+ "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
+ "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
+ "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
+ "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
+ "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
+ "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
+ "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
+ "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
+ "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
+ "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
+ "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
+ "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
+ "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
+ "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
+ "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
+ "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
+ "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
+ "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
+ "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
+ "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
+ "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
+ "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
+ "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
+ "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
+ "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
+ "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+ "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+ "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
+ "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
+ "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
+ "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
+ "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
+ "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
+ "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+ "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+ "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
+ "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
+ "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
+ "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
+ "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
+ "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
+ "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
+ "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
+ "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
+ "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
+ "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
+ "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
+ "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
+ "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
+ "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+ "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
+ "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
+ "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
+ "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
+ "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
+ "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
+ "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
+ "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+ "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
+ "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
+ "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
+ "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
+ "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
+ "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
+ "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
+ "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
+ "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
+ "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
+ "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
+ "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
+ "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
+ "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
+ "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
+ "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
+ "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
+ "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
+ "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+ "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+ "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
+ "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
+ "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
+ "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
+ "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
+ "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
+ "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
+ "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
+ "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
+ "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
+ "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
+ "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
+ "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
+ "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
+ "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
+ "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
+ "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
+ "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
+ "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
+ "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
+ "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
+ "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
+ "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
+ "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
+ "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
+ "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
+ "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
+ "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
+ "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
+ "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
+ "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
+ "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
+ "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
+ "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
+ "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
+ "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
+ "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
+ "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
+ "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
+ "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
+ "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
+ "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
+ "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
+ "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
+ "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
+ "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
+ "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
+ "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
+ "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
+ "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
+ "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
+ "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
+ "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
+ "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
+ "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
+ "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
+ "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
+ "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
+ "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
+ "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
+ "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
+ "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
+ "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
+ "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
+ "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
+ "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
+ "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
+ "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
+ "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
+ "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
+ "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
+ "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
+ "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
+ "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
+ "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
+ "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
+ "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
+ "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
+ "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
+ "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
+ "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
+ "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
+ "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
+ "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
+ "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
+ "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
+ "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
+ "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
+ "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
+ "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
+ "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
+ "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
+ "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
+ "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
+ "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
+ "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
+ "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
+ "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
+ "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
+ "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
+ "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
+ "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
+ "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
+ "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
+ "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
+ "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
+ "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+ "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
+ "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
+ "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
+ "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
+ "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
+ "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
+ "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
+ "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
+ "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
+ "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
+ "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
+ "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+ "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
+ "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
+ "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
+ "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
+ "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
+ "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
+ "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
+ "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
+ "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
+ "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
+ "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
+ "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+ "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
+ "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
+ "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
+ "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
+ "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
+ "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
+ "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
+ "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
+ "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
+ "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
+ "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
+ "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
+ "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
+ "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
+ "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
+ "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
+ "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
+ "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
+ "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
+ "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+ "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
+ "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
+ "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
+ "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
+ "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
+ "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
+ "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
+ "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
+ "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
+ "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
+ "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
+ "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+ "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
+ "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
+ "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
+ "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
+ "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
+ "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
+ "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
+ "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
+ "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
+ "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
+ "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
+ "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+ "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
+ "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
+ "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
+ "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
+ "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
+ "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
+ "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
+ "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
+ "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
+ "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
+ "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
+ "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
+ "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
+ "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
+ "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
+ "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
+ "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
+ "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
+ "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
+ "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
+ "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
+ "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
+ "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
+ "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
+ "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
+ "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
+ "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
+ "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
+ "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
+ "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
+ "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
+ "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
+ "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
+ "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
+ "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
+ "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static String innerIndex8=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
+ "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
+ "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
+ "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
+ "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
+ "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
+ "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
+ "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
+ "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
+ "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
+ "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
+ "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
+ "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
+ "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
+ "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
+ "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
+ "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
+ "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
+ "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static short index1[] = {
+ 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
+ 26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
+ };
+
+ private final static String index2[] = {
+ innerIndex0,
+ innerIndex1,
+ innerIndex2,
+ innerIndex3,
+ innerIndex4,
+ innerIndex5,
+ innerIndex6,
+ innerIndex7,
+ innerIndex8
+ };
+
+ /* The default implementation creates a decoder and we don't have one */
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_1.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,5270 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_1 extends Charset {
+ public X11GB18030_1 () {
+ super("X11GB18030_1", null);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ /* Seems like supporting a decoder is required, but we aren't going
+ * to be publically exposing this class, so no need to waste work
+ */
+ public CharsetDecoder newDecoder() {
+ throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11GB18030_1;
+ }
+ private static class Encoder extends DoubleByteEncoder {
+ public Encoder(Charset cs) {
+ super(cs, index1, index2);
+ }
+ protected int encodeSingle(char inputChar) {
+ return -1;
+ }
+ private final static String innerIndex0=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
+ "\b\t\n\u000B\f\r\u000E\u000F"+
+ "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
+ "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
+ "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
+ "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
+ "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
+ "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
+ "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
+ "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
+ "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
+ "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
+ "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
+ "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
+ "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
+ "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
+ "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
+ "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
+ "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
+ "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
+ "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
+ "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
+ "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
+ "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
+ "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
+ "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
+ "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
+ "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
+ "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
+ "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
+ "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
+ "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
+ "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
+ "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
+ "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
+ "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
+ "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
+ "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
+ "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
+ "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
+ "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
+ "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
+ "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
+ "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
+ "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
+ "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
+ "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
+ "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
+ "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
+ "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
+ "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
+ "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
+ "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
+ "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
+ "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
+ "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
+ "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
+ "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
+ "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
+ "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
+ "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
+ "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
+ "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
+ "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
+ "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
+ "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
+ "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
+ "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
+ "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
+ "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
+ "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
+ "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
+ "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
+ "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
+ "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
+ "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
+ "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
+ "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
+ "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
+ "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
+ "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
+ "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
+ "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
+ "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
+ "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
+ "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
+ "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
+ "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
+ "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
+ "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
+ "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
+ "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
+ "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
+ "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
+ "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
+ "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
+ "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
+ "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
+ "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
+ "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
+ "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
+ "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
+ "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
+ "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
+ "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
+ "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
+ "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
+ "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
+ "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
+ "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
+ "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
+ "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
+ "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
+ "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
+ "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
+ "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
+ "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
+ "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
+ "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
+ "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
+ "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
+ "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
+ "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
+ "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
+ "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
+ "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
+ "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
+ "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
+ "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
+ "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
+ "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
+ "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
+ "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
+ "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
+ "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
+ "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
+ "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
+ "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
+ "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
+ "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
+ "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
+ "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
+ "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
+ "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
+ "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
+ "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
+ "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
+ "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
+ "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
+ "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
+ "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
+ "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
+ "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
+ "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
+ "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
+ "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
+ "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
+ "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
+ "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
+ "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
+ "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
+ "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
+ "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
+ "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
+ "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
+ "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
+ "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
+ "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
+ "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
+ "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
+ "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
+ "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
+ "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
+ "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
+ "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
+ "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
+ "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
+ "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
+ "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
+ "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
+ "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
+ "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
+ "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
+ "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
+ "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
+ "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
+ "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
+ "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
+ "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
+ "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
+ "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
+ "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
+ "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
+ "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
+ "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
+ "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
+ "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
+ "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
+ "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
+ "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
+ "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
+ "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
+ "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
+ "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
+ "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
+ "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
+ "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
+ "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
+ "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
+ "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
+ "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
+ "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
+ "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
+ "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
+ "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
+ "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
+ "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
+ "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
+ "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
+ "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
+ "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
+ "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
+ "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
+ "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
+ "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
+ "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
+ "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
+ "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
+ "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
+ "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
+ "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
+ "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
+ "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
+ "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
+ "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
+ "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
+ "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
+ "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
+ "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
+ "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
+ "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
+ "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
+ "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
+ "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
+ "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
+ "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
+ "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
+ "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
+ "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
+ "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
+ "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
+ "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
+ "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
+ "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
+ "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
+ "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
+ "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
+ "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
+ "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
+ "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
+ "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
+ "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
+ "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
+ "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
+ "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
+ "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
+ "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
+ "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
+ "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
+ "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
+ "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
+ "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
+ "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
+ "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
+ "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
+ "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
+ "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
+ "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
+ "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
+ "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
+ "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
+ "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
+ "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
+ "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
+ "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
+ "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
+ "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
+ "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
+ "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
+ "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
+ "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
+ "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
+ "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
+ "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
+ "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
+ "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
+ "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
+ "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
+ "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
+ "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
+ "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
+ "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
+ "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
+ "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
+ "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
+ "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
+ "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
+ "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
+ "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
+ "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
+ "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
+ "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
+ "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
+ "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
+ "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
+ "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
+ "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
+ "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
+ "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
+ "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
+ "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
+ "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
+ "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
+ "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
+ "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
+ "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
+ "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
+ "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
+ "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
+ "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
+ "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
+ "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
+ "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
+ "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
+ "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
+ "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
+ "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
+ "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
+ "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
+ "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
+ "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
+ "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
+ "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
+ "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
+ "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
+ "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
+ "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
+ "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
+ "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
+ "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
+ "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
+ "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
+ "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
+ "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
+ "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
+ "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
+ "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
+ "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
+ "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
+ "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
+ "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
+ "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
+ "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
+ "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
+ "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
+ "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
+ "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
+ "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
+ "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
+ "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
+ "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
+ "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
+ "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
+ "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
+ "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
+ "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
+ "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
+ "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
+ "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
+ "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
+ "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
+ "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
+ "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
+ "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
+ "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
+ "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
+ "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
+ "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
+ "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
+ "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
+ "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
+ "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
+ "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
+ "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
+ "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
+ "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
+ "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
+ "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
+ "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
+ "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
+ "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
+ "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
+ "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
+ "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
+ "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
+ "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
+ "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
+ "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
+ "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
+ "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
+ "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
+ "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
+ "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
+ "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
+ "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
+ "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
+ "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
+ "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
+ "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
+ "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
+ "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
+ "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
+ "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
+ "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
+ "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
+ "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
+ "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
+ "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
+ "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
+ "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
+ "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
+ "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
+ "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
+ "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
+ "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
+ "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
+ "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
+ "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
+ "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
+ "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
+ "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
+ "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
+ "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
+ "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
+ "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
+ "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
+ "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
+ "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
+ "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
+
+ private final static String innerIndex1=
+ "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
+ "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
+ "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
+ "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
+ "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
+ "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
+ "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
+ "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
+ "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
+ "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
+ "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
+ "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
+ "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
+ "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
+ "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
+ "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
+ "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
+ "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
+ "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
+ "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
+ "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
+ "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
+ "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
+ "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
+ "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
+ "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
+ "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
+ "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
+ "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
+ "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
+ "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
+ "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
+ "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
+ "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
+ "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
+ "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
+ "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
+ "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
+ "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
+ "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
+ "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
+ "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
+ "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
+ "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
+ "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
+ "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
+ "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
+ "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
+ "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
+ "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
+ "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
+ "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
+ "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
+ "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
+ "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
+ "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
+ "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
+ "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
+ "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
+ "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
+ "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
+ "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
+ "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
+ "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
+ "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
+ "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
+ "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
+ "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
+ "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
+ "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
+ "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
+ "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
+ "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
+ "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
+ "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
+ "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
+ "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
+ "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
+ "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
+ "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
+ "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
+ "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
+ "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
+ "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
+ "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
+ "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
+ "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
+ "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
+ "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
+ "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
+ "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
+ "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
+ "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
+ "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
+ "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
+ "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
+ "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
+ "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
+ "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
+ "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
+ "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
+ "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
+ "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
+ "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
+ "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
+ "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
+ "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
+ "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
+ "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
+ "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
+ "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
+ "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
+ "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
+ "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
+ "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
+ "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
+ "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
+ "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
+ "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
+ "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
+ "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
+ "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
+ "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
+ "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
+ "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
+ "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
+ "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
+ "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
+ "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
+ "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
+ "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
+ "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
+ "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
+ "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
+ "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
+ "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
+ "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
+ "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
+ "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
+ "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
+ "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
+ "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
+ "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
+ "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
+ "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
+ "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
+ "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
+ "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
+ "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
+ "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
+ "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
+ "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
+ "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
+ "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
+ "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
+ "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
+ "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
+ "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
+ "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
+ "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
+ "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
+ "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
+ "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
+ "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
+ "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
+ "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
+ "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
+ "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
+ "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
+ "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
+ "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
+ "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
+ "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
+ "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
+ "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
+ "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
+ "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
+ "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
+ "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
+ "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
+ "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
+ "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
+ "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
+ "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
+ "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
+ "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
+ "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
+ "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
+ "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
+ "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
+ "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
+ "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
+ "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
+ "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
+ "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
+ "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
+ "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
+ "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
+ "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
+ "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
+ "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
+ "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
+ "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
+ "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
+ "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
+ "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
+ "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
+ "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
+ "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
+ "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
+ "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
+ "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
+ "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
+ "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
+ "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
+ "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
+ "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
+ "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
+ "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
+ "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
+ "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
+ "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
+ "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
+ "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
+ "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
+ "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
+ "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
+ "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
+ "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
+ "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
+ "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
+ "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
+ "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
+ "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
+ "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
+ "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
+ "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
+ "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
+ "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
+ "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
+ "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
+ "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
+ "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
+ "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
+ "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
+ "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
+ "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
+ "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
+ "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
+ "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
+ "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
+ "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
+ "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
+ "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
+ "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
+ "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
+ "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
+ "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
+ "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
+ "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
+ "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
+ "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
+ "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
+ "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
+ "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
+ "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
+ "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
+ "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
+ "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
+ "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
+ "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
+ "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
+ "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
+ "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
+ "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
+ "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
+ "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
+ "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
+ "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
+ "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
+ "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
+ "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
+ "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
+ "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
+ "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
+ "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
+ "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
+ "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
+ "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
+ "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
+ "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
+ "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
+ "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
+ "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
+ "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
+ "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
+ "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
+ "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
+ "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
+ "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
+ "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
+ "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
+ "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
+ "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
+ "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
+ "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
+ "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
+ "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
+ "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
+ "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
+ "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
+ "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
+ "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
+ "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
+ "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
+ "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
+ "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
+ "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
+ "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
+ "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
+ "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
+ "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
+ "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
+ "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
+ "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
+ "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
+ "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
+ "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
+ "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
+ "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
+ "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
+ "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
+ "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
+ "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
+ "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
+ "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
+ "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
+ "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
+ "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
+ "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
+ "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
+ "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
+ "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
+ "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
+ "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
+ "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
+ "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
+ "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
+ "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
+ "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
+ "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
+ "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
+ "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
+ "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
+ "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
+ "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
+ "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
+ "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
+ "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
+ "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
+ "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
+ "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
+ "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
+ "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
+ "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
+ "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
+ "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
+ "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
+ "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
+ "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
+ "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
+ "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
+ "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
+ "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
+ "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
+ "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
+ "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
+ "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
+ "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
+ "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
+ "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
+ "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
+ "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
+ "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
+ "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
+ "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
+ "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
+ "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
+ "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
+ "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
+ "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
+ "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
+ "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
+ "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
+ "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
+ "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
+ "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
+ "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
+ "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
+ "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
+ "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
+ "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
+ "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
+ "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
+ "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
+ "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
+ "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
+ "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
+ "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
+ "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
+ "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
+ "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
+ "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
+ "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
+ "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
+ "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
+ "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
+ "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
+ "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
+ "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
+ "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
+ "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
+ "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
+ "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
+ "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
+ "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
+ "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
+ "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
+ "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
+ "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
+ "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
+ "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
+ "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
+ "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
+ "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
+ "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
+ "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
+ "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
+ "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
+ "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
+ "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
+ "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
+ "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
+ "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
+ "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
+ "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
+ "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
+ "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
+ "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
+ "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
+ "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
+ "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
+ "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
+ "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
+ "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
+ "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
+ "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
+ "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
+ "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
+ "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
+ "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
+ "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
+ "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
+ "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
+ "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
+ "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
+ "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
+ "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
+ "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
+ "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
+ "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
+ "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
+ "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
+ "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
+ "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
+ "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
+ "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
+ "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
+ "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
+ "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
+ "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
+ "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
+ "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
+ "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
+ "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
+ "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
+ "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
+ "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
+ "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
+ "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
+ "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
+ "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
+ "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
+ "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
+ "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
+ "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
+ "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
+ "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
+ "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
+ "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
+ "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
+ "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
+ "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
+ "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
+ "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
+ "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
+ "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
+ "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
+ "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
+ "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
+ "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
+ "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
+
+ private final static String innerIndex2=
+ "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
+ "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
+ "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
+ "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
+ "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
+ "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
+ "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
+ "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
+ "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
+ "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
+ "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
+ "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
+ "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
+ "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
+ "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
+ "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
+ "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
+ "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
+ "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
+ "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
+ "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
+ "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
+ "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
+ "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
+ "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
+ "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
+ "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
+ "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
+ "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
+ "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
+ "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
+ "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
+ "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
+ "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
+ "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
+ "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
+ "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
+ "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
+ "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
+ "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
+ "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
+ "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
+ "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
+ "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
+ "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
+ "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
+ "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
+ "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
+ "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
+ "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
+ "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
+ "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
+ "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
+ "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
+ "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
+ "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
+ "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
+ "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
+ "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
+ "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
+ "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
+ "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
+ "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
+ "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
+ "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
+ "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
+ "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
+ "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
+ "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
+ "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
+ "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
+ "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
+ "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
+ "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
+ "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
+ "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
+ "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
+ "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
+ "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
+ "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
+ "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
+ "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
+ "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
+ "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
+ "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
+ "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
+ "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
+ "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
+ "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
+ "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
+ "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
+ "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
+ "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
+ "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
+ "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
+ "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
+ "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
+ "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
+ "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
+ "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
+ "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
+ "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
+ "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
+ "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
+ "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
+ "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
+ "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
+ "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
+ "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
+ "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
+ "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
+ "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
+ "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
+ "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
+ "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
+ "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
+ "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
+ "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
+ "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
+ "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
+ "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
+ "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
+ "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
+ "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
+ "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
+ "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
+ "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
+ "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
+ "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
+ "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
+ "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
+ "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
+ "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
+ "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
+ "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
+ "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
+ "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
+ "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
+ "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
+ "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
+ "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
+ "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
+ "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
+ "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
+ "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
+ "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
+ "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
+ "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
+ "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
+ "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
+ "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
+ "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
+ "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
+ "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
+ "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
+ "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
+ "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
+ "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
+ "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
+ "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
+ "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
+ "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
+ "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
+ "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
+ "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
+ "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
+ "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
+ "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
+ "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
+ "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
+ "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
+ "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
+ "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
+ "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
+ "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
+ "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
+ "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
+ "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
+ "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
+ "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
+ "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
+ "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
+ "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
+ "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
+ "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
+ "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
+ "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
+ "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
+ "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
+ "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
+ "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
+ "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
+ "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
+ "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
+ "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
+ "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
+ "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
+ "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
+ "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
+ "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
+ "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
+ "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
+ "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
+ "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
+ "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
+ "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
+ "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
+ "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
+ "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
+ "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
+ "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
+ "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
+ "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
+ "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
+ "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
+ "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
+ "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
+ "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
+ "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
+ "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
+ "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
+ "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
+ "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
+ "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
+ "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
+ "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
+ "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
+ "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
+ "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
+ "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
+ "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
+ "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
+ "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
+ "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
+ "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
+ "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
+ "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
+ "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
+ "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
+ "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
+ "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
+ "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
+ "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
+ "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
+ "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
+ "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
+ "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
+ "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
+ "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
+ "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
+ "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
+ "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
+ "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
+ "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
+ "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
+ "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
+ "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
+ "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
+ "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
+ "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
+ "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
+ "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
+ "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
+ "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
+ "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
+ "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
+ "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
+ "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
+ "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
+ "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
+ "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
+ "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
+ "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
+ "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
+ "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
+ "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
+ "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
+ "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
+ "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
+ "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
+ "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
+ "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
+ "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
+ "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
+ "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
+ "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
+ "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
+ "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
+ "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
+ "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
+ "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
+ "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
+ "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
+ "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
+ "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
+ "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
+ "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
+ "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
+ "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
+ "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
+ "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
+ "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
+ "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
+ "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
+ "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
+ "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
+ "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
+ "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
+ "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
+ "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
+ "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
+ "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
+ "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
+ "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
+ "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
+ "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
+ "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
+ "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
+ "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
+ "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
+ "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
+ "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
+ "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
+ "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
+ "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
+ "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
+ "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
+ "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
+ "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
+ "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
+ "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
+ "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
+ "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
+ "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
+ "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
+ "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
+ "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
+ "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
+ "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
+ "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
+ "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
+ "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
+ "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
+ "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
+ "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
+ "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
+ "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
+ "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
+ "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
+ "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
+ "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
+ "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
+ "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
+ "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
+ "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
+ "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
+ "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
+ "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
+ "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
+ "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
+ "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
+ "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
+ "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
+ "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
+ "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
+ "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
+ "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
+ "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
+ "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
+ "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
+ "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
+ "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
+ "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
+ "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
+ "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
+ "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
+ "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
+ "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
+ "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
+ "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
+ "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
+ "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
+ "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
+ "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
+ "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
+ "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
+ "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
+ "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
+ "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
+ "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
+ "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
+ "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
+ "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
+ "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
+ "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
+ "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
+ "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
+ "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
+ "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
+ "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
+ "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
+ "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
+ "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
+ "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
+ "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
+ "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
+ "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
+ "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
+ "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
+ "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
+ "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
+ "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
+ "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
+ "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
+ "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
+ "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
+ "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
+ "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
+ "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
+ "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
+ "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
+ "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
+ "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
+ "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
+ "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
+ "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
+ "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
+ "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
+ "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
+ "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
+ "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
+ "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
+ "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
+ "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
+ "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
+ "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
+ "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
+ "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
+ "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
+ "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
+ "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
+ "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
+ "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
+ "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
+ "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
+ "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
+ "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
+ "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
+ "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
+ "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
+ "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
+ "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
+ "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
+ "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
+ "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
+ "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
+ "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
+ "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
+ "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
+ "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
+ "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
+ "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
+ "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
+ "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
+ "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
+ "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
+ "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
+ "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
+ "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
+ "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
+ "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
+ "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
+ "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
+ "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
+ "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
+ "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
+ "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
+ "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
+ "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
+ "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
+ "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
+ "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
+ "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
+ "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
+
+ private final static String innerIndex3=
+ "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
+ "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
+ "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
+ "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
+ "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
+ "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
+ "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
+ "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
+ "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
+ "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
+ "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
+ "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
+ "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
+ "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
+ "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
+ "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
+ "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
+ "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
+ "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
+ "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
+ "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
+ "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
+ "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
+ "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
+ "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
+ "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
+ "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
+ "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
+ "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
+ "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
+ "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
+ "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
+ "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
+ "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
+ "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
+ "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
+ "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
+ "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
+ "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
+ "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
+ "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
+ "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
+ "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
+ "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
+ "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
+ "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
+ "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
+ "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
+ "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
+ "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
+ "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
+ "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
+ "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
+ "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
+ "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
+ "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
+ "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
+ "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
+ "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
+ "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
+ "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
+ "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
+ "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
+ "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
+ "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
+ "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
+ "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
+ "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
+ "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
+ "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
+ "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
+ "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
+ "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
+ "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
+ "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
+ "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
+ "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
+ "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
+ "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
+ "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
+ "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
+ "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
+ "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
+ "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
+ "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
+ "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
+ "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
+ "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
+ "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
+ "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
+ "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
+ "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
+ "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
+ "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
+ "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
+ "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
+ "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
+ "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
+ "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
+ "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
+ "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
+ "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
+ "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
+ "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
+ "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
+ "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
+ "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
+ "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
+ "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
+ "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
+ "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
+ "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
+ "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
+ "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
+ "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
+ "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
+ "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
+ "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
+ "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
+ "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
+ "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
+ "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
+ "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
+ "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
+ "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
+ "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
+ "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
+ "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
+ "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
+ "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
+ "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
+ "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
+ "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
+ "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
+ "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
+ "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
+ "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
+ "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
+ "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
+ "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
+ "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
+ "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
+ "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
+ "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
+ "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
+ "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
+ "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
+ "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
+ "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
+ "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
+ "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
+ "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
+ "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
+ "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
+ "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
+ "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
+ "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
+ "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
+ "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
+ "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
+ "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
+ "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
+ "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
+ "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
+ "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
+ "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
+ "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
+ "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
+ "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
+ "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
+ "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
+ "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
+ "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
+ "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
+ "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
+ "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
+ "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
+ "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
+ "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
+ "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
+ "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
+ "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
+ "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
+ "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
+ "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
+ "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
+ "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
+ "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
+ "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
+ "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
+ "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
+ "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
+ "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
+ "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
+ "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
+ "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
+ "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
+ "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
+ "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
+ "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
+ "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
+ "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
+ "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
+ "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
+ "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
+ "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
+ "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
+ "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
+ "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
+ "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
+ "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
+ "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
+ "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
+ "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
+ "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
+ "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
+ "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
+ "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
+ "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
+ "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
+ "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
+ "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
+ "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
+ "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
+ "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
+ "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
+ "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
+ "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
+ "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
+ "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
+ "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
+ "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
+ "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
+ "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
+ "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
+ "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
+ "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
+ "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
+ "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
+ "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
+ "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
+ "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
+ "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
+ "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
+ "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
+ "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
+ "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
+ "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
+ "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
+ "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
+ "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
+ "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
+ "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
+ "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
+ "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
+ "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
+ "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
+ "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
+ "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
+ "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
+ "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
+ "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
+ "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
+ "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
+ "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
+ "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
+ "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
+ "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
+ "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
+ "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
+ "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
+ "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
+ "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
+ "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
+ "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
+ "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
+ "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
+ "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
+ "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
+ "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
+ "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
+ "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
+ "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
+ "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
+ "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
+ "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
+ "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
+ "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
+ "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
+ "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
+ "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
+ "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
+ "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
+ "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
+ "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
+ "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
+ "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
+ "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
+ "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
+ "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
+ "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
+ "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
+ "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
+ "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
+ "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
+ "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
+ "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
+ "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
+ "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
+ "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
+ "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
+ "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
+ "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
+ "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
+ "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
+ "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
+ "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
+ "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
+ "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
+ "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
+ "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
+ "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
+ "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
+ "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
+ "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
+ "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
+ "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
+ "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
+ "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
+ "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
+ "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
+ "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
+ "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
+ "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
+ "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
+ "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
+ "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
+ "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
+ "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
+ "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
+ "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
+ "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
+ "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
+ "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
+ "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
+ "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
+ "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
+ "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
+ "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
+ "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
+ "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
+ "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
+ "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
+ "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
+ "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
+ "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
+ "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
+ "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
+ "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
+ "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
+ "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
+ "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
+ "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
+ "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
+ "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
+ "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
+ "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
+ "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
+ "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
+ "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
+ "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
+ "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
+ "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
+ "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
+ "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
+ "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
+ "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
+ "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
+ "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
+ "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
+ "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
+ "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
+ "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
+ "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
+ "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
+ "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
+ "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
+ "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
+ "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
+ "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
+ "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
+ "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
+ "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
+ "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
+ "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
+ "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
+ "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
+ "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
+ "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
+ "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
+ "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
+ "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
+ "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
+ "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
+ "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
+ "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
+ "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
+ "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
+ "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
+ "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
+ "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
+ "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
+ "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
+ "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
+ "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
+ "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
+ "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
+ "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
+ "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
+ "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
+ "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
+ "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
+ "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
+ "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
+ "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
+ "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
+ "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
+ "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
+ "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
+ "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
+ "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
+ "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
+ "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
+ "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
+ "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
+ "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
+ "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
+ "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
+ "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
+ "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
+ "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
+ "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
+ "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
+ "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
+ "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
+ "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
+ "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
+ "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
+ "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
+ "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
+ "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
+ "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
+ "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
+ "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
+ "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
+ "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
+ "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
+ "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
+ "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
+ "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
+ "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
+ "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
+ "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
+ "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
+ "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
+ "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
+ "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
+ "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
+ "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
+ "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
+ "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
+ "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
+ "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
+ "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
+ "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
+ "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
+ "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
+ "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
+ "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
+
+ private final static String innerIndex4=
+ "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
+ "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
+ "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
+ "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
+ "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
+ "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
+ "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
+ "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
+ "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
+ "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
+ "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
+ "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
+ "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
+ "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
+ "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
+ "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
+ "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
+ "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
+ "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
+ "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
+ "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
+ "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
+ "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
+ "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
+ "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
+ "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
+ "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
+ "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
+ "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
+ "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
+ "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
+ "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
+ "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
+ "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
+ "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
+ "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
+ "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
+ "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
+ "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
+ "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
+ "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
+ "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
+ "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
+ "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
+ "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
+ "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
+ "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
+ "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
+ "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
+ "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
+ "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
+ "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
+ "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
+ "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
+ "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
+ "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
+ "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
+ "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
+ "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
+ "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
+ "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
+ "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
+ "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
+ "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
+ "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
+ "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
+ "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
+ "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
+ "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
+ "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
+ "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
+ "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
+ "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
+ "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
+ "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
+ "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
+ "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
+ "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
+ "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
+ "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
+ "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
+ "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
+ "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
+ "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
+ "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
+ "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
+ "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
+ "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
+ "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
+ "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
+ "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
+ "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
+ "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
+ "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
+ "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
+ "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
+ "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
+ "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
+ "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
+ "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
+ "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
+ "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
+ "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
+ "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
+ "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
+ "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
+ "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
+ "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
+ "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
+ "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
+ "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
+ "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
+ "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
+ "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
+ "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
+ "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
+ "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
+ "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
+ "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
+ "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
+ "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
+ "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
+ "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
+ "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
+ "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
+ "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
+ "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
+ "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
+ "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
+ "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
+ "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
+ "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
+ "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
+ "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
+ "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
+ "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
+ "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
+ "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
+ "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
+ "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
+ "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
+ "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
+ "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
+ "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
+ "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
+ "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
+ "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
+ "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
+ "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
+ "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
+ "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
+ "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
+ "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
+ "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
+ "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
+ "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
+ "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
+ "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
+ "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
+ "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
+ "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
+ "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
+ "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
+ "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
+ "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
+ "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
+ "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
+ "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
+ "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
+ "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
+ "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
+ "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
+ "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
+ "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
+ "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
+ "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
+ "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
+ "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
+ "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
+ "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
+ "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
+ "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
+ "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
+ "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
+ "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
+ "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
+ "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
+ "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
+ "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
+ "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
+ "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
+ "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
+ "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
+ "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
+ "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
+ "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
+ "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
+ "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
+ "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
+ "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
+ "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
+ "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
+ "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
+ "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
+ "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
+ "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
+ "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
+ "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
+ "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
+ "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
+ "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
+ "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
+ "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
+ "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
+ "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
+ "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
+ "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
+ "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
+ "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
+ "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
+ "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
+ "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
+ "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
+ "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
+ "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
+ "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
+ "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
+ "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
+ "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
+ "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
+ "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
+ "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
+ "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
+ "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
+ "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
+ "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
+ "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
+ "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
+ "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
+ "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
+ "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
+ "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
+ "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
+ "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
+ "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
+ "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
+ "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
+ "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
+ "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
+ "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
+ "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
+ "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
+ "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
+ "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
+ "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
+ "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
+ "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
+ "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
+ "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
+ "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
+ "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
+ "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
+ "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
+ "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
+ "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
+ "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
+ "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
+ "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
+ "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
+ "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
+ "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
+ "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
+ "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
+ "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
+ "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
+ "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
+ "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
+ "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
+ "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
+ "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
+ "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
+ "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
+ "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
+ "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
+ "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
+ "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
+ "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
+ "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
+ "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
+ "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
+ "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
+ "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
+ "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
+ "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
+ "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
+ "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
+ "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
+ "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
+ "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
+ "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
+ "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
+ "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
+ "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
+ "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
+ "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
+ "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
+ "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
+ "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
+ "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
+ "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
+ "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
+ "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
+ "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
+ "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
+ "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
+ "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
+ "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
+ "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
+ "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
+ "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
+ "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
+ "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
+ "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
+ "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
+ "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
+ "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
+ "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
+ "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
+ "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
+ "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
+ "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
+ "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
+ "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
+ "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
+ "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
+ "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
+ "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
+ "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
+ "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
+ "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
+ "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
+ "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
+ "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
+ "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
+ "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
+ "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
+ "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
+ "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
+ "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
+ "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
+ "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
+ "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
+ "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
+ "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
+ "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
+ "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
+ "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
+ "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
+ "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
+ "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
+ "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
+ "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
+ "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
+ "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
+ "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
+ "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
+ "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
+ "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
+ "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
+ "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
+ "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
+ "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
+ "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
+ "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
+ "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
+ "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
+ "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
+ "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
+ "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
+ "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
+ "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
+ "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
+ "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
+ "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
+ "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
+ "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
+ "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
+ "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
+ "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
+ "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
+ "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
+ "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
+ "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
+ "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
+ "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
+ "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
+ "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
+ "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
+ "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
+ "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
+ "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
+ "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
+ "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
+ "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
+ "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
+ "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
+ "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
+ "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
+ "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
+ "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
+ "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
+ "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
+ "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
+ "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
+ "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
+ "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
+ "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
+ "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
+ "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
+ "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
+ "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
+ "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
+ "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
+ "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
+ "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
+ "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
+ "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
+ "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
+ "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
+ "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
+ "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
+ "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
+ "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
+ "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
+ "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
+ "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
+ "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
+ "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
+ "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
+ "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
+ "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
+ "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
+ "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
+ "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
+ "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
+ "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
+ "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
+ "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
+ "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
+ "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
+ "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
+ "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
+ "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
+ "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
+ "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
+ "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
+ "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
+ "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
+ "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
+ "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
+ "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
+ "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
+ "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
+ "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
+ "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
+ "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
+ "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
+ "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
+ "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
+ "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
+ "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
+ "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
+ "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
+ "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
+ "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
+ "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
+ "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
+ "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
+ "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
+ "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
+ "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
+ "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
+ "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
+ "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
+ "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
+ "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
+ "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
+ "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
+ "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
+ "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
+
+ private final static String innerIndex5=
+ "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
+ "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
+ "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
+ "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
+ "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
+ "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
+ "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
+ "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
+ "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
+ "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
+ "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
+ "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
+ "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
+ "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
+ "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
+ "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
+ "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
+ "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
+ "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
+ "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
+ "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
+ "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
+ "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
+ "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
+ "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
+ "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
+ "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
+ "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
+ "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
+ "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
+ "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
+ "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
+ "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
+ "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
+ "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
+ "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
+ "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
+ "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
+ "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
+ "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
+ "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
+ "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
+ "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
+ "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
+ "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
+ "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
+ "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
+ "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
+ "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
+ "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
+ "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
+ "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
+ "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
+ "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
+ "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
+ "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
+ "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
+ "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
+ "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
+ "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
+ "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
+ "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
+ "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
+ "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
+ "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
+ "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
+ "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
+ "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
+ "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
+ "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
+ "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
+ "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
+ "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
+ "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
+ "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
+ "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
+ "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
+ "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
+ "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
+ "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
+ "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
+ "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
+ "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
+ "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
+ "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
+ "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
+ "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
+ "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
+ "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
+ "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
+ "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
+ "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
+ "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
+ "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
+ "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
+ "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
+ "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
+ "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
+ "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
+ "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
+ "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
+ "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
+ "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
+ "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
+ "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
+ "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
+ "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
+ "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
+ "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
+ "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
+ "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
+ "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
+ "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
+ "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
+ "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
+ "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
+ "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
+ "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
+ "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
+ "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
+ "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
+ "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
+ "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
+ "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
+ "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
+ "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
+ "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
+ "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
+ "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
+ "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
+ "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
+ "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
+ "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
+ "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
+ "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
+ "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
+ "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
+ "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
+ "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
+ "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
+ "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
+ "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
+ "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
+ "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
+ "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
+ "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
+ "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
+ "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
+ "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
+ "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
+ "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
+ "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
+ "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
+ "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
+ "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
+ "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
+ "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
+ "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
+ "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
+ "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
+ "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
+ "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
+ "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
+ "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
+ "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
+ "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
+ "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
+ "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
+ "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
+ "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
+ "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
+ "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
+ "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
+ "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
+ "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
+ "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
+ "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
+ "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
+ "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
+ "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
+ "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
+ "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
+ "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
+ "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
+ "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
+ "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
+ "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
+ "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
+ "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
+ "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
+ "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
+ "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
+ "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
+ "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
+ "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
+ "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
+ "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
+ "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
+ "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
+ "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
+ "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
+ "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
+ "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
+ "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
+ "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
+ "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
+ "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
+ "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
+ "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
+ "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
+ "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
+ "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
+ "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
+ "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
+ "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
+ "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
+ "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
+ "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
+ "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
+ "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
+ "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
+ "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
+ "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
+ "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
+ "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
+ "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
+ "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
+ "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
+ "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
+ "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
+ "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
+ "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
+ "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
+ "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
+ "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
+ "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
+ "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
+ "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
+ "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
+ "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
+ "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
+ "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
+ "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
+ "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
+ "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
+ "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
+ "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
+ "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
+ "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
+ "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
+ "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
+ "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
+ "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
+ "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
+ "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
+ "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
+ "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
+ "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
+ "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
+ "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
+ "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
+ "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
+ "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
+ "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
+ "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
+ "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
+ "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
+ "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
+ "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
+ "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
+ "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
+ "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
+ "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
+ "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
+ "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
+ "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
+ "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
+ "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
+ "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
+ "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
+ "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
+ "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
+ "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
+ "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
+ "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
+ "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
+ "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
+ "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
+ "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
+ "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
+ "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
+ "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
+ "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
+ "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
+ "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
+ "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
+ "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
+ "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
+ "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
+ "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
+ "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
+ "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
+ "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
+ "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
+ "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
+ "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
+ "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
+ "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
+ "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
+ "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
+ "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
+ "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
+ "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
+ "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
+ "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
+ "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
+ "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
+ "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
+ "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
+ "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
+ "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
+ "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
+ "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
+ "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
+ "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
+ "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
+ "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
+ "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
+ "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
+ "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
+ "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
+ "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
+ "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
+ "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
+ "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
+ "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
+ "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
+ "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
+ "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
+ "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
+ "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
+ "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
+ "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
+ "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
+ "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
+ "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
+ "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
+ "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
+ "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
+ "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
+ "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
+ "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
+ "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
+ "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
+ "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
+ "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
+ "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
+ "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
+ "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
+ "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
+ "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
+ "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
+ "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
+ "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
+ "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
+ "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
+ "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
+ "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
+ "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
+ "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
+ "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
+ "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
+ "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
+ "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
+ "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
+ "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
+ "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
+ "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
+ "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
+ "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
+ "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
+ "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
+ "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
+ "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
+ "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
+ "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
+ "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
+ "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
+ "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
+ "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
+ "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
+ "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
+ "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
+ "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
+ "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
+ "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
+ "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
+ "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
+ "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
+ "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
+ "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
+ "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
+ "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
+ "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
+ "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
+ "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
+ "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
+ "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
+ "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
+ "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
+ "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
+ "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
+ "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
+ "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
+ "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
+ "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
+ "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
+ "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
+ "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
+ "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
+ "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
+ "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
+ "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
+ "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
+ "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
+ "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
+ "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
+ "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
+ "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
+ "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
+ "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
+ "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
+ "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
+ "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
+ "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
+ "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
+ "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
+ "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
+ "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
+ "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
+ "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
+ "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
+ "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
+ "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
+ "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
+ "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
+ "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
+ "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
+ "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
+ "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
+ "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
+ "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
+ "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
+ "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
+ "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
+ "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
+ "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
+ "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
+ "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
+ "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
+ "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
+ "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
+ "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
+ "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
+ "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
+ "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
+ "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
+ "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
+ "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
+ "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
+ "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
+ "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
+ "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
+ "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
+ "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
+ "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
+ "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
+ "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
+ "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
+ "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
+ "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
+ "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
+ "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
+ "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
+ "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
+ "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
+ "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
+ "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
+ "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
+ "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
+ "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
+ "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
+ "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
+ "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
+ "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
+ "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
+ "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
+ "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
+ "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
+ "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
+ "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
+ "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
+ "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
+ "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
+ "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
+ "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
+ "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
+ "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
+ "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
+ "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
+ "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
+ "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
+
+ private final static String innerIndex6=
+ "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
+ "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
+ "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
+ "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
+ "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
+ "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
+ "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
+ "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
+ "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
+ "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
+ "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
+ "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
+ "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
+ "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
+ "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
+ "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
+ "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
+ "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
+ "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
+ "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
+ "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
+ "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
+ "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
+ "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
+ "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
+ "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
+ "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
+ "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
+ "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
+ "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
+ "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
+ "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
+ "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
+ "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
+ "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
+ "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
+ "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
+ "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
+ "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
+ "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
+ "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
+ "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
+ "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
+ "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
+ "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
+ "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
+ "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
+ "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
+ "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
+ "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
+ "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
+ "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
+ "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
+ "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
+ "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
+ "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
+ "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
+ "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
+ "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
+ "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
+ "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
+ "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
+ "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
+ "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
+ "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
+ "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
+ "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
+ "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
+ "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
+ "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
+ "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
+ "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
+ "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
+ "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
+ "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
+ "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
+ "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
+ "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
+ "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
+ "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
+ "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
+ "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
+ "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
+ "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
+ "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
+ "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
+ "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
+ "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
+ "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
+ "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
+ "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
+ "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
+ "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
+ "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
+ "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
+ "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
+ "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
+ "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
+ "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
+ "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
+ "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
+ "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
+ "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
+ "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
+ "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
+ "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
+ "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
+ "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
+ "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
+ "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
+ "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
+ "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
+ "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
+ "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
+ "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
+ "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
+ "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
+ "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
+ "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
+ "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
+ "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
+ "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
+ "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
+ "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
+ "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
+ "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
+ "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
+ "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
+ "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
+ "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
+ "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
+ "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
+ "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
+ "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
+ "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
+ "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
+ "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
+ "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
+ "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
+ "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
+ "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
+ "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
+ "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
+ "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
+ "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
+ "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
+ "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
+ "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
+ "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
+ "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
+ "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
+ "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
+ "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
+ "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
+ "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
+ "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
+ "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
+ "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
+ "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
+ "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
+ "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
+ "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
+ "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
+ "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
+ "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
+ "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
+ "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
+ "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
+ "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
+ "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
+ "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
+ "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
+ "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
+ "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
+ "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
+ "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
+ "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
+ "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
+ "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
+ "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
+ "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
+ "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
+ "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
+ "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
+ "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
+ "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
+ "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
+ "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
+ "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
+ "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
+ "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
+ "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
+ "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
+ "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
+ "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
+ "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
+ "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
+ "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
+ "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
+ "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
+ "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
+ "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
+ "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
+ "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
+ "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
+ "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
+ "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
+ "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
+ "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
+ "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
+ "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
+ "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
+ "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
+ "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
+ "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
+ "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
+ "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
+ "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
+ "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
+ "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
+ "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
+ "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
+ "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
+ "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
+ "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
+ "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
+ "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
+ "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
+ "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
+ "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
+ "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
+ "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
+ "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
+ "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
+ "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
+ "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
+ "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
+ "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
+ "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
+ "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
+ "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
+ "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
+ "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
+ "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
+ "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
+ "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
+ "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
+ "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
+ "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
+ "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
+ "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
+ "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
+ "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
+ "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
+ "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
+ "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
+ "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
+ "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
+ "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
+ "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
+ "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
+ "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
+ "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
+ "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
+ "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
+ "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
+ "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
+ "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
+ "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
+ "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
+ "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
+ "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
+ "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
+ "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
+ "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
+ "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
+ "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
+ "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
+ "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
+ "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
+ "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
+ "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
+ "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
+ "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
+ "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
+ "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
+ "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
+ "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
+ "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
+ "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
+ "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
+ "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
+ "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
+ "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
+ "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
+ "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
+ "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
+ "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
+ "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
+ "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
+ "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
+ "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
+ "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
+ "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
+ "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
+ "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
+ "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
+ "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
+ "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
+ "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
+ "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
+ "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
+ "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
+ "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
+ "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
+ "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
+ "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
+ "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
+ "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
+ "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
+ "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
+ "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
+ "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
+ "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
+ "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
+ "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
+ "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
+ "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
+ "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
+ "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
+ "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
+ "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
+ "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
+ "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
+ "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
+ "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
+ "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
+ "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
+ "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
+ "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
+ "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
+ "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
+ "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
+ "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
+ "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
+ "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
+ "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
+ "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
+ "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
+ "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
+ "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
+ "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
+ "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
+ "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
+ "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
+ "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
+ "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
+ "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
+ "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
+ "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
+ "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
+ "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
+ "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
+ "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
+ "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
+ "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
+ "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
+ "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
+ "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
+ "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
+ "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
+ "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
+ "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
+ "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
+ "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
+ "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
+ "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
+ "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
+ "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
+ "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
+ "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
+ "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
+ "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
+ "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
+ "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
+ "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
+ "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
+ "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
+ "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
+ "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
+ "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
+ "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
+ "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
+ "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
+ "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
+ "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
+ "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
+ "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
+ "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
+ "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
+ "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
+ "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
+ "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
+ "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
+ "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
+ "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
+ "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
+ "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
+ "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
+ "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
+ "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
+ "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
+ "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
+ "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
+ "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
+ "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
+ "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
+ "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
+ "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
+ "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
+ "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
+ "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
+ "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
+ "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
+ "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
+ "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
+ "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
+ "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
+ "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
+ "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
+ "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
+ "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
+ "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
+ "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
+ "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
+ "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
+ "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
+ "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
+ "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
+ "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
+ "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
+ "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
+ "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
+ "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
+ "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
+ "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
+ "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
+ "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
+ "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
+ "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
+ "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
+ "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
+ "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
+ "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
+ "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
+ "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
+ "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
+ "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
+ "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
+ "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
+ "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
+ "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
+ "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
+ "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
+ "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
+ "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
+ "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
+ "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
+ "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
+ "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
+ "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
+ "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
+ "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
+ "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
+ "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
+ "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
+ "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
+ "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
+ "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
+ "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
+ "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
+ "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
+ "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
+ "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
+ "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
+ "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
+ "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
+ "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
+ "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
+ "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
+ "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
+ "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
+ "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
+ "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
+ "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
+ "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
+ "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
+ "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
+ "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
+ "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
+ "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
+ "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
+ "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
+ "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
+ "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
+ "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
+ "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
+ "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
+ "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
+ "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
+ "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
+ "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
+
+ private final static String innerIndex7=
+ "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
+ "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
+ "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
+ "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
+ "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
+ "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
+ "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
+ "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
+ "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
+ "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
+ "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
+ "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
+ "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
+ "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
+ "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
+ "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
+ "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
+ "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
+ "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
+ "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
+ "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
+ "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
+ "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
+ "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
+ "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
+ "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
+ "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
+ "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
+ "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
+ "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
+ "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
+ "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
+ "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
+ "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
+ "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
+ "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
+ "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
+ "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
+ "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
+ "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
+ "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
+ "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
+ "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
+ "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
+ "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
+ "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
+ "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
+ "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
+ "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
+ "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
+ "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
+ "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
+ "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
+ "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
+ "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
+ "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
+ "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
+ "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
+ "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
+ "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
+ "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
+ "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
+ "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
+ "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
+ "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
+ "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
+ "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
+ "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
+ "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
+ "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
+ "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
+ "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
+ "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
+ "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
+ "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
+ "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
+ "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
+ "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
+ "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
+ "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
+ "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
+ "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
+ "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
+ "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
+ "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
+ "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
+ "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
+ "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
+ "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
+ "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
+ "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
+ "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
+ "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
+ "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
+ "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
+ "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
+ "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
+ "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
+ "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
+ "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
+ "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
+ "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
+ "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
+ "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
+ "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
+ "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
+ "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
+ "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
+ "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
+ "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
+ "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
+ "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
+ "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
+ "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
+ "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
+ "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
+ "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
+ "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
+ "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
+ "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
+ "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
+ "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
+ "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
+ "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
+ "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
+ "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
+ "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
+ "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
+ "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
+ "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
+ "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
+ "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
+ "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
+ "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
+ "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
+ "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
+ "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
+ "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
+ "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
+ "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
+ "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
+ "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
+ "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
+ "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
+ "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
+ "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
+ "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
+ "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
+ "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
+ "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
+ "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
+ "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
+ "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
+ "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
+ "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
+ "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
+ "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
+ "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
+ "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
+ "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
+ "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
+ "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
+ "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
+ "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
+ "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
+ "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
+ "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
+ "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
+ "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
+ "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
+ "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
+ "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
+ "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
+ "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
+ "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
+ "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
+ "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
+ "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
+ "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
+ "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
+ "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
+ "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
+ "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
+ "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
+ "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
+ "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
+ "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
+ "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
+ "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
+ "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
+ "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
+ "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
+ "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
+ "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
+ "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
+ "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
+ "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
+ "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
+ "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
+ "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
+ "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
+ "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
+ "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
+ "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
+ "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
+ "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
+ "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
+ "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
+ "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
+ "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
+ "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
+ "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
+ "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
+ "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
+ "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
+ "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
+ "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
+ "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
+ "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
+ "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
+ "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
+ "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
+ "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
+ "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
+ "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
+ "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
+ "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
+ "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
+ "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
+ "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
+ "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
+ "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
+ "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
+ "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
+ "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
+ "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
+ "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
+ "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
+ "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
+ "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
+ "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
+ "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
+ "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
+ "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
+ "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
+ "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
+ "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
+ "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
+ "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
+ "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
+ "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
+ "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
+ "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
+ "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
+ "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
+ "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
+ "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
+ "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
+ "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
+ "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
+ "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
+ "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
+ "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
+ "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
+ "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
+ "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
+ "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
+ "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
+ "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
+ "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
+ "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
+ "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
+ "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
+ "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
+ "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
+ "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
+ "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
+ "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
+ "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
+ "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
+ "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
+ "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
+ "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
+ "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
+ "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
+ "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
+ "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
+ "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
+ "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
+ "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
+ "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
+ "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
+ "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
+ "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
+ "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
+ "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
+ "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
+ "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
+ "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
+ "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
+ "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
+ "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
+ "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
+ "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
+ "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
+ "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
+ "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
+ "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
+ "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
+ "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
+ "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
+ "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
+ "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
+ "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
+ "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
+ "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
+ "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
+ "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
+ "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
+ "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
+ "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
+ "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
+ "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
+ "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
+ "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
+ "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
+ "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
+ "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
+ "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
+ "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
+ "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
+ "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
+ "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
+ "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
+ "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
+ "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
+ "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
+ "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
+ "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
+ "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
+ "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
+ "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
+ "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
+ "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
+ "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
+ "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
+ "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
+ "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
+ "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
+ "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
+ "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
+ "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
+ "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
+ "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
+ "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
+ "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
+ "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
+ "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
+ "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
+ "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
+ "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
+ "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
+ "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
+ "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
+ "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
+ "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
+ "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
+ "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
+ "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
+ "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
+ "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
+ "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
+ "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
+ "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
+ "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
+ "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
+ "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
+ "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
+ "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
+ "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
+ "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
+ "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
+ "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
+ "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
+ "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
+ "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
+ "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
+ "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
+ "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
+ "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
+ "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
+ "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
+ "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
+ "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
+ "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
+ "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
+ "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
+ "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
+ "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
+ "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
+ "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
+ "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
+ "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
+ "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
+ "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
+ "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
+ "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
+ "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
+ "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
+ "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
+ "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
+ "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
+ "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
+ "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
+ "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
+ "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
+ "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
+ "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
+ "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
+ "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
+ "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
+ "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
+ "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
+ "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
+ "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
+ "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
+ "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
+ "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
+ "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
+ "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
+ "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
+ "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
+ "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
+ "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
+ "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
+ "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
+ "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
+ "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
+ "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
+ "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
+ "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
+ "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
+ "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
+ "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
+ "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
+ "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
+ "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
+ "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
+ "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
+ "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
+ "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
+ "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
+ "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
+ "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
+ "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
+ "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
+ "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
+ "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
+ "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
+ "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
+ "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
+ "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
+ "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
+ "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
+ "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
+ "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
+ "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
+ "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
+ "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
+ "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
+ "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
+ "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
+ "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
+ "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
+ "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
+ "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
+ "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
+ "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
+ "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
+ "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
+ "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
+ "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
+ "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
+ "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
+ "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
+ "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
+ "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
+ "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
+ "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
+ "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
+ "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
+ "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
+ "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
+ "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
+ "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
+ "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
+ "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
+ "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
+ "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
+ "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
+ "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
+ "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
+ "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
+ "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
+ "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
+ "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
+ "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
+ "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
+ "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
+ "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
+ "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
+ "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
+
+ private final static String innerIndex8=
+ "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
+ "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
+ "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
+ "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
+ "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
+ "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
+ "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
+ "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
+ "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
+ "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
+ "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
+ "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
+ "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
+ "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
+ "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
+ "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
+ "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
+ "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
+ "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
+ "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
+ "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
+ "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
+ "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
+ "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
+ "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
+ "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
+ "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
+ "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
+ "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
+ "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
+ "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
+ "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
+ "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
+ "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
+ "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
+ "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
+ "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
+ "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
+ "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
+ "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
+ "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
+ "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
+ "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
+ "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
+ "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
+ "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
+ "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
+ "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
+ "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
+ "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
+ "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
+ "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
+ "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
+ "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
+ "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
+ "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
+ "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
+ "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
+ "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
+ "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
+ "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
+ "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
+ "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
+ "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
+ "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
+ "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
+ "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
+ "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
+ "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
+ "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
+ "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
+ "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
+ "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
+ "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
+ "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
+ "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
+ "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
+ "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
+ "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
+ "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
+ "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
+ "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
+ "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
+ "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
+ "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
+ "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
+ "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
+ "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
+ "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
+ "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
+ "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
+ "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
+ "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
+ "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
+ "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
+ "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
+ "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
+ "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
+ "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
+ "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
+ "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
+ "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
+ "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
+ "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
+ "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
+ "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
+ "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
+ "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
+ "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
+ "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
+ "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
+ "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
+ "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
+ "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
+ "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
+ "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
+ "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
+ "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
+ "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
+ "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
+ "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
+ "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
+ "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
+ "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
+ "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
+ "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
+ "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
+ "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
+ "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
+ "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
+ "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
+ "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
+ "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
+ "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
+ "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
+ "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
+ "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
+ "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
+ "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
+ "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
+ "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
+ "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
+ "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
+ "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
+ "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
+ "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
+ "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
+ "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
+ "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
+ "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
+ "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
+ "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
+ "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
+ "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
+ "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
+ "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
+ "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
+ "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
+ "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
+ "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
+ "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
+ "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
+ "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
+ "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
+ "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
+ "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
+ "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
+ "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
+ "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
+ "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
+ "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
+ "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
+ "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
+ "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
+ "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
+ "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
+ "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
+ "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
+ "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
+ "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
+ "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
+ "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
+ "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
+ "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
+ "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
+ "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
+ "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
+ "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
+ "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
+ "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
+ "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
+ "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
+ "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
+ "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
+ "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
+ "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
+ "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
+ "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
+ "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
+ "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
+ "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
+ "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
+ "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
+ "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
+ "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
+ "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
+ "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
+ "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
+ "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
+ "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
+ "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
+ "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
+ "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
+ "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
+ "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
+ "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
+ "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
+ "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
+ "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
+ "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
+ "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
+ "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
+ "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
+ "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
+ "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
+ "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
+ "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
+ "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
+ "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
+ "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
+ "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
+ "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
+ "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
+ "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
+ "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
+ "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
+ "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
+ "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
+ "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
+ "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
+ "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
+ "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
+ "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
+ "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
+ "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
+ "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
+ "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
+ "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
+ "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
+ "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
+ "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
+ "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
+ "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
+ "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
+ "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
+ "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
+ "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
+ "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
+ "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
+ "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
+ "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
+ "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
+ "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
+ "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
+ "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
+ "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
+ "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
+ "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
+ "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
+ "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
+ "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
+ "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
+ "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
+ "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
+ "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
+ "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
+ "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
+ "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
+ "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
+ "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
+ "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
+ "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
+ "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
+ "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
+ "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
+ "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
+ "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
+ "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
+ "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
+ "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
+ "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
+ "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
+ "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
+ "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
+ "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
+ "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
+ "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
+ "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
+ "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
+ "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
+ "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
+ "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
+ "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
+ "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
+ "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
+ "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
+ "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
+ "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
+ "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
+ "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
+ "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
+ "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
+ "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
+ "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
+ "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
+ "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
+ "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
+ "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
+ "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+ "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
+ "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
+ "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
+ "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
+ "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
+ "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
+ "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
+ "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
+ "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+ "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
+ "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
+ "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
+ "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
+ "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
+ "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
+ "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
+ "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
+ "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
+ "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
+ "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
+ "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
+ "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
+ "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
+ "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
+ "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
+ "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
+ "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
+ "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
+ "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
+ "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
+ "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
+ "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
+ "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
+ "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
+ "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
+ "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
+ "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
+ "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
+ "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
+ "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
+ "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
+ "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
+ "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
+ "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
+ "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
+ "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
+ "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
+ "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
+ "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
+ "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
+ "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
+ "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
+ "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
+ "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
+ "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
+ "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
+ "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
+ "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
+ "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
+ "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
+ "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
+ "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
+ "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
+ "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
+ "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
+ "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
+ "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
+ "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
+ "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
+ "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
+ "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
+ "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
+ "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
+ "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
+ "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
+ "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
+ "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
+ "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
+ "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
+ "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
+ "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
+ "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
+ "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
+ "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
+ "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
+ "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
+ "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
+ "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
+ "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
+ "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
+ "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
+ "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
+ "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
+ "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
+ "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
+ "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
+ "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
+ "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
+ "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
+ "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
+ "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
+ "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
+ "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
+ "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
+ "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
+ "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
+ "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
+ "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
+ "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
+ "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
+ "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
+ "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
+ "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
+ "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
+ "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
+ "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
+ "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
+ "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
+ "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
+ "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+ "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+ "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
+ "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
+ "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
+ "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
+ "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
+ "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
+ "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+ "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+ "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
+ "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
+ "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
+ "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
+ "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
+ "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
+ "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+ "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+ "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
+ "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
+ "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
+ "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
+ "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
+ "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
+ "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
+ "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
+ "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
+ "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
+ "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
+ "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
+ "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
+ "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
+ "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+ "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+ "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
+ "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
+ "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
+ "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
+ "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
+ "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
+ "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
+
+ private final static String innerIndex9=
+ "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+ "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
+ "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
+ "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
+ "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
+ "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
+ "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
+ "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+ "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+ "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
+ "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
+ "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
+ "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
+ "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
+ "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
+ "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
+ "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
+ "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
+ "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
+ "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
+ "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
+ "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
+ "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
+ "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+ "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+ "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
+ "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
+ "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
+ "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
+ "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
+ "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
+ "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+ "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+ "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
+ "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
+ "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
+ "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
+ "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+ "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
+ "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+ "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+ "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
+ "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
+ "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
+ "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
+ "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
+ "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
+ "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
+ "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
+ "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
+ "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
+ "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
+ "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
+ "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
+ "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
+ "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+ "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+ "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
+ "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
+ "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
+ "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
+ "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
+ "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
+ "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+ "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+ "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
+ "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
+ "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
+ "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
+ "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
+ "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
+ "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
+ "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
+ "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
+ "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
+ "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
+ "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
+ "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
+ "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
+ "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
+ "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
+ "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
+ "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
+ "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
+ "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
+ "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
+ "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
+ "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
+ "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
+ "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
+ "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
+ "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+ "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+ "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
+ "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
+ "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
+ "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
+ "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
+ "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
+ "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+ "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+ "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
+ "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
+ "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
+ "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
+ "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
+ "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
+ "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
+ "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
+ "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
+ "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
+ "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
+ "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
+ "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
+ "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
+ "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+ "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+ "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
+ "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
+ "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
+ "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
+ "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
+ "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
+ "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+ "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+ "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
+ "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
+ "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
+ "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
+ "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
+ "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+ "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+ "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+ "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
+ "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+ "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
+ "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
+ "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
+ "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
+ "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
+ "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
+ "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
+ "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
+ "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
+ "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
+ "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
+ "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
+ "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+ "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+ "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
+ "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
+ "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
+ "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
+ "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
+ "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
+ "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+ "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+ "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
+ "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
+ "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
+ "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
+ "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
+ "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
+ "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+ "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+ "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
+ "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
+ "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
+ "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
+ "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
+ "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
+ "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
+ "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
+ "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
+ "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
+ "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
+ "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
+ "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
+ "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
+ "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+ "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+ "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
+ "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+ "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
+ "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
+ "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
+ "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
+ "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+ "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+ "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
+ "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
+ "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
+ "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
+ "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
+ "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
+ "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
+ "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
+ "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
+ "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
+ "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
+ "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
+ "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
+ "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
+ "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
+ "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
+ "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
+ "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
+ "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
+ "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
+ "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
+ "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
+ "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
+ "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
+ "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
+ "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
+ "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+ "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+ "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
+ "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
+ "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
+ "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
+ "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
+ "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
+ "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+ "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+ "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
+ "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
+ "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
+ "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
+ "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
+ "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
+ "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+ "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+ "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
+ "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
+ "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
+ "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
+ "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
+ "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
+ "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
+ "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
+ "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
+ "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
+ "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
+ "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
+ "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
+ "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
+ "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+ "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+ "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
+ "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
+ "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
+ "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
+ "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
+ "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
+ "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+ "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+ "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
+ "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
+ "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
+ "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
+ "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
+ "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
+ "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+ "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+ "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
+ "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
+ "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
+ "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
+ "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
+ "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
+ "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
+ "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
+ "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
+ "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
+ "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
+ "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
+ "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
+ "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
+ "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+ "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+ "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
+ "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
+ "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
+ "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
+ "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
+ "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
+ "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+ "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+ "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
+ "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
+ "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
+ "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
+ "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
+ "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
+ "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+ "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+ "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
+ "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
+ "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
+ "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
+ "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
+ "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
+ "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
+ "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
+ "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
+ "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
+ "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
+ "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
+ "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
+ "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
+ "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+ "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+ "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
+ "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
+ "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
+ "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
+ "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
+ "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
+ "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+ "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+ "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
+ "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
+ "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
+ "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
+ "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
+ "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
+ "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
+ "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
+ "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
+ "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
+ "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
+ "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
+ "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
+ "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
+ "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
+ "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
+ "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
+ "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
+ "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
+ "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
+ "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
+ "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
+ "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
+ "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
+ "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
+ "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+ "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
+ "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
+ "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
+ "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
+ "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
+ "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
+ "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
+ "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
+ "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
+ "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
+ "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
+ "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
+ "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
+ "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
+ "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
+ "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
+ "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
+ "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
+ "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
+ "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
+ "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
+ "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
+ "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
+ "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
+ "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
+ "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
+ "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
+ "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
+ "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
+ "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
+ "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
+ "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
+ "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
+ "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
+ "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
+ "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
+ "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
+ "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
+ "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
+ "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
+ "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
+ "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
+ "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
+ "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
+ "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
+ "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
+ "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
+ "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
+ "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
+ "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
+ "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
+ "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
+ "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
+ "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
+ "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
+ "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
+ "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
+ "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
+ "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
+ "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
+ "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
+ "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
+ "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
+ "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
+ "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
+ "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
+ "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
+ "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
+ "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
+ "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
+ "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
+ "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
+ "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
+ "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
+ "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
+ "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
+ "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
+ "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
+ "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
+ "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
+ "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
+ "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
+ "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
+ "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
+ "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
+ "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
+ "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
+ "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
+ "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
+ "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
+ "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
+ "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
+ "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
+ "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
+ "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
+ "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
+ "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
+ "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
+ "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
+ "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
+ "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
+ "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
+ "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
+ "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
+ "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
+ "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
+ "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
+ "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
+ "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
+ "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
+ "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
+ "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
+ "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+ "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
+ "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
+ "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
+ "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
+ "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
+ "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
+ "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
+ "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
+ "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
+ "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
+ "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
+ "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
+ "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
+ "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
+ "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
+ "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
+ "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
+ "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
+ "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
+ "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
+ "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
+ "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
+ "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
+ "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
+ "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
+ "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+ "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
+ "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
+ "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
+ "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
+ "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+ "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
+ "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
+ "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
+ "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
+ "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
+ "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
+ "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
+ "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
+ "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
+ "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
+ "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
+ "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
+ "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
+ "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
+ "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
+ "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
+ "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
+
+ private final static String innerIndex10=
+ "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
+ "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
+ "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
+ "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+ "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
+ "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
+ "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
+ "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
+ "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
+ "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
+ "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
+ "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+ "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
+ "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
+ "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
+ "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
+ "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
+ "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
+ "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
+ "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
+
+ private final static short index1[] = {
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
+ };
+
+ private final static String index2[] = {
+ innerIndex0,
+ innerIndex1,
+ innerIndex2,
+ innerIndex3,
+ innerIndex4,
+ innerIndex5,
+ innerIndex6,
+ innerIndex7,
+ innerIndex8,
+ innerIndex9,
+ innerIndex10
+ };
+
+ /* The default implementation creates a decoder and we don't have one */
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB2312.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GB2312 extends Charset {
+ public X11GB2312 () {
+ super("X11GB2312", null);
+ }
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+ public CharsetDecoder newDecoder() {
+ return new Decoder(this);
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11GB2312;
+ }
+
+ private class Encoder extends CharsetEncoder {
+ private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
+
+ public Encoder(Charset cs) {
+ super(cs, 2.0f, 2.0f);
+ }
+
+ public boolean canEncode(char c) {
+ if (c <= 0x7F) {
+ return false;
+ }
+ return enc.canEncode(c);
+ }
+
+ protected int encodeDouble(char c) {
+ return enc.encodeChar(c);
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+
+ try {
+ while (sp < sl) {
+ char c = sa[sp];
+ if (c <= '\u007f')
+ return CoderResult.unmappableForLength(1);
+ int ncode = encodeDouble(c);
+ if (ncode != 0 && c != '\u0000' ) {
+ da[dp++] = (byte) ((ncode >> 8) & 0x7f);
+ da[dp++] = (byte) (ncode & 0x7f);
+ sp++;
+ continue;
+ }
+ return CoderResult.unmappableForLength(1);
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+
+ private class Decoder extends CharsetDecoder {
+ private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
+
+ public Decoder(Charset cs) {
+ super(cs, 0.5f, 1.0f);
+ }
+
+ protected char decodeDouble(int b1, int b2) {
+ return dec.decodeDouble(b1, b2);
+ }
+
+ protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+ byte[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ assert (sp <= sl);
+ sp = (sp <= sl ? sp : sl);
+ char[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+ assert (dp <= dl);
+ dp = (dp <= dl ? dp : dl);
+
+ try {
+ while (sp < sl) {
+ if ( sl - sp < 2) {
+ return CoderResult.UNDERFLOW;
+ }
+ int b1 = sa[sp] & 0xFF | 0x80;
+ int b2 = sa[sp + 1] & 0xFF | 0x80;
+ char c = decodeDouble(b1, b2);
+ if (c == UNMAPPABLE_DECODING) {
+ return CoderResult.unmappableForLength(2);
+ }
+ if (dl - dp < 1)
+ return CoderResult.OVERFLOW;
+ da[dp++] = c;
+ sp +=2;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GBK.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1999, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GBK extends Charset {
+ public X11GBK () {
+ super("X11GBK", null);
+ }
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+ public CharsetDecoder newDecoder() {
+ return new GBK().newDecoder();
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11GBK;
+ }
+
+ private class Encoder extends DoubleByte.Encoder {
+
+ private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
+
+ Encoder(Charset cs) {
+ super(cs, (char[])null, (char[])null);
+ }
+
+ public boolean canEncode(char ch){
+ if (ch < 0x80) return false;
+ return enc.canEncode(ch);
+ }
+
+ public int encodeChar(char ch) {
+ if (ch < 0x80)
+ return UNMAPPABLE_ENCODING;
+ return enc.encodeChar(ch);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Johab.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,4782 @@
+/*
+ * Copyright (c) 2002, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11Johab extends Charset {
+ public X11Johab () {
+ super("X11Johab", null);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ public CharsetDecoder newDecoder() {
+ throw new Error("Decoder is not supported by X11Johab Charset");
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11GB18030_1;
+ }
+
+ private static class Encoder extends DoubleByteEncoder {
+ public Encoder(Charset cs) {
+ super(cs, index1, index2);
+ }
+
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+
+ private final static String innerIndex0=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
+ "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
+ "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
+ "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
+ "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
+ "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
+ "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
+ "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
+ "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
+ "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
+ "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
+ "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
+ "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
+ "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
+ "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
+ "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
+ "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
+ "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
+ "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
+ "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
+ "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
+ "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
+ "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
+ "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
+ "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
+ "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
+ "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
+ "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
+ "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
+ "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
+ "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
+ "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
+ "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
+ "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
+ "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
+ "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
+ "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
+ "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
+ "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
+ "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
+ "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
+ "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
+ "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
+ "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
+ "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
+ "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
+ "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
+ "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
+ "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
+ "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
+ "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
+ "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
+ "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
+ "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
+ "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
+ "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
+ "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
+ "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
+ "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
+ "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
+ "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
+ "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
+ "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
+ "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
+ "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
+ "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
+ "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
+ "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
+ "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
+ "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
+ "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
+ "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
+ "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
+ "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
+ "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
+ "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
+ "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
+ "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
+ "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
+ "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
+ "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
+ "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
+ "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
+ "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
+ "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
+ "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
+ "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
+ "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
+ "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
+ "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
+ "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
+ "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
+ "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
+ "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
+ "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
+ "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
+ "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
+ "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
+ "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
+ "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static String innerIndex1=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
+ "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
+ "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
+ "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
+ "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
+ "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
+ "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
+ "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
+ "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
+ "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
+ "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
+ "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
+ "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
+ "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
+ "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
+ "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
+ "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
+ "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
+ "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
+ "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
+ "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
+ "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
+ "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
+ "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
+ "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
+ "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
+ "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
+ "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
+ "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
+ "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
+ "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
+ "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
+ "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
+ "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
+ "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
+ "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
+ "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
+ "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
+ "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
+ "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
+ "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
+ "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
+ "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
+ "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
+ "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
+ "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
+ "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
+ "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
+ "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
+ "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
+ "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
+ "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
+ "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
+ "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
+ "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
+ "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
+ "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
+ "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
+ "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
+ "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
+ "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
+ "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
+ "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
+ "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
+ "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
+ "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
+ "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
+ "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
+ "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
+ "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
+ "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
+ "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
+ "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
+ "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
+ "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
+ "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
+ "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
+ "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
+ "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
+ "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
+ "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
+ "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
+ "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
+ "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
+ "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
+ "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
+ "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
+ "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
+ "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
+ "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
+ "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
+ "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
+ "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
+ "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
+ "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
+ "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
+ "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
+ "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
+ "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
+ "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
+ "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
+ "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
+ "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
+ "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
+ "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
+ "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
+ "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
+ "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
+ "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
+ "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
+ "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
+ "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
+ "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
+ "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
+ "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
+ "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
+ "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
+ "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
+ "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
+ "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
+ "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
+ "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
+ "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
+ "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
+ "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
+ "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
+ "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
+ "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
+ "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
+ "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
+ "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
+ "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
+ "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
+ "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
+ "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
+ "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
+ "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
+ "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
+ "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
+ "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
+ "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
+ "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
+ "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
+ "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
+ "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
+ "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
+ "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
+ "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
+ "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
+ "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
+ "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
+ "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
+ "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
+ "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
+ "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
+ "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
+ "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
+ "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
+ "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
+ "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
+ "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
+ "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
+ "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
+ "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
+ "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
+ "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
+ "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
+ "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
+ "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
+ "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
+ "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
+ "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
+ "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
+ "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
+ "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
+ "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
+ "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
+ "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
+ "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
+ "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
+ "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
+ "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
+ "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
+ "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
+ "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
+ "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
+ "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
+ "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
+ "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
+ "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
+ "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
+ "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
+ "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
+ "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
+ "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
+ "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
+ "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
+ "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
+ "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
+ "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
+ "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
+ "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
+ "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
+ "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
+ "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
+ "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
+ "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
+ "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
+ "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
+ "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
+ "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
+ "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
+ "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
+ "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
+ "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
+ "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
+ "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
+ "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
+ "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
+ "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
+ "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
+ "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
+ "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
+ "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
+ "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
+ "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
+ "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
+ "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
+ "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
+ "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
+ "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
+ "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
+ "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
+ "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
+ "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
+ "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
+ "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
+ "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
+ "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
+ "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
+ "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
+ "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
+ "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
+ "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
+ "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
+ "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
+ "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
+ "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
+ "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
+ "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
+ "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
+ "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
+ "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
+ "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
+ "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
+ "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
+ "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
+ "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
+
+ private final static String innerIndex2=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
+ "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
+ "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
+ "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
+ "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
+ "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
+ "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
+ "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
+ "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
+ "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
+ "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
+ "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
+ "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
+ "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
+ "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
+ "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
+ "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
+ "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
+ "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
+ "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
+ "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
+ "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
+ "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
+ "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
+ "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
+ "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
+ "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
+ "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
+ "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
+ "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
+ "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
+ "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
+ "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
+ "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
+ "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
+ "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
+ "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
+ "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
+ "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
+ "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
+ "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
+ "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
+ "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
+ "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
+ "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
+ "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
+ "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
+ "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
+ "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
+ "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
+ "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
+ "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
+ "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
+ "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
+ "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
+ "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
+ "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
+ "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
+ "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
+ "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
+ "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
+ "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
+ "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
+ "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
+ "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
+ "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
+ "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
+ "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
+ "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
+ "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
+ "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
+ "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
+ "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
+ "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
+ "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
+ "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
+ "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
+ "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
+ "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
+ "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
+ "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
+ "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
+ "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
+ "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
+ "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
+ "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
+ "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
+ "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
+ "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
+ "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
+ "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
+ "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
+ "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
+ "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
+ "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
+ "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
+ "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
+ "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
+ "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
+ "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
+ "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
+ "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
+ "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
+ "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
+ "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
+ "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
+ "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
+ "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
+ "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
+ "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
+ "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
+ "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
+ "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
+ "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
+ "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
+ "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
+ "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
+ "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
+ "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
+ "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
+ "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
+ "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
+ "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
+ "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
+ "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
+ "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
+ "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
+ "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
+ "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
+ "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
+ "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
+ "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
+ "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
+ "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
+ "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
+ "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
+ "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
+ "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
+ "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
+ "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
+ "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
+ "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
+ "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
+ "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
+ "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
+ "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
+ "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
+ "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
+ "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
+ "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
+ "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
+ "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
+ "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
+ "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
+ "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
+ "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
+ "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
+ "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
+ "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
+ "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
+ "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
+ "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
+ "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
+ "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
+ "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
+ "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
+ "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
+ "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
+ "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
+ "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
+ "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
+ "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
+ "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
+ "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
+ "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
+ "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
+ "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
+ "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
+ "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
+ "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
+ "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
+ "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
+ "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
+ "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
+ "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
+ "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
+ "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
+ "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
+ "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
+ "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
+ "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
+ "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
+ "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
+ "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
+ "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
+ "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
+ "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
+ "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
+ "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
+ "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
+ "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
+ "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
+ "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
+ "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
+ "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
+ "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
+ "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
+ "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
+ "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
+ "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
+ "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
+ "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
+ "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
+ "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
+ "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
+ "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
+ "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
+ "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
+ "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
+ "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
+ "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
+ "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
+ "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
+ "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
+ "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
+ "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
+ "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
+ "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
+ "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
+ "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
+ "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
+ "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
+ "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
+ "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
+ "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
+ "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
+ "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
+ "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
+ "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
+ "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
+ "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
+ "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
+ "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
+ "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
+ "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
+ "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
+ "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
+ "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
+ "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
+ "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
+ "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
+ "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
+ "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
+ "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
+ "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
+ "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
+ "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
+ "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
+ "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
+ "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
+ "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
+ "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
+ "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
+ "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
+ "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
+ "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
+ "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
+ "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
+ "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
+ "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
+ "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
+ "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
+ "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
+ "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
+ "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
+ "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
+ "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
+ "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
+ "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
+ "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
+ "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
+ "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static String innerIndex3=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
+ "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
+ "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
+ "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
+ "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
+ "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
+ "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
+ "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
+ "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
+ "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
+ "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
+ "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
+ "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
+ "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
+ "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
+ "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
+ "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
+ "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
+ "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
+ "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
+ "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
+ "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
+ "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
+ "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
+ "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
+ "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
+ "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
+ "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
+ "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
+ "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
+ "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
+ "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
+ "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
+ "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
+ "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
+ "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
+ "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
+ "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
+ "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
+ "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
+ "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
+ "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
+ "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
+ "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
+ "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
+ "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
+ "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
+ "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
+ "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
+ "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
+ "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
+ "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
+ "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
+ "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
+ "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
+ "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
+ "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
+ "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
+ "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
+ "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
+ "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
+ "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
+ "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
+ "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
+ "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
+ "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
+ "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
+ "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
+ "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
+ "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
+ "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
+ "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
+ "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
+ "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
+ "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
+ "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
+ "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
+ "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
+ "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
+ "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
+ "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
+ "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
+ "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
+ "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
+ "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
+ "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
+ "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
+ "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
+ "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
+ "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
+ "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
+ "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
+ "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
+ "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
+ "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
+ "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
+ "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
+ "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
+ "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
+ "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
+ "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
+ "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
+ "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
+ "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
+ "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
+ "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
+ "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
+ "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
+ "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
+ "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
+ "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
+ "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
+ "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
+ "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
+ "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
+ "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
+ "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
+ "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
+ "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
+ "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
+ "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
+ "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
+ "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
+ "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
+ "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
+ "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
+ "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
+ "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
+ "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
+ "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
+ "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
+ "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
+ "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
+ "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
+ "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
+ "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
+ "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
+ "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
+ "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
+ "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
+ "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
+ "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
+ "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
+ "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
+ "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
+ "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
+ "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
+ "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
+ "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
+ "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
+ "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
+ "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
+ "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
+ "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
+ "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
+ "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
+ "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
+ "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
+ "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
+ "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
+ "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
+ "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
+ "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
+ "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
+ "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
+ "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
+ "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
+ "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
+ "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
+ "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
+ "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
+ "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
+ "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
+ "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
+ "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
+ "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
+ "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
+ "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
+ "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
+ "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
+ "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
+ "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
+ "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
+ "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
+ "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
+ "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
+ "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
+ "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
+ "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
+ "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
+ "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
+ "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
+ "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
+ "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
+ "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
+ "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
+ "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
+ "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
+ "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
+ "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
+ "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
+ "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
+ "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
+ "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
+ "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
+ "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
+ "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
+ "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
+ "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
+ "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
+ "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
+ "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
+ "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
+ "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
+ "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
+ "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
+ "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
+ "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
+ "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
+ "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
+ "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
+ "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
+ "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
+ "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
+ "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
+ "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
+ "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
+ "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
+ "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
+ "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
+ "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
+ "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
+ "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
+ "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
+ "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
+ "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
+ "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
+ "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
+ "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
+ "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
+ "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
+ "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
+ "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
+ "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
+ "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
+ "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
+
+ private final static String innerIndex4=
+ "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
+ "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
+ "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
+ "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
+ "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
+ "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
+ "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
+ "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
+ "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
+ "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
+ "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
+ "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
+ "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
+ "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
+ "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
+ "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
+ "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
+ "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
+ "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
+ "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
+ "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
+ "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
+ "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
+ "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
+ "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
+ "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
+ "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
+ "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
+ "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
+ "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
+ "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
+ "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
+ "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
+ "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
+ "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
+ "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
+ "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
+ "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
+ "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
+ "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
+ "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
+ "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
+ "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
+ "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
+ "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
+ "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
+ "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
+ "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
+ "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
+ "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
+ "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
+ "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
+ "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
+ "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
+ "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
+ "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
+ "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
+ "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
+ "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
+ "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
+ "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
+ "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
+ "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
+ "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
+ "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
+ "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
+ "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
+ "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
+ "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
+ "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
+ "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
+ "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
+ "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
+ "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
+ "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
+ "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
+ "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
+ "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
+ "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
+ "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
+ "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
+ "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
+ "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
+ "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
+ "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
+ "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
+ "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
+ "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
+ "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
+ "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
+ "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
+ "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
+ "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
+ "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
+ "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
+ "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
+ "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
+ "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
+ "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
+ "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
+ "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
+ "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
+ "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
+ "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
+ "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
+ "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
+ "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
+ "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
+ "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
+ "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
+ "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
+ "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
+ "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
+ "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
+ "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
+ "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
+ "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
+ "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
+ "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
+ "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
+ "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
+ "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
+ "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
+ "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
+ "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
+ "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
+ "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
+ "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
+ "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
+ "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
+ "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
+ "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
+ "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
+ "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
+ "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
+ "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
+ "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
+ "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
+ "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
+ "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
+ "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
+ "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
+ "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
+ "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
+ "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
+ "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
+ "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
+ "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
+ "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
+ "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
+ "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
+ "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
+ "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
+ "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
+ "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
+ "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
+ "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
+ "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
+ "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
+ "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
+ "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
+ "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
+ "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
+ "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
+ "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
+ "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
+ "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
+ "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
+ "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
+ "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
+ "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
+ "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
+ "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
+ "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
+ "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
+ "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
+ "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
+ "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
+ "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
+ "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
+ "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
+ "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
+ "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
+ "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
+ "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
+ "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
+ "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
+ "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
+ "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
+ "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
+ "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
+ "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
+ "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
+ "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
+ "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
+ "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
+ "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
+ "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
+ "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
+ "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
+ "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
+ "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
+ "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
+ "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
+ "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
+ "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
+ "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
+ "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
+ "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
+ "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
+ "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
+ "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
+ "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
+ "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
+ "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
+ "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
+ "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
+ "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
+ "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
+ "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
+ "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
+ "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
+
+ private final static String innerIndex5=
+ "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
+ "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
+ "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
+ "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
+ "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
+ "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
+ "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
+ "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
+ "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
+ "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
+ "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
+ "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
+ "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
+ "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
+ "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
+ "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
+ "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
+ "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
+ "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
+ "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
+ "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
+ "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
+ "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
+ "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
+ "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
+ "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
+ "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
+ "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
+ "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
+ "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
+ "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
+ "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
+ "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
+ "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
+ "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
+ "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
+ "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
+ "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
+ "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
+ "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
+ "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
+ "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
+ "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
+ "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
+ "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
+ "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
+ "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
+ "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
+ "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
+ "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
+ "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
+ "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
+ "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
+ "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
+ "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
+ "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
+ "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
+ "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
+ "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
+ "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
+ "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
+ "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
+ "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
+ "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
+ "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
+ "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
+ "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
+ "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
+ "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
+ "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
+ "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
+ "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
+ "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
+ "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
+ "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
+ "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
+ "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
+ "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
+ "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
+ "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
+ "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
+ "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
+ "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
+ "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
+ "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
+ "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
+ "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
+ "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
+ "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
+ "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
+ "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
+ "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
+ "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
+ "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
+ "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
+ "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
+ "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
+ "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
+ "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
+ "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
+ "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
+ "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
+ "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
+ "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
+ "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
+ "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
+ "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
+ "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
+ "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
+ "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
+ "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
+ "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
+ "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
+ "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
+ "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
+ "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
+ "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
+ "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
+ "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
+ "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
+ "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
+ "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
+ "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
+ "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
+ "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
+ "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
+ "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
+ "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
+ "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
+ "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
+ "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
+ "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
+ "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
+ "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
+ "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
+ "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
+ "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
+ "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
+ "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
+ "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
+ "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
+ "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
+ "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
+ "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
+ "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
+ "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
+ "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
+ "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
+ "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
+ "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
+ "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
+ "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
+ "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
+ "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
+ "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
+ "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
+ "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
+ "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
+ "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
+ "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
+ "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
+ "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
+ "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
+ "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static String innerIndex6=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
+ "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
+ "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
+ "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
+ "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
+ "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
+ "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
+ "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
+ "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
+ "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
+ "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
+ "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
+ "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
+ "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
+ "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
+ "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
+ "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
+ "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
+ "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+ "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+ "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
+ "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
+ "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
+ "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
+ "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
+ "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+ "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+ "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
+ "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
+ "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
+ "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
+ "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
+ "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+ "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+ "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
+ "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
+ "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
+ "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
+ "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
+ "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+ "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+ "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
+ "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
+ "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
+ "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
+ "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
+ "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
+ "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+ "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
+ "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
+ "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
+ "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
+ "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+ "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+ "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+ "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
+ "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
+ "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
+ "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
+ "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
+ "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+ "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+ "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
+ "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
+ "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
+ "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
+ "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
+ "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+ "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+ "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
+ "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
+ "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
+ "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
+ "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
+ "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+ "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+ "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
+ "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
+ "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
+ "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
+ "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+ "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+ "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+ "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
+ "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
+ "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
+ "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
+ "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
+ "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+ "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+ "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
+ "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
+ "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
+ "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
+ "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
+ "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+ "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+ "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
+ "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
+ "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
+ "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
+ "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
+ "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+ "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+ "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
+ "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
+ "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+ "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
+ "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
+ "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+ "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+ "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
+ "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
+ "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
+ "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
+ "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
+ "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+ "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+ "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
+ "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
+ "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
+ "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
+ "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
+ "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+ "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+ "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
+ "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
+ "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
+ "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
+ "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
+ "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+ "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+ "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
+ "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
+ "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
+ "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
+ "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
+ "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+ "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+ "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
+ "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
+ "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
+ "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
+ "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
+ "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+ "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+ "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
+ "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
+ "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
+ "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
+ "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
+ "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+ "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+ "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
+ "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
+ "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
+ "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
+ "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
+ "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+ "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+ "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
+ "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
+ "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
+ "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
+ "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
+ "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+ "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+ "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
+ "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
+ "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
+ "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
+ "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
+ "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+ "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+ "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
+ "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
+ "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
+ "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
+ "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
+ "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+ "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+ "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
+ "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
+ "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
+ "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
+ "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
+ "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+ "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+ "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
+ "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
+ "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
+ "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
+ "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
+ "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+ "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+ "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
+ "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
+ "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
+ "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
+ "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
+ "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+ "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+ "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
+ "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
+ "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
+ "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
+ "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
+ "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+ "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+ "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
+ "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
+ "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
+ "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
+ "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
+ "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+ "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+ "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
+ "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
+ "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
+ "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
+ "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
+ "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+ "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+ "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
+ "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
+ "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
+ "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
+ "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
+ "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+ "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+ "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
+ "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
+ "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
+ "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
+ "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
+ "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+ "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+ "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
+ "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
+ "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
+ "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
+ "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+ "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
+ "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
+ "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
+ "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
+ "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
+ "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
+ "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
+ "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
+ "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
+ "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
+ "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
+ "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
+ "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
+ "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
+ "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
+ "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
+ "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
+ "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
+ "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
+ "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
+ "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
+ "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
+ "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
+ "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
+ "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
+ "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
+ "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
+ "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
+ "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
+ "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
+ "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
+ "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
+ "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
+ "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
+ "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
+ "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
+ "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
+ "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
+ "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
+ "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
+ "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
+ "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
+ "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
+ "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
+ "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
+ "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
+ "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
+ "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
+ "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
+ "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
+ "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
+ "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
+ "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
+ "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
+ "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
+ "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
+ "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
+ "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
+ "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
+ "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
+ "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
+ "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
+ "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
+ "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
+ "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
+ "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
+ "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
+ "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
+ "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
+ "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
+ "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
+ "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
+ "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
+ "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
+ "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
+ "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
+ "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
+ "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
+ "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
+ "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
+ "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
+ "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
+ "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
+ "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
+ "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
+ "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
+ "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
+ "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
+ "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
+ "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
+ "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
+ "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
+ "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
+ "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+ "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
+ "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
+ "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
+ "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+ "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
+ "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
+ "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+ "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
+ "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
+ "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
+ "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+ "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
+ "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
+ "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
+ "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
+ "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
+ "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
+ "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
+ "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
+ "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
+ "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
+ "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
+ "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
+ "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
+ "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
+ "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
+ "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
+ "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
+ "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
+ "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
+ "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
+ "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
+ "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
+ "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
+ "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+ "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
+ "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
+ "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
+ "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
+ "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
+ "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
+ "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
+ "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
+ "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
+ "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
+ "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
+ "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
+ "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
+ "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
+ "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
+ "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
+ "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
+ "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
+ "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
+ "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
+ "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
+ "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
+ "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
+ "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
+ "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
+ "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
+ "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
+ "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
+ "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
+ "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
+ "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
+ "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
+ "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
+ "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
+ "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
+ "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
+ "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
+ "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
+ "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
+ "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
+ "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+ "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
+ "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
+ "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
+ "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
+ "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
+ "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
+ "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
+ "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
+ "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
+ "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
+ "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
+ "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
+ "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
+ "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
+ "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
+ "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
+ "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
+ "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
+ "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
+ "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
+ "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
+ "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
+
+ private final static String innerIndex7=
+ "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
+ "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
+ "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
+ "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
+ "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
+ "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
+ "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
+ "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
+ "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
+ "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
+ "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+ "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
+ "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
+ "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
+ "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
+ "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
+ "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
+ "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
+ "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
+ "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
+ "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
+ "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
+ "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
+ "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
+ "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
+ "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
+ "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
+ "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
+ "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
+ "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
+ "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
+ "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
+ "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
+ "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
+ "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
+ "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
+ "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
+ "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
+ "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
+ "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
+ "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
+ "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
+ "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
+ "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
+ "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
+ "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
+ "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
+ "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
+ "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+ "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
+ "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
+ "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
+ "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
+ "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
+ "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
+ "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
+ "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
+ "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
+ "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
+ "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
+ "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
+ "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
+ "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
+ "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
+ "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
+ "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
+ "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
+ "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
+ "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
+ "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+ "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
+ "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
+ "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
+ "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
+ "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+ "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
+ "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
+ "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
+ "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
+ "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
+ "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
+ "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
+ "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
+ "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
+ "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
+ "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
+ "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
+ "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
+ "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
+ "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
+ "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+ "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
+ "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
+ "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
+ "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
+ "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
+ "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
+ "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
+ "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
+ "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
+ "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
+ "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
+ "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
+ "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
+ "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
+ "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
+ "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
+ "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
+ "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
+ "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
+ "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
+ "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
+ "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
+ "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
+ "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
+ "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
+ "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
+ "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
+ "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+ "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
+ "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
+ "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
+ "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
+ "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
+ "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
+ "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
+ "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
+ "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
+ "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
+ "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
+ "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
+ "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
+ "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
+ "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
+ "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
+ "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
+ "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
+ "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
+ "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
+ "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+ "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
+ "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
+ "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
+ "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
+ "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
+ "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
+ "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
+ "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
+ "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
+ "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
+ "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
+ "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
+ "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
+ "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
+ "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
+ "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
+ "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
+ "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
+ "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
+ "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
+ "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+ "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
+ "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
+ "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
+ "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
+ "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
+ "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
+ "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
+ "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
+ "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
+ "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
+ "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
+ "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
+ "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
+ "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
+ "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
+ "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
+ "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
+ "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
+ "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
+ "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
+ "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
+ "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
+ "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
+ "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
+ "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
+ "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
+ "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
+ "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
+ "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
+ "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
+ "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
+ "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
+ "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
+ "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
+ "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
+ "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
+ "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
+ "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
+ "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
+ "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
+ "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
+ "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
+ "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
+ "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
+ "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
+ "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
+ "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
+ "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
+ "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
+ "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
+ "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
+ "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
+ "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
+ "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
+ "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
+ "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
+ "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
+ "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
+ "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
+ "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
+ "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+ "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+ "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
+ "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
+ "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
+ "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
+ "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
+ "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+ "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+ "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
+ "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
+ "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
+ "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
+ "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
+ "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
+ "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
+ "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
+ "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
+ "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
+ "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
+ "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
+ "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
+ "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
+ "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
+ "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
+ "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
+ "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
+ "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
+ "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
+ "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
+ "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
+ "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
+ "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+ "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
+ "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
+ "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
+ "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
+ "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
+ "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
+ "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+ "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
+ "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
+ "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
+ "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
+ "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
+ "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
+ "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
+ "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
+ "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
+ "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
+ "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
+ "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
+ "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
+ "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
+ "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
+ "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
+ "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
+ "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
+ "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
+ "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
+ "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
+ "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
+ "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
+ "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
+ "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
+ "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
+ "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
+ "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
+ "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
+ "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
+ "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
+ "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
+ "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
+ "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
+ "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
+ "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
+ "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
+ "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+ "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+ "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
+ "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
+ "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
+ "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
+ "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
+ "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
+ "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
+ "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
+ "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
+ "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
+ "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
+ "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
+ "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
+ "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
+ "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
+ "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
+ "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
+ "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
+ "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
+ "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
+ "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
+ "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
+ "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
+ "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
+ "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
+ "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
+ "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
+ "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
+ "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
+ "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
+ "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
+ "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
+ "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
+ "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
+ "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
+ "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
+ "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
+ "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
+ "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
+ "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
+ "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
+ "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
+ "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
+ "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
+ "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
+ "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
+ "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+ "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
+ "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
+ "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
+ "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
+ "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
+ "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
+ "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
+ "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
+ "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
+ "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
+ "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
+ "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
+ "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
+ "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
+ "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
+ "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
+ "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
+ "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
+ "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
+ "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
+ "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
+ "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
+ "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
+ "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
+ "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
+ "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
+ "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
+ "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
+ "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
+ "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
+ "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
+ "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
+ "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
+ "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
+ "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
+ "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
+ "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
+ "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
+ "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
+ "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
+ "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
+ "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
+ "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
+ "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
+ "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
+ "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
+ "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
+ "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
+ "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
+ "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
+ "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
+ "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
+ "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
+ "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
+ "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
+ "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
+ "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
+ "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
+ "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
+ "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
+ "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
+ "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
+ "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
+ "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
+ "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
+ "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
+ "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
+ "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
+ "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
+ "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
+ "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
+ "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
+ "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
+ "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
+ "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
+ "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
+ "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
+ "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
+ "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
+ "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
+ "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
+ "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
+ "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
+ "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
+ "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
+ "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
+ "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
+ "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
+ "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
+ "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
+ "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
+ "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+ "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
+ "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
+ "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
+ "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
+ "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
+ "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
+ "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
+ "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
+ "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
+ "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
+ "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
+ "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
+ "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
+ "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
+ "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
+ "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
+ "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
+ "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
+ "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
+ "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+ "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
+ "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
+ "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
+ "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
+ "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
+ "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
+ "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
+ "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
+ "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
+ "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
+ "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
+ "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
+ "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
+ "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
+ "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
+ "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
+ "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
+ "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
+ "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
+ "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
+ "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
+ "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
+ "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
+ "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
+ "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
+ "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
+ "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
+ "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
+ "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
+ "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
+ "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
+ "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
+ "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
+ "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
+ "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
+ "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
+ "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
+ "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
+ "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
+ "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
+ "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
+ "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
+ "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
+ "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
+ "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
+ "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
+ "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
+ "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
+ "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
+ "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
+ "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
+ "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
+ "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
+
+ private final static String innerIndex8=
+ "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
+ "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
+ "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
+ "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
+ "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
+ "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
+ "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
+ "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
+ "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
+ "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
+ "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
+ "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
+ "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
+ "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
+ "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
+ "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
+ "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
+ "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
+ "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
+ "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
+ "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
+ "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
+ "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
+ "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
+ "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
+ "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
+ "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
+ "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
+ "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
+ "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
+ "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+ "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
+ "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
+ "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
+ "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
+ "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
+ "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
+ "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
+ "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
+ "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
+ "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
+ "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
+ "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
+ "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
+ "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
+ "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+ "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+ "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
+ "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
+ "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
+ "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
+ "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
+ "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
+ "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
+ "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
+ "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
+ "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
+ "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
+ "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
+ "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
+ "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
+ "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
+ "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
+ "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
+ "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
+ "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
+ "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
+ "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
+ "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
+ "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
+ "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+ "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
+ "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
+ "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
+ "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
+ "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
+ "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
+ "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
+ "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
+ "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
+ "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
+ "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
+ "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
+ "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
+ "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
+ "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
+ "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
+ "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
+ "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
+ "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
+ "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
+ "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+ "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
+ "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
+ "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
+ "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
+ "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
+ "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
+ "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
+ "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
+ "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
+ "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
+ "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+ "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
+ "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
+ "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
+ "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
+ "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
+ "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
+ "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
+ "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
+ "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
+ "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
+ "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
+ "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
+ "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
+ "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
+ "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
+ "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
+ "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
+ "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
+ "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
+ "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
+ "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
+ "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
+ "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
+ "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
+ "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
+ "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
+ "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
+ "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
+ "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
+ "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
+ "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
+ "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
+ "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
+ "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
+ "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
+ "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
+ "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
+ "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
+ "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
+ "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
+ "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
+ "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
+ "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
+ "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
+ "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
+ "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
+ "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
+ "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
+ "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
+ "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
+ "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
+ "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
+ "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
+ "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
+ "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
+ "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
+ "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
+ "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
+ "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
+ "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
+ "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
+ "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
+ "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
+ "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
+ "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
+ "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
+ "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
+ "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
+ "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
+ "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
+ "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
+ "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
+ "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
+ "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
+ "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
+ "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
+ "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
+ "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
+ "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
+ "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
+ "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
+ "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
+ "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
+ "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
+ "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
+ "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
+ "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
+ "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
+ "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
+ "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
+ "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
+ "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
+ "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
+ "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
+ "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
+ "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
+ "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
+ "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
+ "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
+ "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
+ "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
+ "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
+ "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
+ "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
+ "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
+ "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
+ "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
+ "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
+ "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
+ "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
+ "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
+ "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
+ "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
+ "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
+ "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
+ "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
+ "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
+ "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
+ "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
+ "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
+ "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
+ "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
+ "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
+ "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
+ "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
+ "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
+ "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
+ "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
+ "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
+ "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
+ "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
+ "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
+ "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
+ "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
+ "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
+ "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
+ "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
+ "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
+ "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
+ "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
+ "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
+ "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
+ "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
+ "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
+ "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
+ "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
+ "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+ "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
+ "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
+ "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
+ "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
+ "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
+ "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
+ "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
+ "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
+ "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
+ "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
+ "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
+ "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
+ "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
+ "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
+ "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
+ "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
+ "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
+ "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
+ "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
+ "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
+ "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
+ "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
+ "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
+ "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
+ "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
+ "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
+ "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
+ "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
+ "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
+ "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
+ "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
+ "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
+ "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
+ "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
+ "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
+ "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
+ "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
+ "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
+ "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
+ "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+ "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
+ "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
+ "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
+ "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
+ "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
+ "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
+ "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
+ "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
+ "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
+ "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
+ "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
+ "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
+ "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
+ "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
+ "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
+ "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
+ "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
+ "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
+ "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
+ "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
+ "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
+ "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
+ "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
+ "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
+ "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
+ "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
+ "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
+ "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
+ "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
+ "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
+ "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
+ "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
+ "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
+ "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
+ "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
+ "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
+ "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
+ "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
+ "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
+ "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
+ "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
+ "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
+ "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
+ "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
+ "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
+ "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
+ "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
+ "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
+ "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
+ "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+ "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
+ "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
+ "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
+ "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
+ "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
+ "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
+ "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
+ "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
+ "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
+ "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
+ "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
+ "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
+ "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
+ "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
+ "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
+ "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
+ "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
+ "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
+ "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
+ "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
+ "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
+ "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
+ "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
+ "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
+ "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
+ "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
+ "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
+ "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
+ "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
+ "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
+ "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
+ "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
+ "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
+ "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
+ "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
+ "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
+ "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
+ "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
+ "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
+ "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
+ "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
+ "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
+ "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
+ "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
+ "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
+ "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
+ "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
+ "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+ "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
+ "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
+ "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
+ "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
+ "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
+ "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
+ "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
+ "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
+ "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+ "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
+ "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
+ "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
+ "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
+ "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
+ "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
+ "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
+ "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
+ "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
+ "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
+ "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
+ "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
+ "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
+ "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
+ "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
+ "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
+ "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
+ "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
+ "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
+ "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
+ "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
+ "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
+ "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
+ "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
+ "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
+ "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
+ "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
+ "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
+ "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
+ "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
+ "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
+ "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
+ "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
+ "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
+ "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
+ "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
+ "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
+ "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
+ "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
+ "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+ "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
+ "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
+ "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
+ "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
+ "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
+ "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
+ "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
+ "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
+ "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
+ "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
+ "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
+ "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
+ "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
+ "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
+ "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
+ "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
+ "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
+ "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
+ "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
+ "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
+ "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+ "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
+ "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
+ "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
+ "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
+ "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
+ "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
+ "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
+ "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
+ "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
+ "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
+ "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
+ "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
+ "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
+ "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
+ "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
+ "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
+ "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
+ "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
+ "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
+ "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
+ "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
+ "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
+ "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
+ "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
+ "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
+ "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
+ "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
+ "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
+ "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
+ "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
+ "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
+ "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
+ "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
+ "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
+ "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
+ "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
+ "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
+ "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
+ "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
+ "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
+ "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
+ "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
+
+ private final static String innerIndex9=
+ "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
+ "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
+ "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
+ "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
+ "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
+ "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
+ "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
+ "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
+ "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
+ "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
+ "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
+ "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
+ "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static short index1[] = {
+ 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
+ };
+
+ private static String index2[] = {
+ innerIndex0,
+ innerIndex1,
+ innerIndex2,
+ innerIndex3,
+ innerIndex4,
+ innerIndex5,
+ innerIndex6,
+ innerIndex7,
+ innerIndex8,
+ innerIndex9
+ };
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11KSC5601.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11KSC5601 extends Charset {
+ public X11KSC5601 () {
+ super("X11KSC5601", null);
+ }
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+ public CharsetDecoder newDecoder() {
+ return new Decoder(this);
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11KSC5601;
+ }
+
+ private class Encoder extends CharsetEncoder {
+ private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
+
+ public Encoder(Charset cs) {
+ super(cs, 2.0f, 2.0f);
+ }
+
+ public boolean canEncode(char c) {
+ if (c <= 0x7F) {
+ return false;
+ }
+ return enc.canEncode(c);
+ }
+
+ protected int encodeDouble(char c) {
+ return enc.encodeChar(c);
+ }
+
+ protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+ char[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ byte[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+
+ try {
+ while (sp < sl) {
+ char c = sa[sp];
+ if (c <= '\u007f')
+ return CoderResult.unmappableForLength(1);
+ int ncode = encodeDouble(c);
+ if (ncode != 0 && c != '\u0000' ) {
+ da[dp++] = (byte) ((ncode >> 8) & 0x7f);
+ da[dp++] = (byte) (ncode & 0x7f);
+ sp++;
+ continue;
+ }
+ return CoderResult.unmappableForLength(1);
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+ }
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+
+ private class Decoder extends CharsetDecoder {
+ private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
+
+ public Decoder(Charset cs) {
+ super(cs, 0.5f, 1.0f);
+ }
+
+ protected char decodeDouble(int b1, int b2) {
+ return dec.decodeDouble(b1, b2);
+ }
+
+ protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+ byte[] sa = src.array();
+ int sp = src.arrayOffset() + src.position();
+ int sl = src.arrayOffset() + src.limit();
+ assert (sp <= sl);
+ sp = (sp <= sl ? sp : sl);
+ char[] da = dst.array();
+ int dp = dst.arrayOffset() + dst.position();
+ int dl = dst.arrayOffset() + dst.limit();
+ assert (dp <= dl);
+ dp = (dp <= dl ? dp : dl);
+
+
+ try {
+ while (sp < sl) {
+ if ( sl - sp < 2) {
+ return CoderResult.UNDERFLOW;
+ }
+ int b1 = sa[sp] & 0xFF | 0x80;
+ int b2 = sa[sp + 1] & 0xFF | 0x80;
+ char c = decodeDouble(b1, b2);
+ if (c == UNMAPPABLE_DECODING) {
+ return CoderResult.unmappableForLength(2);
+ }
+ if (dl - dp < 1)
+ return CoderResult.OVERFLOW;
+ da[dp++] = c;
+ sp +=2;
+ }
+ return CoderResult.UNDERFLOW;
+ } finally {
+ src.position(sp - src.arrayOffset());
+ dst.position(dp - dst.arrayOffset());
+ }
+
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11SunUnicode_0.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11SunUnicode_0 extends Charset {
+ public X11SunUnicode_0 () {
+ super("X11SunUnicode_0", null);
+ }
+
+ public CharsetEncoder newEncoder() {
+ return new Encoder(this);
+ }
+
+ /* Seems like supporting a decoder is required, but we aren't going
+ * to be publically exposing this class, so no need to waste work
+ */
+ public CharsetDecoder newDecoder() {
+ throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
+ }
+
+ public boolean contains(Charset cs) {
+ return cs instanceof X11SunUnicode_0;
+ }
+
+ private static class Encoder extends DoubleByteEncoder {
+ public Encoder(Charset cs) {
+ super(cs, index1, index2);
+ }
+
+ private final static String innerIndex0=
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
+ "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
+ "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
+ "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
+ "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
+ "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
+ "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
+ "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
+ "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
+ "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
+ "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
+ "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
+ "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
+ "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
+ "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+ "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+ private final static short index1[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+
+ private final static String index2[] = {
+ innerIndex0
+ };
+
+ /* The default implementation creates a decoder and we don't have one */
+ public boolean isLegalReplacement(byte[] repl) {
+ return true;
+ }
+ }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/font/XMap.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/font/XMap.java Wed Jul 05 20:33:55 2017 +0200
@@ -69,7 +69,7 @@
boolean addAscii = false;
boolean lowPartOnly = false;
if (encoding.equals("dingbats")) {
- jclass = "sun.awt.motif.X11Dingbats";
+ jclass = "sun.font.X11Dingbats";
minU = 0x2701;
maxU = 0x27be;
} else if (encoding.equals("symbol")){
@@ -81,10 +81,10 @@
} else if (encoding.equals("iso8859-2")) {
jclass = "ISO8859_2";
} else if (encoding.equals("jisx0208.1983-0")) {
- jclass = "sun.awt.motif.X11JIS0208";
+ jclass = "JIS0208";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals("jisx0201.1976-0")) {
- jclass = "sun.awt.motif.X11JIS0201";
+ jclass = "JIS0201";
// this is mapping the latin supplement range 128->255 which
// doesn't exist in JIS0201. This needs examination.
// it was also overwriting a couple of the mappings of
@@ -94,7 +94,7 @@
addAscii = true;
lowPartOnly = true;
} else if (encoding.equals("jisx0212.1990-0")) {
- jclass = "sun.awt.motif.X11JIS0212";
+ jclass = "JIS0212";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals("iso8859-4")) {
jclass = "ISO8859_4";
@@ -117,25 +117,25 @@
} else if (encoding.equals("iso8859-15")) {
jclass = "ISO8859_15";
} else if (encoding.equals("ksc5601.1987-0")) {
- jclass ="sun.awt.motif.X11KSC5601";
+ jclass ="sun.font.X11KSC5601";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals( "ksc5601.1992-3")) {
- jclass ="sun.awt.motif.X11Johab";
+ jclass ="sun.font.X11Johab";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals( "ksc5601.1987-1")) {
jclass ="EUC_KR";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals( "cns11643-1")) {
- jclass = "sun.awt.motif.X11CNS11643P1";
+ jclass = "sun.font.X11CNS11643P1";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals("cns11643-2")) {
- jclass = "sun.awt.motif.X11CNS11643P2";
+ jclass = "sun.font.X11CNS11643P2";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals("cns11643-3")) {
- jclass = "sun.awt.motif.X11CNS11643P3";
+ jclass = "sun.font.X11CNS11643P3";
nBytes = DOUBLE_BYTE;
} else if (encoding.equals("gb2312.1980-0")) {
- jclass = "sun.awt.motif.X11GB2312";
+ jclass = "sun.font.X11GB2312";
nBytes = DOUBLE_BYTE;
} else if (encoding.indexOf("big5") >= 0) {
jclass = "Big5";
@@ -144,19 +144,19 @@
} else if (encoding.equals("tis620.2533-0")) {
jclass = "TIS620";
} else if (encoding.equals("gbk-0")) {
- jclass = "sun.awt.motif.X11GBK";
+ jclass = "sun.font.X11GBK";
nBytes = DOUBLE_BYTE;
} else if (encoding.indexOf("sun.unicode-0") >= 0) {
- jclass = "sun.awt.motif.X11SunUnicode_0";
+ jclass = "sun.font.X11SunUnicode_0";
nBytes = DOUBLE_BYTE;
} else if (encoding.indexOf("gb18030.2000-1") >= 0) {
- jclass = "sun.awt.motif.X11GB18030_1";
+ jclass = "sun.font.X11GB18030_1";
nBytes = DOUBLE_BYTE;
} else if (encoding.indexOf( "gb18030.2000-0") >= 0) {
- jclass = "sun.awt.motif.X11GB18030_0";
+ jclass = "sun.font.X11GB18030_0";
nBytes = DOUBLE_BYTE;
} else if (encoding.indexOf("hkscs") >= 0) {
- jclass = "sun.awt.HKSCS";
+ jclass = "MS950_HKSCS_XP";
nBytes = DOUBLE_BYTE;
}
return new XMap(jclass, minU, maxU, nBytes, addAscii, lowPartOnly);
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -31,6 +31,9 @@
import java.awt.GraphicsConfiguration;
import java.awt.Transparency;
import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.X11ComponentPeer;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.VolatileSurfaceManager;
@@ -73,12 +76,11 @@
* Create a pbuffer-based SurfaceData object (or init the backbuffer
* of an existing window if this is a double buffered GraphicsConfig)
*/
- @SuppressWarnings("deprecation")
protected SurfaceData initAcceleratedSurface() {
SurfaceData sData;
Component comp = vImg.getComponent();
- X11ComponentPeer peer =
- (comp != null) ? (X11ComponentPeer)comp.getPeer() : null;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ X11ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
try {
boolean createVSynced = false;
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,6 +1,5 @@
/*
- * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved.
-
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. 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
--- a/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c Wed Jul 05 20:33:55 2017 +0200
@@ -84,12 +84,10 @@
(JNIEnv *env, jclass cls)
{
#ifndef HEADLESS
- /** We call "NoClientCode" methods because they won't invoke client
- code on the privileged toolkit thread **/
CHECK_NULL(fontIDs.pData = (*env)->GetFieldID(env, cls, "pData", "J"));
CHECK_NULL(fontIDs.style = (*env)->GetFieldID(env, cls, "style", "I"));
CHECK_NULL(fontIDs.size = (*env)->GetFieldID(env, cls, "size", "I"));
- CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getPeer_NoClientCode",
+ CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getFontPeer",
"()Ljava/awt/peer/FontPeer;"));
CHECK_NULL(fontIDs.getFamily = (*env)->GetMethodID(env, cls, "getFamily_NoClientCode",
"()Ljava/lang/String;"));
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c Wed Jul 05 20:33:55 2017 +0200
@@ -1716,9 +1716,9 @@
/*
* REMIND: Fullscreen mode doesn't work quite right with multi-monitor
- * setups and RANDR 1.2. So for now we also require a single screen.
+ * setups and RANDR 1.2.
*/
- if (awt_numScreens > 1 ) {
+ if ((rr_maj_ver == 1 && rr_min_ver <= 2) && awt_numScreens > 1) {
J2dRlsTraceLn(J2D_TRACE_INFO, "X11GD_InitXrandrFuncs: Can't use Xrandr. "
"Multiple screens in use");
dlclose(pLibRandR);
@@ -1806,40 +1806,14 @@
Atom wmState = XInternAtom(awt_display, "_NET_WM_STATE", False);
Atom wmStateFs = XInternAtom(awt_display,
"_NET_WM_STATE_FULLSCREEN", False);
- Window root, parent, *children = NULL;
- unsigned int numchildren;
+ XWindowAttributes attr;
XEvent event;
- Status status;
- if (wmState == None || wmStateFs == None) {
+ if (wmState == None || wmStateFs == None
+ || !XGetWindowAttributes(awt_display, win, &attr)) {
return;
}
- /*
- * Note: the Window passed to this method is typically the "content
- * window" of the top-level, but we need the actual shell window for
- * the purposes of constructing the XEvent. Therefore, we walk up the
- * window hierarchy here to find the true top-level.
- */
- do {
- if (!XQueryTree(awt_display, win,
- &root, &parent,
- &children, &numchildren))
- {
- return;
- }
-
- if (children != NULL) {
- XFree(children);
- }
-
- if (parent == root) {
- break;
- }
-
- win = parent;
- } while (root != parent);
-
memset(&event, 0, sizeof(event));
event.xclient.type = ClientMessage;
event.xclient.message_type = wmState;
@@ -1849,7 +1823,7 @@
event.xclient.data.l[0] = enabled ? 1 : 0; // 1==add, 0==remove
event.xclient.data.l[1] = wmStateFs;
- XSendEvent(awt_display, root, False,
+ XSendEvent(awt_display, attr.root, False,
SubstructureRedirectMask | SubstructureNotifyMask,
&event);
XSync(awt_display, False);
--- a/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c Wed Jul 05 20:33:55 2017 +0200
@@ -234,7 +234,7 @@
NativeScalerContext *context = (NativeScalerContext*)pScalerContext;
AWTFont xFont = (AWTFont)context->xFont;
- AWTChar xcs;
+ AWTChar xcs = NULL;
jfloat advance = 0.0f;
if (xFont == NULL || context->ptSize == NO_POINTSIZE) {
--- a/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -329,7 +329,6 @@
}
@Override
- @SuppressWarnings("deprecation")
public synchronized void setFullScreenWindow(Window w) {
Window old = getFullScreenWindow();
if (w == old) {
@@ -353,7 +352,7 @@
// entering the fullscreen mode.
defaultDisplayMode = null;
}
- WWindowPeer peer = (WWindowPeer)old.getPeer();
+ WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(old);
if (peer != null) {
peer.setFullScreenExclusiveModeState(false);
// we used to destroy the buffers on exiting fs mode, this
@@ -372,7 +371,7 @@
defaultDisplayMode = getDisplayMode();
addFSWindowListener(w);
// Enter full screen exclusive mode.
- WWindowPeer peer = (WWindowPeer)w.getPeer();
+ WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer != null) {
synchronized(peer) {
enterFullScreenExclusive(screen, peer);
@@ -405,7 +404,6 @@
}
@Override
- @SuppressWarnings("deprecation")
public synchronized void setDisplayMode(DisplayMode dm) {
if (!isDisplayChangeSupported()) {
super.setDisplayMode(dm);
@@ -419,7 +417,7 @@
}
Window w = getFullScreenWindow();
if (w != null) {
- WWindowPeer peer = (WWindowPeer)w.getPeer();
+ WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
configDisplayMode(screen, peer, dm.getWidth(), dm.getHeight(),
dm.getBitDepth(), dm.getRefreshRate());
// resize the fullscreen window to the dimensions of the new
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -30,6 +30,8 @@
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowAdapter;
+
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
final class WChoicePeer extends WComponentPeer implements ChoicePeer {
@@ -94,7 +96,6 @@
native void create(WComponentPeer parent);
@Override
- @SuppressWarnings("deprecation")
void initialize() {
Choice opt = (Choice)target;
int itemCount = opt.getItemCount();
@@ -111,7 +112,8 @@
Window parentWindow = SunToolkit.getContainingWindow((Component)target);
if (parentWindow != null) {
- WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (wpeer != null) {
windowListener = new WindowAdapter() {
@Override
@@ -130,13 +132,13 @@
}
@Override
- @SuppressWarnings("deprecation")
protected void disposeImpl() {
// TODO: we should somehow reset the listener when the choice
// is moved to another toplevel without destroying its peer.
Window parentWindow = SunToolkit.getContainingWindow((Component)target);
if (parentWindow != null) {
- WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (wpeer != null) {
wpeer.removeWindowListener(windowListener);
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -569,7 +569,6 @@
final static Font defaultFont = new Font(Font.DIALOG, Font.PLAIN, 12);
@Override
- @SuppressWarnings("deprecation")
public Graphics getGraphics() {
if (isDisposed()) {
return null;
@@ -578,8 +577,9 @@
Component target = (Component)getTarget();
Window window = SunToolkit.getContainingWindow(target);
if (window != null) {
- Graphics g =
- ((WWindowPeer)window.getPeer()).getTranslucentGraphics();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(window);
+ Graphics g = wpeer.getTranslucentGraphics();
// getTranslucentGraphics() returns non-null value for non-opaque windows only
if (g != null) {
// Non-opaque windows do not support heavyweight children.
@@ -685,7 +685,6 @@
// TODO: consider moving it to KeyboardFocusManagerPeerImpl
@Override
- @SuppressWarnings("deprecation")
public boolean requestFocus(Component lightweightChild, boolean temporary,
boolean focusedWindowChangeAllowed, long time,
CausedFocusEvent.Cause cause)
@@ -713,7 +712,8 @@
if (parentWindow == null) {
return rejectFocusRequestHelper("WARNING: Parent window is null");
}
- WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(parentWindow);
if (wpeer == null) {
return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
}
@@ -1104,7 +1104,6 @@
// in the browser on Vista when DWM is enabled.
// @return true if the toplevel container is not an EmbeddedFrame or
// if this EmbeddedFrame is acceleration capable, false otherwise
- @SuppressWarnings("deprecation")
private static final boolean isContainingTopLevelAccelCapable(Component c) {
while (c != null && !(c instanceof WEmbeddedFrame)) {
c = c.getParent();
@@ -1112,7 +1111,9 @@
if (c == null) {
return true;
}
- return ((WEmbeddedFramePeer)c.getPeer()).isAccelCapable();
+ final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(c);
+ return peer.isAccelCapable();
}
/**
@@ -1120,7 +1121,6 @@
* @since 1.7
*/
@Override
- @SuppressWarnings("deprecation")
public void applyShape(Region shape) {
if (shapeLog.isLoggable(PlatformLogger.Level.FINER)) {
shapeLog.finer("*** INFO: Setting shape: PEER: " + this
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -103,7 +103,7 @@
@Override
public void blockWindows(java.util.List<Window> toBlock) {
for (Window w : toBlock) {
- WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+ WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
wp.setModalBlocked((Dialog)target, true);
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -30,8 +30,11 @@
import java.awt.event.InvocationEvent;
import java.awt.peer.ComponentPeer;
import java.awt.image.*;
+
import sun.awt.image.ByteInterleavedRaster;
import sun.security.action.GetPropertyAction;
+
+import java.awt.peer.FramePeer;
import java.security.PrivilegedAction;
import java.security.AccessController;
@@ -80,9 +83,8 @@
}
}
- @SuppressWarnings("deprecation")
public void addNotify() {
- if (getPeer() == null) {
+ if (!isDisplayable()) {
WToolkit toolkit = (WToolkit)Toolkit.getDefaultToolkit();
setPeer(toolkit.createEmbeddedFrame(this));
}
@@ -232,16 +234,16 @@
public void activateEmbeddingTopLevel() {
}
- @SuppressWarnings("deprecation")
public void synthesizeWindowActivation(final boolean activate) {
+ final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
if (!activate || EventQueue.isDispatchThread()) {
- ((WFramePeer)getPeer()).emulateActivation(activate);
+ peer.emulateActivation(activate);
} else {
// To avoid focus concurrence b/w IE and EmbeddedFrame
// activation is postponed by means of posting it to EDT.
Runnable r = new Runnable() {
public void run() {
- ((WFramePeer)getPeer()).emulateActivation(true);
+ peer.emulateActivation(true);
}
};
WToolkit.postEvent(WToolkit.targetToAppContext(this),
@@ -249,10 +251,11 @@
}
}
- @SuppressWarnings("deprecation")
public boolean requestFocusToEmbedder() {
if (isEmbeddedInIE) {
- return ((WEmbeddedFramePeer) getPeer()).requestFocusToEmbedder();
+ final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(this);
+ return peer.requestFocusToEmbedder();
}
return false;
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -237,7 +237,7 @@
@Override
public void blockWindows(java.util.List<Window> toBlock) {
for (Window w : toBlock) {
- WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+ WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
blockWindow(wp);
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -40,6 +40,9 @@
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.im.InputMethodAdapter;
final class WInputMethod extends InputMethodAdapter
@@ -606,18 +609,17 @@
// java.awt.Toolkit#getNativeContainer() is not available
// from this package
- @SuppressWarnings("deprecation")
private WComponentPeer getNearestNativePeer(Component comp)
{
if (comp==null) return null;
-
- ComponentPeer peer = comp.getPeer();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ ComponentPeer peer = acc.getPeer(comp);
if (peer==null) return null;
while (peer instanceof java.awt.peer.LightweightPeer) {
comp = comp.getParent();
if (comp==null) return null;
- peer = comp.getPeer();
+ peer = acc.getPeer(comp);
if (peer==null) return null;
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. 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
@@ -28,6 +28,9 @@
import java.awt.Window;
import java.awt.Component;
import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.KeyboardFocusManagerPeerImpl;
import sun.awt.CausedFocusEvent;
@@ -46,9 +49,9 @@
}
@Override
- @SuppressWarnings("deprecation")
public void setCurrentFocusOwner(Component comp) {
- setNativeFocusOwner(comp != null ? comp.getPeer() : null);
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ setNativeFocusOwner(comp != null ? acc.getPeer(comp) : null);
}
@Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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
@@ -57,15 +57,13 @@
}
@Override
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized(getTreeLock()) {
Container parent = getParent();
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && !parent.isDisplayable()) {
parent.addNotify();
}
-
- if (getPeer() == null) {
+ if (!isDisplayable()) {
ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
createWPageDialog(this);
setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. 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
@@ -58,15 +58,14 @@
}
@Override
- @SuppressWarnings("deprecation")
public void addNotify() {
synchronized(getTreeLock()) {
Container parent = getParent();
- if (parent != null && parent.getPeer() == null) {
+ if (parent != null && !parent.isDisplayable()) {
parent.addNotify();
}
- if (getPeer() == null) {
+ if (!isDisplayable()) {
ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
createWPrintDialog(this);
setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -112,7 +112,7 @@
@Override
public void blockWindows(java.util.List<Window> toBlock) {
for (Window w : toBlock) {
- WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+ WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
blockWindow(wp);
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. 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
@@ -30,13 +30,11 @@
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
-import java.awt.KeyboardFocusManager;
import java.awt.Toolkit;
import java.awt.BasicStroke;
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
-import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FileDialog;
@@ -62,6 +60,8 @@
import java.util.MissingResourceException;
import java.util.ResourceBundle;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.print.PeekGraphics;
import sun.print.PeekMetrics;
@@ -2117,7 +2117,6 @@
short xres_quality,
short yres);
- @SuppressWarnings("deprecation")
public PrintRequestAttributeSet
showDocumentProperties(Window owner,
PrintService service,
@@ -2127,7 +2126,8 @@
setNativePrintServiceIfNeeded(service.getName());
} catch (PrinterException e) {
}
- long hWnd = ((WWindowPeer)(owner.getPeer())).getHWnd();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ long hWnd = acc.<WComponentPeer>getPeer(owner).getHWnd();
DevModeValues info = new DevModeValues();
getDevModeValues(aset, info);
boolean ok =
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -29,6 +29,7 @@
import java.awt.peer.ScrollPanePeer;
import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.PeerEvent;
import sun.util.logging.PlatformLogger;
@@ -199,7 +200,6 @@
}
@Override
- @SuppressWarnings("deprecation")
public void run() {
if (getScrollChild() == null) {
return;
@@ -267,8 +267,9 @@
// Paint the exposed area right away. To do this - find
// the heavyweight ancestor of the scroll child.
Component hwAncestor = getScrollChild();
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
while (hwAncestor != null
- && !(hwAncestor.getPeer() instanceof WComponentPeer))
+ && !(acc.getPeer(hwAncestor) instanceof WComponentPeer))
{
hwAncestor = hwAncestor.getParent();
}
@@ -278,7 +279,7 @@
"couldn't find heavyweight ancestor of scroll pane child");
}
}
- WComponentPeer hwPeer = (WComponentPeer)hwAncestor.getPeer();
+ WComponentPeer hwPeer = acc.getPeer(hwAncestor);
hwPeer.paintDamagedAreaImmediately();
}
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -36,6 +36,8 @@
import java.beans.PropertyChangeListener;
import java.security.AccessController;
import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor;
import sun.awt.AppContext;
import sun.awt.AWTAutoShutdown;
import sun.awt.AWTPermissions;
@@ -301,9 +303,10 @@
public void run() {
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
Thread.currentThread().setContextClassLoader(null);
+ Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
return null;
});
- Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
+
boolean startPump = init();
if (startPump) {
@@ -438,9 +441,8 @@
}
@Override
- @SuppressWarnings("deprecation")
public void disableBackgroundErase(Canvas canvas) {
- WCanvasPeer peer = (WCanvasPeer)canvas.getPeer();
+ WCanvasPeer peer = AWTAccessor.getComponentAccessor().getPeer(canvas);
if (peer == null) {
throw new IllegalStateException("Canvas must have a valid peer");
}
@@ -1100,18 +1102,18 @@
}
@Override
- @SuppressWarnings("deprecation")
public void grab(Window w) {
- if (w.getPeer() != null) {
- ((WWindowPeer)w.getPeer()).grab();
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((WWindowPeer) peer).grab();
}
}
@Override
- @SuppressWarnings("deprecation")
public void ungrab(Window w) {
- if (w.getPeer() != null) {
- ((WWindowPeer)w.getPeer()).ungrab();
+ final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+ if (peer != null) {
+ ((WWindowPeer) peer).ungrab();
}
}
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. 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
@@ -34,6 +34,8 @@
import java.awt.Image;
import java.awt.peer.TrayIconPeer;
import java.awt.image.*;
+
+import sun.awt.AWTAccessor;
import sun.awt.SunToolkit;
import sun.awt.image.IntegerComponentRaster;
@@ -80,25 +82,23 @@
if (isDisposed())
return;
- SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
- @Override
- @SuppressWarnings("deprecation")
- public void run() {
- PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
- if (popup != newPopup) {
- if (popup != null) {
- popupParent.remove(popup);
- }
- if (newPopup != null) {
- popupParent.add(newPopup);
- }
- popup = newPopup;
- }
- if (popup != null) {
- ((WPopupMenuPeer)popup.getPeer()).show(popupParent, new Point(x, y));
- }
+ SunToolkit.executeOnEventHandlerThread(target, () -> {
+ PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
+ if (popup != newPopup) {
+ if (popup != null) {
+ popupParent.remove(popup);
+ }
+ if (newPopup != null) {
+ popupParent.add(newPopup);
}
- });
+ popup = newPopup;
+ }
+ if (popup != null) {
+ WPopupMenuPeer peer = AWTAccessor.getMenuComponentAccessor()
+ .getPeer(popup);
+ peer.show(popupParent, new Point(x, y));
+ }
+ });
}
@Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -409,12 +409,12 @@
}
@Override
- @SuppressWarnings("deprecation")
public void setModalBlocked(Dialog dialog, boolean blocked) {
synchronized (((Component)getTarget()).getTreeLock()) // State lock should always be after awtLock
{
// use WWindowPeer instead of WDialogPeer because of FileDialogs and PrintDialogs
- WWindowPeer blockerPeer = (WWindowPeer)dialog.getPeer();
+ WWindowPeer blockerPeer = AWTAccessor.getComponentAccessor()
+ .getPeer(dialog);
if (blocked)
{
modalBlocker = blockerPeer;
@@ -609,14 +609,13 @@
super.print(g);
}
- @SuppressWarnings("deprecation")
private void replaceSurfaceDataRecursively(Component c) {
if (c instanceof Container) {
for (Component child : ((Container)c).getComponents()) {
replaceSurfaceDataRecursively(child);
}
}
- ComponentPeer cp = c.getPeer();
+ final Object cp = AWTAccessor.getComponentAccessor().getPeer(c);
if (cp instanceof WComponentPeer) {
((WComponentPeer)cp).replaceSurfaceDataLater();
}
@@ -818,7 +817,7 @@
* updates the list of active windows per AppContext, so the latest active
* window is always at the end of the list. The list is stored in AppContext.
*/
- @SuppressWarnings( value = {"deprecation", "unchecked"})
+ @SuppressWarnings("unchecked")
private static class ActiveWindowListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent e) {
@@ -828,7 +827,7 @@
}
AppContext appContext = SunToolkit.targetToAppContext(w);
synchronized (appContext) {
- WWindowPeer wp = (WWindowPeer)w.getPeer();
+ WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
// add/move wp to the end of the list
List<WWindowPeer> l = (List<WWindowPeer>)appContext.get(ACTIVE_WINDOWS_KEY);
if (l != null) {
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -37,6 +37,9 @@
import java.awt.event.WindowListener;
import java.awt.peer.WindowPeer;
import java.util.ArrayList;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.Win32GraphicsDevice;
import sun.awt.windows.WWindowPeer;
import sun.java2d.pipe.hw.ContextCapabilities;
@@ -176,11 +179,10 @@
long hwnd);
@Override
- @SuppressWarnings("deprecation")
protected void enterFullScreenExclusive(final int screen, WindowPeer wp)
{
- final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
-
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(realFSWindow);
D3DRenderQueue rq = D3DRenderQueue.getInstance();
rq.lock();
try {
@@ -247,16 +249,15 @@
}
@Override
- @SuppressWarnings("deprecation")
protected void addFSWindowListener(Window w) {
// if the window is not a toplevel (has an owner) we have to use the
// real toplevel to enter the full-screen mode with (4933099).
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (!(w instanceof Frame) && !(w instanceof Dialog) &&
(realFSWindow = getToplevelOwner(w)) != null)
{
ownerOrigBounds = realFSWindow.getBounds();
- WWindowPeer fp = (WWindowPeer)realFSWindow.getPeer();
-
+ WWindowPeer fp = acc.getPeer(realFSWindow);
ownerWasVisible = realFSWindow.isVisible();
Rectangle r = w.getBounds();
// we use operations on peer instead of component because calling
@@ -268,14 +269,13 @@
}
fsWindowWasAlwaysOnTop = realFSWindow.isAlwaysOnTop();
- ((WWindowPeer)realFSWindow.getPeer()).setAlwaysOnTop(true);
+ ((WWindowPeer) acc.getPeer(realFSWindow)).setAlwaysOnTop(true);
fsWindowListener = new D3DFSWindowAdapter();
realFSWindow.addWindowListener(fsWindowListener);
}
@Override
- @SuppressWarnings("deprecation")
protected void removeFSWindowListener(Window w) {
realFSWindow.removeWindowListener(fsWindowListener);
fsWindowListener = null;
@@ -290,7 +290,8 @@
* its original size (just like the Window is being resized
* to its original size in GraphicsDevice).
*/
- WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(realFSWindow);
if (wpeer != null) {
if (ownerOrigBounds != null) {
// if the window went into fs mode before it was realized it
@@ -340,7 +341,6 @@
int bitDepth,
int refreshRate);
@Override
- @SuppressWarnings("deprecation")
protected void configDisplayMode(final int screen, final WindowPeer w,
final int width, final int height,
final int bitDepth, final int refreshRate)
@@ -351,8 +351,8 @@
refreshRate);
return;
}
-
- final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+ final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+ .getPeer(realFSWindow);
// REMIND: we do this before we switch the display mode, so
// the dimensions may be exceeding the dimensions of the screen,
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -38,6 +38,7 @@
import java.util.HashMap;
import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.util.ThreadGroupUtils;
import sun.awt.Win32GraphicsConfig;
import sun.awt.windows.WComponentPeer;
@@ -531,11 +532,11 @@
* @param comp component to check for hw children
* @return true if Component has heavyweight children
*/
- @SuppressWarnings("deprecation")
private static boolean hasHWChildren(Component comp) {
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
if (comp instanceof Container) {
for (Component c : ((Container)comp).getComponents()) {
- if (c.getPeer() instanceof WComponentPeer || hasHWChildren(c)) {
+ if (acc.getPeer(c) instanceof WComponentPeer || hasHWChildren(c)) {
return true;
}
}
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -30,6 +30,9 @@
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.Win32GraphicsConfig;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.SurfaceManager;
@@ -79,12 +82,11 @@
* Create a pbuffer-based SurfaceData object (or init the backbuffer
* of an existing window if this is a double buffered GraphicsConfig).
*/
- @SuppressWarnings("deprecation")
protected SurfaceData initAcceleratedSurface() {
SurfaceData sData;
Component comp = vImg.getComponent();
- WComponentPeer peer =
- (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
try {
boolean forceback = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2015, Oracle and/or its affiliates. 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
@@ -31,6 +31,9 @@
import java.awt.GraphicsConfiguration;
import java.awt.Transparency;
import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.image.SunVolatileImage;
import sun.awt.image.VolatileSurfaceManager;
import sun.awt.windows.WComponentPeer;
@@ -73,12 +76,11 @@
* Create a pbuffer-based SurfaceData object (or init the backbuffer
* of an existing window if this is a double buffered GraphicsConfig).
*/
- @SuppressWarnings("deprecation")
protected SurfaceData initAcceleratedSurface() {
SurfaceData sData;
Component comp = vImg.getComponent();
- WComponentPeer peer =
- (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+ final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
try {
boolean createVSynced = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java Wed Jul 05 20:33:55 2017 +0200
@@ -126,7 +126,6 @@
private static boolean disableRegistry;
private static boolean magPresent;
private static boolean setHighDPIAware;
- private static String javaVersion;
// TODO: other flags, including nopixfmt
static {
@@ -240,17 +239,6 @@
getBooleanProp("sun.java2d.checkRegistry", false);
disableRegistry =
getBooleanProp("sun.java2d.disableRegistry", false);
- javaVersion = System.getProperty("java.version");
- if (javaVersion == null) {
- // Cannot be true, nonetheless...
- javaVersion = "default";
- } else {
- int dashIndex = javaVersion.indexOf('-');
- if (dashIndex >= 0) {
- // an interim release; use only the part preceding the -
- javaVersion = javaVersion.substring(0, dashIndex);
- }
- }
String dpiOverride = System.getProperty("sun.java2d.dpiaware");
if (dpiOverride != null) {
setHighDPIAware = dpiOverride.equalsIgnoreCase("true");
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -242,7 +242,8 @@
RECT focusRect;
VERIFY(::CopyRect(&focusRect, &rect));
VERIFY(::InflateRect(&focusRect,-inf,-inf));
- VERIFY(::DrawFocusRect(hDC, &focusRect));
+ if(::DrawFocusRect(hDC, &focusRect) == 0)
+ VERIFY(::GetLastError() == 0);
}
/* Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -290,12 +290,14 @@
if ((drawInfo.itemState & ODS_FOCUS) &&
((drawInfo.itemAction & ODA_FOCUS)||
(drawInfo.itemAction &ODA_DRAWENTIRE))) {
- VERIFY(::DrawFocusRect(hDC, &focusRect));
+ if(::DrawFocusRect(hDC, &focusRect) == 0)
+ VERIFY(::GetLastError() == 0);
}
/* erase focus rect */
else if (!(drawInfo.itemState & ODS_FOCUS) &&
(drawInfo.itemAction & ODA_FOCUS)) {
- VERIFY(::DrawFocusRect(hDC, &focusRect));
+ if(::DrawFocusRect(hDC, &focusRect) == 0)
+ VERIFY(::GetLastError() == 0);
}
/* Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. 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
@@ -3742,12 +3742,14 @@
void AwtComponent::OpenCandidateWindow(int x, int y)
{
UINT bits = 1;
- RECT rc;
- GetWindowRect(GetHWnd(), &rc);
+ POINT p = {0, 0}; // upper left corner of the client area
+ HWND hWnd = GetHWnd();
+ HWND hTop = GetTopLevelParentForWindow(hWnd);
+ ::ClientToScreen(hTop, &p);
for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) {
if ( m_bitsCandType & bits )
- SetCandidateWindow(iCandType, x-rc.left, y-rc.top);
+ SetCandidateWindow(iCandType, x - p.x, y - p.y);
}
if (m_bitsCandType != 0) {
// REMIND: is there any chance GetProxyFocusOwner() returns NULL here?
@@ -4322,7 +4324,8 @@
if ((drawInfo.itemState & ODS_FOCUS) &&
(drawInfo.itemAction & (ODA_FOCUS | ODA_DRAWENTIRE))) {
if (!unfocusableChoice){
- VERIFY(::DrawFocusRect(hDC, &rect));
+ if(::DrawFocusRect(hDC, &rect) == 0)
+ VERIFY(::GetLastError() == 0);
}
}
env->DeleteLocalRef(target);
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp Wed Jul 05 20:33:55 2017 +0200
@@ -985,7 +985,7 @@
JNIEXPORT void JNICALL
Java_java_awt_Font_initIDs(JNIEnv *env, jclass cls)
{
- CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getPeer",
+ CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getFontPeer",
"()Ljava/awt/peer/FontPeer;"));
CHECK_NULL(AwtFont::pDataID = env->GetFieldID(cls, "pData", "J"));
CHECK_NULL(AwtFont::nameID =
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/JdkLDAP.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.util.HashMap;
+import java.util.List;
+import java.security.Provider;
+import java.security.NoSuchAlgorithmException;
+import java.security.InvalidParameterException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.ProviderException;
+import java.security.cert.CertStoreParameters;
+
+/**
+ * Provider class for the JdkLDAP provider.
+ * Supports LDAP cert store.
+ *
+ * @since 1.9
+ */
+public final class JdkLDAP extends Provider {
+
+ private static final long serialVersionUID = -2279741232933606418L;
+
+ private static final class ProviderService extends Provider.Service {
+ ProviderService(Provider p, String type, String algo, String cn,
+ List<String> aliases, HashMap<String, String> attrs) {
+ super(p, type, algo, cn, aliases, attrs);
+ }
+
+ @Override
+ public Object newInstance(Object ctrParamObj)
+ throws NoSuchAlgorithmException {
+ String type = getType();
+ String algo = getAlgorithm();
+ if (type.equals("CertStore") && algo.equals("LDAP")) {
+ if (ctrParamObj != null &&
+ !(ctrParamObj instanceof CertStoreParameters)) {
+ throw new InvalidParameterException
+ ("constructorParameter must be instanceof CertStoreParameters");
+ }
+ try {
+ return new LDAPCertStore((CertStoreParameters) ctrParamObj);
+ } catch (Exception ex) {
+ throw new NoSuchAlgorithmException("Error constructing " +
+ type + " for " + algo + " using JdkLDAP", ex);
+ }
+ }
+ throw new ProviderException("No impl for " + algo + " " + type);
+ }
+ }
+
+ public JdkLDAP() {
+ super("JdkLDAP", 1.9d, "JdkLDAP Provider (implements LDAP CertStore)");
+
+ HashMap<String, String> attrs = new HashMap<>(2);
+ attrs.put("LDAPSchema", "RFC2587");
+ attrs.put("ImplementedIn", "Software");
+
+ /*
+ * CertStore
+ * attrs: LDAPSchema, ImplementedIn
+ */
+ putService(new ProviderService(this, "CertStore",
+ "LDAP", "sun.security.provider.certpath.ldap.LDAPCertStore",
+ null, attrs));
+ }
+}
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. 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
@@ -25,29 +25,15 @@
package sun.security.provider.certpath.ldap;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.math.BigInteger;
import java.net.URI;
import java.util.*;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.NameNotFoundException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttributes;
import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.*;
-import javax.naming.CommunicationException;
-import javax.naming.ldap.InitialLdapContext;
-import javax.naming.ldap.LdapContext;
import javax.security.auth.x500.X500Principal;
-import sun.misc.HexDumpEncoder;
-import sun.security.provider.certpath.X509CertificatePair;
import sun.security.util.Cache;
import sun.security.util.Debug;
import sun.security.x509.X500Name;
@@ -109,480 +95,124 @@
private final static boolean DEBUG = false;
- /**
- * LDAP attribute identifiers.
- */
- private static final String USER_CERT = "userCertificate;binary";
- private static final String CA_CERT = "cACertificate;binary";
- private static final String CROSS_CERT = "crossCertificatePair;binary";
- private static final String CRL = "certificateRevocationList;binary";
- private static final String ARL = "authorityRevocationList;binary";
- private static final String DELTA_CRL = "deltaRevocationList;binary";
+ private String ldapDN;
+
+ private LDAPCertStoreImpl impl;
+
+ public LDAPCertStore(CertStoreParameters params)
+ throws InvalidAlgorithmParameterException {
+ super(params);
- // Constants for various empty values
- private final static String[] STRING0 = new String[0];
-
- private final static byte[][] BB0 = new byte[0][];
-
- private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
-
- // cache related constants
- private final static int DEFAULT_CACHE_SIZE = 750;
- private final static int DEFAULT_CACHE_LIFETIME = 30;
+ String serverName;
+ int port;
+ String dn = null;
+ if (params == null) {
+ throw new InvalidAlgorithmParameterException(
+ "parameters required for LDAP Certore");
+ }
+ if (params instanceof LDAPCertStoreParameters) {
+ LDAPCertStoreParameters p = (LDAPCertStoreParameters) params;
+ serverName = p.getServerName();
+ port = p.getPort();
+ } else if (params instanceof URICertStoreParameters) {
+ URICertStoreParameters p = (URICertStoreParameters) params;
+ URI u = p.getURI();
+ if (!u.getScheme().equalsIgnoreCase("ldap")) {
+ throw new InvalidAlgorithmParameterException(
+ "Only LDAP URIs are supported for LDAP Certore");
+ }
+ // Use the same default values as in LDAPCertStoreParameters
+ // if unspecified in URI
+ serverName = u.getHost();
+ if (serverName == null) {
+ serverName = "localhost";
+ }
+ port = u.getPort();
+ if (port == -1) {
+ port = 389;
+ }
+ dn = u.getPath();
+ if (dn != null && dn.charAt(0) == '/') {
+ dn = dn.substring(1);
+ }
+ } else {
+ throw new InvalidAlgorithmParameterException(
+ "parameters must be either LDAPCertStoreParameters or " +
+ "URICertStoreParameters");
+ }
- private final static int LIFETIME;
+ Key k = new Key(serverName, port);
+ LDAPCertStoreImpl lci = certStoreCache.get(k);
+ if (lci == null) {
+ this.impl = new LDAPCertStoreImpl(serverName, port);
+ certStoreCache.put(k, impl);
+ } else {
+ this.impl = lci;
+ if (debug != null) {
+ debug.println("LDAPCertStore.getInstance: cache hit");
+ }
+ }
+ this.ldapDN = dn;
+ }
- private final static String PROP_LIFETIME =
- "sun.security.certpath.ldap.cache.lifetime";
+ private static class Key {
+ volatile int hashCode;
+
+ String serverName;
+ int port;
- /*
- * Internal system property, that when set to "true", disables the
- * JNDI application resource files lookup to prevent recursion issues
- * when validating signed JARs with LDAP URLs in certificates.
- */
- private final static String PROP_DISABLE_APP_RESOURCE_FILES =
- "sun.security.certpath.ldap.disable.app.resource.files";
+ Key(String serverName, int port) {
+ this.serverName = serverName;
+ this.port = port;
+ }
- static {
- String s = AccessController.doPrivileged(
- (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
- if (s != null) {
- LIFETIME = Integer.parseInt(s); // throws NumberFormatException
- } else {
- LIFETIME = DEFAULT_CACHE_LIFETIME;
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Key)) {
+ return false;
+ }
+ Key key = (Key) obj;
+ return (port == key.port &&
+ serverName.equalsIgnoreCase(key.serverName));
+ }
+
+ @Override
+ public int hashCode() {
+ if (hashCode == 0) {
+ int result = 17;
+ result = 37*result + port;
+ result = 37*result +
+ serverName.toLowerCase(Locale.ENGLISH).hashCode();
+ hashCode = result;
+ }
+ return hashCode;
}
}
/**
- * The CertificateFactory used to decode certificates from
- * their binary stored form.
- */
- private CertificateFactory cf;
- /**
- * The JNDI directory context.
- */
- private LdapContext ctx;
-
- /**
- * Flag indicating that communication error occurred.
- */
- private boolean communicationError = false;
-
- /**
- * Flag indicating whether we should prefetch CRLs.
- */
- private boolean prefetchCRLs = false;
-
- private final Cache<String, byte[][]> valueCache;
-
- private int cacheHits = 0;
- private int cacheMisses = 0;
- private int requests = 0;
-
- /**
- * Creates a <code>CertStore</code> with the specified parameters.
- * For this class, the parameters object must be an instance of
- * <code>LDAPCertStoreParameters</code>.
- *
- * @param params the algorithm parameters
- * @exception InvalidAlgorithmParameterException if params is not an
- * instance of <code>LDAPCertStoreParameters</code>
+ * Returns an LDAPCertStoreImpl object. This method consults a cache of
+ * LDAPCertStoreImpl objects (shared per JVM) using the corresponding
+ * LDAP server name and port info as a key.
*/
- public LDAPCertStore(CertStoreParameters params)
- throws InvalidAlgorithmParameterException {
- super(params);
- if (!(params instanceof LDAPCertStoreParameters))
- throw new InvalidAlgorithmParameterException(
- "parameters must be LDAPCertStoreParameters");
-
- LDAPCertStoreParameters lparams = (LDAPCertStoreParameters) params;
-
- // Create InitialDirContext needed to communicate with the server
- createInitialDirContext(lparams.getServerName(), lparams.getPort());
+ private static final Cache<Key, LDAPCertStoreImpl>
+ certStoreCache = Cache.newSoftMemoryCache(185);
- // Create CertificateFactory for use later on
- try {
- cf = CertificateFactory.getInstance("X.509");
- } catch (CertificateException e) {
- throw new InvalidAlgorithmParameterException(
- "unable to create CertificateFactory for X.509");
- }
- if (LIFETIME == 0) {
- valueCache = Cache.newNullCache();
- } else if (LIFETIME < 0) {
- valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
- } else {
- valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
- }
- }
-
- /**
- * Returns an LDAP CertStore. This method consults a cache of
- * CertStores (shared per JVM) using the LDAP server/port as a key.
- */
- private static final Cache<LDAPCertStoreParameters, CertStore>
- certStoreCache = Cache.newSoftMemoryCache(185);
- static synchronized CertStore getInstance(LDAPCertStoreParameters params)
+ // Exist solely for regression test for ensuring that caching is done
+ static synchronized LDAPCertStoreImpl getInstance(LDAPCertStoreParameters params)
throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
- // if necessary, convert params to SunLDAPCertStoreParameters because
- // LDAPCertStoreParameters does not override equals() and hashCode()
- if (! (params instanceof SunLDAPCertStoreParameters)) {
- params = new SunLDAPCertStoreParameters(params.getServerName(), params.getPort());
- }
- CertStore lcs = certStoreCache.get(params);
- if (lcs == null) {
- lcs = CertStore.getInstance("LDAP", params);
- certStoreCache.put(params, lcs);
+ String serverName = params.getServerName();
+ int port = params.getPort();
+ Key k = new Key(serverName, port);
+ LDAPCertStoreImpl lci = certStoreCache.get(k);
+ if (lci == null) {
+ lci = new LDAPCertStoreImpl(serverName, port);
+ certStoreCache.put(k, lci);
} else {
if (debug != null) {
debug.println("LDAPCertStore.getInstance: cache hit");
}
}
- return lcs;
- }
-
- /**
- * Create InitialDirContext.
- *
- * @param server Server DNS name hosting LDAP service
- * @param port Port at which server listens for requests
- * @throws InvalidAlgorithmParameterException if creation fails
- */
- private void createInitialDirContext(String server, int port)
- throws InvalidAlgorithmParameterException {
- String url = "ldap://" + server + ":" + port;
- Hashtable<String,Object> env = new Hashtable<>();
- env.put(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.ldap.LdapCtxFactory");
- env.put(Context.PROVIDER_URL, url);
-
- // If property is set to true, disable application resource file lookup.
- boolean disableAppResourceFiles = AccessController.doPrivileged(
- (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
- if (disableAppResourceFiles) {
- if (debug != null) {
- debug.println("LDAPCertStore disabling app resource files");
- }
- env.put("com.sun.naming.disable.app.resource.files", "true");
- }
-
- try {
- ctx = new InitialLdapContext(env, null);
- /*
- * By default, follow referrals unless application has
- * overridden property in an application resource file.
- */
- Hashtable<?,?> currentEnv = ctx.getEnvironment();
- if (currentEnv.get(Context.REFERRAL) == null) {
- ctx.addToEnvironment(Context.REFERRAL, "follow");
- }
- } catch (NamingException e) {
- if (debug != null) {
- debug.println("LDAPCertStore.engineInit about to throw "
- + "InvalidAlgorithmParameterException");
- e.printStackTrace();
- }
- Exception ee = new InvalidAlgorithmParameterException
- ("unable to create InitialDirContext using supplied parameters");
- ee.initCause(e);
- throw (InvalidAlgorithmParameterException)ee;
- }
- }
-
- /**
- * Private class encapsulating the actual LDAP operations and cache
- * handling. Use:
- *
- * LDAPRequest request = new LDAPRequest(dn);
- * request.addRequestedAttribute(CROSS_CERT);
- * request.addRequestedAttribute(CA_CERT);
- * byte[][] crossValues = request.getValues(CROSS_CERT);
- * byte[][] caValues = request.getValues(CA_CERT);
- *
- * At most one LDAP request is sent for each instance created. If all
- * getValues() calls can be satisfied from the cache, no request
- * is sent at all. If a request is sent, all requested attributes
- * are always added to the cache irrespective of whether the getValues()
- * method is called.
- */
- private class LDAPRequest {
-
- private final String name;
- private Map<String, byte[][]> valueMap;
- private final List<String> requestedAttributes;
-
- LDAPRequest(String name) {
- this.name = name;
- requestedAttributes = new ArrayList<>(5);
- }
-
- String getName() {
- return name;
- }
-
- void addRequestedAttribute(String attrId) {
- if (valueMap != null) {
- throw new IllegalStateException("Request already sent");
- }
- requestedAttributes.add(attrId);
- }
-
- /**
- * Gets one or more binary values from an attribute.
- *
- * @param name the location holding the attribute
- * @param attrId the attribute identifier
- * @return an array of binary values (byte arrays)
- * @throws NamingException if a naming exception occurs
- */
- byte[][] getValues(String attrId) throws NamingException {
- if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
- System.out.println("Cache hits: " + cacheHits + "; misses: "
- + cacheMisses);
- }
- String cacheKey = name + "|" + attrId;
- byte[][] values = valueCache.get(cacheKey);
- if (values != null) {
- cacheHits++;
- return values;
- }
- cacheMisses++;
- Map<String, byte[][]> attrs = getValueMap();
- values = attrs.get(attrId);
- return values;
- }
-
- /**
- * Get a map containing the values for this request. The first time
- * this method is called on an object, the LDAP request is sent,
- * the results parsed and added to a private map and also to the
- * cache of this LDAPCertStore. Subsequent calls return the private
- * map immediately.
- *
- * The map contains an entry for each requested attribute. The
- * attribute name is the key, values are byte[][]. If there are no
- * values for that attribute, values are byte[0][].
- *
- * @return the value Map
- * @throws NamingException if a naming exception occurs
- */
- private Map<String, byte[][]> getValueMap() throws NamingException {
- if (valueMap != null) {
- return valueMap;
- }
- if (DEBUG) {
- System.out.println("Request: " + name + ":" + requestedAttributes);
- requests++;
- if (requests % 5 == 0) {
- System.out.println("LDAP requests: " + requests);
- }
- }
- valueMap = new HashMap<>(8);
- String[] attrIds = requestedAttributes.toArray(STRING0);
- Attributes attrs;
-
- if (communicationError) {
- ctx.reconnect(null);
- communicationError = false;
- }
-
- try {
- attrs = ctx.getAttributes(name, attrIds);
- } catch (CommunicationException ce) {
- communicationError = true;
- throw ce;
- } catch (NameNotFoundException e) {
- // name does not exist on this LDAP server
- // treat same as not attributes found
- attrs = EMPTY_ATTRIBUTES;
- }
- for (String attrId : requestedAttributes) {
- Attribute attr = attrs.get(attrId);
- byte[][] values = getAttributeValues(attr);
- cacheAttribute(attrId, values);
- valueMap.put(attrId, values);
- }
- return valueMap;
- }
-
- /**
- * Add the values to the cache.
- */
- private void cacheAttribute(String attrId, byte[][] values) {
- String cacheKey = name + "|" + attrId;
- valueCache.put(cacheKey, values);
- }
-
- /**
- * Get the values for the given attribute. If the attribute is null
- * or does not contain any values, a zero length byte array is
- * returned. NOTE that it is assumed that all values are byte arrays.
- */
- private byte[][] getAttributeValues(Attribute attr)
- throws NamingException {
- byte[][] values;
- if (attr == null) {
- values = BB0;
- } else {
- values = new byte[attr.size()][];
- int i = 0;
- NamingEnumeration<?> enum_ = attr.getAll();
- while (enum_.hasMore()) {
- Object obj = enum_.next();
- if (debug != null) {
- if (obj instanceof String) {
- debug.println("LDAPCertStore.getAttrValues() "
- + "enum.next is a string!: " + obj);
- }
- }
- byte[] value = (byte[])obj;
- values[i++] = value;
- }
- }
- return values;
- }
-
- }
-
- /*
- * Gets certificates from an attribute id and location in the LDAP
- * directory. Returns a Collection containing only the Certificates that
- * match the specified CertSelector.
- *
- * @param name the location holding the attribute
- * @param id the attribute identifier
- * @param sel a CertSelector that the Certificates must match
- * @return a Collection of Certificates found
- * @throws CertStoreException if an exception occurs
- */
- private Collection<X509Certificate> getCertificates(LDAPRequest request,
- String id, X509CertSelector sel) throws CertStoreException {
-
- /* fetch encoded certs from storage */
- byte[][] encodedCert;
- try {
- encodedCert = request.getValues(id);
- } catch (NamingException namingEx) {
- throw new CertStoreException(namingEx);
- }
-
- int n = encodedCert.length;
- if (n == 0) {
- return Collections.emptySet();
- }
-
- List<X509Certificate> certs = new ArrayList<>(n);
- /* decode certs and check if they satisfy selector */
- for (int i = 0; i < n; i++) {
- ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
- try {
- Certificate cert = cf.generateCertificate(bais);
- if (sel.match(cert)) {
- certs.add((X509Certificate)cert);
- }
- } catch (CertificateException e) {
- if (debug != null) {
- debug.println("LDAPCertStore.getCertificates() encountered "
- + "exception while parsing cert, skipping the bad data: ");
- HexDumpEncoder encoder = new HexDumpEncoder();
- debug.println(
- "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
- }
- }
- }
-
- return certs;
- }
-
- /*
- * Gets certificate pairs from an attribute id and location in the LDAP
- * directory.
- *
- * @param name the location holding the attribute
- * @param id the attribute identifier
- * @return a Collection of X509CertificatePairs found
- * @throws CertStoreException if an exception occurs
- */
- private Collection<X509CertificatePair> getCertPairs(
- LDAPRequest request, String id) throws CertStoreException {
-
- /* fetch the encoded cert pairs from storage */
- byte[][] encodedCertPair;
- try {
- encodedCertPair = request.getValues(id);
- } catch (NamingException namingEx) {
- throw new CertStoreException(namingEx);
- }
-
- int n = encodedCertPair.length;
- if (n == 0) {
- return Collections.emptySet();
- }
-
- List<X509CertificatePair> certPairs = new ArrayList<>(n);
- /* decode each cert pair and add it to the Collection */
- for (int i = 0; i < n; i++) {
- try {
- X509CertificatePair certPair =
- X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
- certPairs.add(certPair);
- } catch (CertificateException e) {
- if (debug != null) {
- debug.println(
- "LDAPCertStore.getCertPairs() encountered exception "
- + "while parsing cert, skipping the bad data: ");
- HexDumpEncoder encoder = new HexDumpEncoder();
- debug.println(
- "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
- }
- }
- }
-
- return certPairs;
- }
-
- /*
- * Looks at certificate pairs stored in the crossCertificatePair attribute
- * at the specified location in the LDAP directory. Returns a Collection
- * containing all Certificates stored in the forward component that match
- * the forward CertSelector and all Certificates stored in the reverse
- * component that match the reverse CertSelector.
- * <p>
- * If either forward or reverse is null, all certificates from the
- * corresponding component will be rejected.
- *
- * @param name the location to look in
- * @param forward the forward CertSelector (or null)
- * @param reverse the reverse CertSelector (or null)
- * @return a Collection of Certificates found
- * @throws CertStoreException if an exception occurs
- */
- private Collection<X509Certificate> getMatchingCrossCerts(
- LDAPRequest request, X509CertSelector forward,
- X509CertSelector reverse)
- throws CertStoreException {
- // Get the cert pairs
- Collection<X509CertificatePair> certPairs =
- getCertPairs(request, CROSS_CERT);
-
- // Find Certificates that match and put them in a list
- ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
- for (X509CertificatePair certPair : certPairs) {
- X509Certificate cert;
- if (forward != null) {
- cert = certPair.getForward();
- if ((cert != null) && forward.match(cert)) {
- matchingCerts.add(cert);
- }
- }
- if (reverse != null) {
- cert = certPair.getReverse();
- if ((cert != null) && reverse.match(cert)) {
- matchingCerts.add(cert);
- }
- }
- }
- return matchingCerts;
+ return lci;
}
/**
@@ -612,159 +242,12 @@
debug.println("LDAPCertStore.engineGetCertificates() selector: "
+ String.valueOf(selector));
}
-
if (selector == null) {
selector = new X509CertSelector();
- }
- if (!(selector instanceof X509CertSelector)) {
- throw new CertStoreException("LDAPCertStore needs an X509CertSelector " +
- "to find certs");
- }
- X509CertSelector xsel = (X509CertSelector) selector;
- int basicConstraints = xsel.getBasicConstraints();
- String subject = xsel.getSubjectAsString();
- String issuer = xsel.getIssuerAsString();
- HashSet<X509Certificate> certs = new HashSet<>();
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
- + basicConstraints);
- }
-
- // basicConstraints:
- // -2: only EE certs accepted
- // -1: no check is done
- // 0: any CA certificate accepted
- // >1: certificate's basicConstraints extension pathlen must match
- if (subject != null) {
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() "
- + "subject is not null");
- }
- LDAPRequest request = new LDAPRequest(subject);
- if (basicConstraints > -2) {
- request.addRequestedAttribute(CROSS_CERT);
- request.addRequestedAttribute(CA_CERT);
- request.addRequestedAttribute(ARL);
- if (prefetchCRLs) {
- request.addRequestedAttribute(CRL);
- }
- }
- if (basicConstraints < 0) {
- request.addRequestedAttribute(USER_CERT);
- }
-
- if (basicConstraints > -2) {
- certs.addAll(getMatchingCrossCerts(request, xsel, null));
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() after "
- + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
- + certs.size());
- }
- certs.addAll(getCertificates(request, CA_CERT, xsel));
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() after "
- + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
- + certs.size());
- }
- }
- if (basicConstraints < 0) {
- certs.addAll(getCertificates(request, USER_CERT, xsel));
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() after "
- + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
- + certs.size());
- }
- }
- } else {
- if (debug != null) {
- debug.println
- ("LDAPCertStore.engineGetCertificates() subject is null");
- }
- if (basicConstraints == -2) {
- throw new CertStoreException("need subject to find EE certs");
- }
- if (issuer == null) {
- throw new CertStoreException("need subject or issuer to find certs");
- }
+ } else if (!(selector instanceof X509CertSelector)) {
+ throw new CertStoreException("need X509CertSelector to find certs");
}
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() about to "
- + "getMatchingCrossCerts...");
- }
- if ((issuer != null) && (basicConstraints > -2)) {
- LDAPRequest request = new LDAPRequest(issuer);
- request.addRequestedAttribute(CROSS_CERT);
- request.addRequestedAttribute(CA_CERT);
- request.addRequestedAttribute(ARL);
- if (prefetchCRLs) {
- request.addRequestedAttribute(CRL);
- }
-
- certs.addAll(getMatchingCrossCerts(request, null, xsel));
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() after "
- + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
- + certs.size());
- }
- certs.addAll(getCertificates(request, CA_CERT, xsel));
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() after "
- + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
- + certs.size());
- }
- }
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCertificates() returning certs");
- }
- return certs;
- }
-
- /*
- * Gets CRLs from an attribute id and location in the LDAP directory.
- * Returns a Collection containing only the CRLs that match the
- * specified CRLSelector.
- *
- * @param name the location holding the attribute
- * @param id the attribute identifier
- * @param sel a CRLSelector that the CRLs must match
- * @return a Collection of CRLs found
- * @throws CertStoreException if an exception occurs
- */
- private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
- X509CRLSelector sel) throws CertStoreException {
-
- /* fetch the encoded crls from storage */
- byte[][] encodedCRL;
- try {
- encodedCRL = request.getValues(id);
- } catch (NamingException namingEx) {
- throw new CertStoreException(namingEx);
- }
-
- int n = encodedCRL.length;
- if (n == 0) {
- return Collections.emptySet();
- }
-
- List<X509CRL> crls = new ArrayList<>(n);
- /* decode each crl and check if it matches selector */
- for (int i = 0; i < n; i++) {
- try {
- CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
- if (sel.match(crl)) {
- crls.add((X509CRL)crl);
- }
- } catch (CRLException e) {
- if (debug != null) {
- debug.println("LDAPCertStore.getCRLs() encountered exception"
- + " while parsing CRL, skipping the bad data: ");
- HexDumpEncoder encoder = new HexDumpEncoder();
- debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
- }
- }
- }
-
- return crls;
+ return impl.getCertificates((X509CertSelector) selector, ldapDN);
}
/**
@@ -797,314 +280,9 @@
// Set up selector and collection to hold CRLs
if (selector == null) {
selector = new X509CRLSelector();
- }
- if (!(selector instanceof X509CRLSelector)) {
+ } else if (!(selector instanceof X509CRLSelector)) {
throw new CertStoreException("need X509CRLSelector to find CRLs");
}
- X509CRLSelector xsel = (X509CRLSelector) selector;
- HashSet<X509CRL> crls = new HashSet<>();
-
- // Look in directory entry for issuer of cert we're checking.
- Collection<Object> issuerNames;
- X509Certificate certChecking = xsel.getCertificateChecking();
- if (certChecking != null) {
- issuerNames = new HashSet<>();
- X500Principal issuer = certChecking.getIssuerX500Principal();
- issuerNames.add(issuer.getName(X500Principal.RFC2253));
- } else {
- // But if we don't know which cert we're checking, try the directory
- // entries of all acceptable CRL issuers
- issuerNames = xsel.getIssuerNames();
- if (issuerNames == null) {
- throw new CertStoreException("need issuerNames or certChecking to "
- + "find CRLs");
- }
- }
- for (Object nameObject : issuerNames) {
- String issuerName;
- if (nameObject instanceof byte[]) {
- try {
- X500Principal issuer = new X500Principal((byte[])nameObject);
- issuerName = issuer.getName(X500Principal.RFC2253);
- } catch (IllegalArgumentException e) {
- continue;
- }
- } else {
- issuerName = (String)nameObject;
- }
- // If all we want is CA certs, try to get the (probably shorter) ARL
- Collection<X509CRL> entryCRLs = Collections.emptySet();
- if (certChecking == null || certChecking.getBasicConstraints() != -1) {
- LDAPRequest request = new LDAPRequest(issuerName);
- request.addRequestedAttribute(CROSS_CERT);
- request.addRequestedAttribute(CA_CERT);
- request.addRequestedAttribute(ARL);
- if (prefetchCRLs) {
- request.addRequestedAttribute(CRL);
- }
- try {
- entryCRLs = getCRLs(request, ARL, xsel);
- if (entryCRLs.isEmpty()) {
- // no ARLs found. We assume that means that there are
- // no ARLs on this server at all and prefetch the CRLs.
- prefetchCRLs = true;
- } else {
- crls.addAll(entryCRLs);
- }
- } catch (CertStoreException e) {
- if (debug != null) {
- debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
- + "retrieving ARLs:" + e);
- e.printStackTrace();
- }
- }
- }
- // Otherwise, get the CRL
- // if certChecking is null, we don't know if we should look in ARL or CRL
- // attribute, so check both for matching CRLs.
- if (entryCRLs.isEmpty() || certChecking == null) {
- LDAPRequest request = new LDAPRequest(issuerName);
- request.addRequestedAttribute(CRL);
- entryCRLs = getCRLs(request, CRL, xsel);
- crls.addAll(entryCRLs);
- }
- }
- return crls;
- }
-
- // converts an LDAP URI into LDAPCertStoreParameters
- static LDAPCertStoreParameters getParameters(URI uri) {
- String host = uri.getHost();
- if (host == null) {
- return new SunLDAPCertStoreParameters();
- } else {
- int port = uri.getPort();
- return (port == -1
- ? new SunLDAPCertStoreParameters(host)
- : new SunLDAPCertStoreParameters(host, port));
- }
- }
-
- /*
- * Subclass of LDAPCertStoreParameters with overridden equals/hashCode
- * methods. This is necessary because the parameters are used as
- * keys in the LDAPCertStore cache.
- */
- private static class SunLDAPCertStoreParameters
- extends LDAPCertStoreParameters {
-
- private volatile int hashCode = 0;
-
- SunLDAPCertStoreParameters(String serverName, int port) {
- super(serverName, port);
- }
- SunLDAPCertStoreParameters(String serverName) {
- super(serverName);
- }
- SunLDAPCertStoreParameters() {
- super();
- }
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
-
- if (!(obj instanceof LDAPCertStoreParameters)) {
- return false;
- }
- LDAPCertStoreParameters params = (LDAPCertStoreParameters) obj;
- return (getPort() == params.getPort() &&
- getServerName().equalsIgnoreCase(params.getServerName()));
- }
- @Override
- public int hashCode() {
- if (hashCode == 0) {
- int result = 17;
- result = 37*result + getPort();
- result = 37*result +
- getServerName().toLowerCase(Locale.ENGLISH).hashCode();
- hashCode = result;
- }
- return hashCode;
- }
- }
-
- /*
- * This inner class wraps an existing X509CertSelector and adds
- * additional criteria to match on when the certificate's subject is
- * different than the LDAP Distinguished Name entry. The LDAPCertStore
- * implementation uses the subject DN as the directory entry for
- * looking up certificates. This can be problematic if the certificates
- * that you want to fetch have a different subject DN than the entry
- * where they are stored. You could set the selector's subject to the
- * LDAP DN entry, but then the resulting match would fail to find the
- * desired certificates because the subject DNs would not match. This
- * class avoids that problem by introducing a certSubject which should
- * be set to the certificate's subject DN when it is different than
- * the LDAP DN.
- */
- static class LDAPCertSelector extends X509CertSelector {
-
- private X500Principal certSubject;
- private X509CertSelector selector;
- private X500Principal subject;
-
- /**
- * Creates an LDAPCertSelector.
- *
- * @param selector the X509CertSelector to wrap
- * @param certSubject the subject DN of the certificate that you want
- * to retrieve via LDAP
- * @param ldapDN the LDAP DN where the certificate is stored
- */
- LDAPCertSelector(X509CertSelector selector, X500Principal certSubject,
- String ldapDN) throws IOException {
- this.selector = selector == null ? new X509CertSelector() : selector;
- this.certSubject = certSubject;
- this.subject = new X500Name(ldapDN).asX500Principal();
- }
-
- // we only override the get (accessor methods) since the set methods
- // will not be invoked by the code that uses this LDAPCertSelector.
- public X509Certificate getCertificate() {
- return selector.getCertificate();
- }
- public BigInteger getSerialNumber() {
- return selector.getSerialNumber();
- }
- public X500Principal getIssuer() {
- return selector.getIssuer();
- }
- public String getIssuerAsString() {
- return selector.getIssuerAsString();
- }
- public byte[] getIssuerAsBytes() throws IOException {
- return selector.getIssuerAsBytes();
- }
- public X500Principal getSubject() {
- // return the ldap DN
- return subject;
- }
- public String getSubjectAsString() {
- // return the ldap DN
- return subject.getName();
- }
- public byte[] getSubjectAsBytes() throws IOException {
- // return the encoded ldap DN
- return subject.getEncoded();
- }
- public byte[] getSubjectKeyIdentifier() {
- return selector.getSubjectKeyIdentifier();
- }
- public byte[] getAuthorityKeyIdentifier() {
- return selector.getAuthorityKeyIdentifier();
- }
- public Date getCertificateValid() {
- return selector.getCertificateValid();
- }
- public Date getPrivateKeyValid() {
- return selector.getPrivateKeyValid();
- }
- public String getSubjectPublicKeyAlgID() {
- return selector.getSubjectPublicKeyAlgID();
- }
- public PublicKey getSubjectPublicKey() {
- return selector.getSubjectPublicKey();
- }
- public boolean[] getKeyUsage() {
- return selector.getKeyUsage();
- }
- public Set<String> getExtendedKeyUsage() {
- return selector.getExtendedKeyUsage();
- }
- public boolean getMatchAllSubjectAltNames() {
- return selector.getMatchAllSubjectAltNames();
- }
- public Collection<List<?>> getSubjectAlternativeNames() {
- return selector.getSubjectAlternativeNames();
- }
- public byte[] getNameConstraints() {
- return selector.getNameConstraints();
- }
- public int getBasicConstraints() {
- return selector.getBasicConstraints();
- }
- public Set<String> getPolicy() {
- return selector.getPolicy();
- }
- public Collection<List<?>> getPathToNames() {
- return selector.getPathToNames();
- }
-
- public boolean match(Certificate cert) {
- // temporarily set the subject criterion to the certSubject
- // so that match will not reject the desired certificates
- selector.setSubject(certSubject);
- boolean match = selector.match(cert);
- selector.setSubject(subject);
- return match;
- }
- }
-
- /**
- * This class has the same purpose as LDAPCertSelector except it is for
- * X.509 CRLs.
- */
- static class LDAPCRLSelector extends X509CRLSelector {
-
- private X509CRLSelector selector;
- private Collection<X500Principal> certIssuers;
- private Collection<X500Principal> issuers;
- private HashSet<Object> issuerNames;
-
- /**
- * Creates an LDAPCRLSelector.
- *
- * @param selector the X509CRLSelector to wrap
- * @param certIssuers the issuer DNs of the CRLs that you want
- * to retrieve via LDAP
- * @param ldapDN the LDAP DN where the CRL is stored
- */
- LDAPCRLSelector(X509CRLSelector selector,
- Collection<X500Principal> certIssuers, String ldapDN)
- throws IOException {
- this.selector = selector == null ? new X509CRLSelector() : selector;
- this.certIssuers = certIssuers;
- issuerNames = new HashSet<>();
- issuerNames.add(ldapDN);
- issuers = new HashSet<>();
- issuers.add(new X500Name(ldapDN).asX500Principal());
- }
- // we only override the get (accessor methods) since the set methods
- // will not be invoked by the code that uses this LDAPCRLSelector.
- public Collection<X500Principal> getIssuers() {
- // return the ldap DN
- return Collections.unmodifiableCollection(issuers);
- }
- public Collection<Object> getIssuerNames() {
- // return the ldap DN
- return Collections.unmodifiableCollection(issuerNames);
- }
- public BigInteger getMinCRL() {
- return selector.getMinCRL();
- }
- public BigInteger getMaxCRL() {
- return selector.getMaxCRL();
- }
- public Date getDateAndTime() {
- return selector.getDateAndTime();
- }
- public X509Certificate getCertificateChecking() {
- return selector.getCertificateChecking();
- }
- public boolean match(CRL crl) {
- // temporarily set the issuer criterion to the certIssuers
- // so that match will not reject the desired CRL
- selector.setIssuers(certIssuers);
- boolean match = selector.match(crl);
- selector.setIssuers(issuers);
- return match;
- }
+ return impl.getCRLs((X509CRLSelector) selector, ldapDN);
}
}
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ldap;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Collection;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.naming.CommunicationException;
-import javax.naming.ServiceUnavailableException;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * LDAP implementation of CertStoreHelper.
- */
-
-public final class LDAPCertStoreHelper
- extends CertStoreHelper
-{
- @Override
- public CertStore getCertStore(URI uri)
- throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
- {
- return LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
- }
-
- @Override
- public X509CertSelector wrap(X509CertSelector selector,
- X500Principal certSubject,
- String ldapDN)
- throws IOException
- {
- return new LDAPCertStore.LDAPCertSelector(selector, certSubject, ldapDN);
- }
-
- @Override
- public X509CRLSelector wrap(X509CRLSelector selector,
- Collection<X500Principal> certIssuers,
- String ldapDN)
- throws IOException
- {
- return new LDAPCertStore.LDAPCRLSelector(selector, certIssuers, ldapDN);
- }
-
- @Override
- public boolean isCausedByNetworkIssue(CertStoreException e) {
- Throwable t = e.getCause();
- return (t != null && (t instanceof ServiceUnavailableException ||
- t instanceof CommunicationException));
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreImpl.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,772 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.*;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NameNotFoundException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+
+import java.security.*;
+import java.security.cert.Certificate;
+import java.security.cert.*;
+import javax.naming.CommunicationException;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+import javax.security.auth.x500.X500Principal;
+
+import sun.misc.HexDumpEncoder;
+import sun.security.provider.certpath.X509CertificatePair;
+import sun.security.util.Cache;
+import sun.security.util.Debug;
+import sun.security.x509.X500Name;
+
+/**
+ * Core implementation of a LDAP Cert Store.
+ * @see java.security.cert.CertStore
+ *
+ * @since 1.9
+ */
+final class LDAPCertStoreImpl {
+
+ private static final Debug debug = Debug.getInstance("certpath");
+
+ private final static boolean DEBUG = false;
+
+ /**
+ * LDAP attribute identifiers.
+ */
+ private static final String USER_CERT = "userCertificate;binary";
+ private static final String CA_CERT = "cACertificate;binary";
+ private static final String CROSS_CERT = "crossCertificatePair;binary";
+ private static final String CRL = "certificateRevocationList;binary";
+ private static final String ARL = "authorityRevocationList;binary";
+ private static final String DELTA_CRL = "deltaRevocationList;binary";
+
+ // Constants for various empty values
+ private final static String[] STRING0 = new String[0];
+
+ private final static byte[][] BB0 = new byte[0][];
+
+ private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
+
+ // cache related constants
+ private final static int DEFAULT_CACHE_SIZE = 750;
+ private final static int DEFAULT_CACHE_LIFETIME = 30;
+
+ private final static int LIFETIME;
+
+ private final static String PROP_LIFETIME =
+ "sun.security.certpath.ldap.cache.lifetime";
+
+ /*
+ * Internal system property, that when set to "true", disables the
+ * JNDI application resource files lookup to prevent recursion issues
+ * when validating signed JARs with LDAP URLs in certificates.
+ */
+ private final static String PROP_DISABLE_APP_RESOURCE_FILES =
+ "sun.security.certpath.ldap.disable.app.resource.files";
+
+ static {
+ String s = AccessController.doPrivileged(
+ (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
+ if (s != null) {
+ LIFETIME = Integer.parseInt(s); // throws NumberFormatException
+ } else {
+ LIFETIME = DEFAULT_CACHE_LIFETIME;
+ }
+ }
+
+ /**
+ * The CertificateFactory used to decode certificates from
+ * their binary stored form.
+ */
+ private CertificateFactory cf;
+ /**
+ * The JNDI directory context.
+ */
+ private LdapContext ctx;
+
+ /**
+ * Flag indicating that communication error occurred.
+ */
+ private boolean communicationError = false;
+
+ /**
+ * Flag indicating whether we should prefetch CRLs.
+ */
+ private boolean prefetchCRLs = false;
+
+ private final Cache<String, byte[][]> valueCache;
+
+ private int cacheHits = 0;
+ private int cacheMisses = 0;
+ private int requests = 0;
+
+ /**
+ * Creates a <code>CertStore</code> with the specified parameters.
+ */
+ LDAPCertStoreImpl(String serverName, int port)
+ throws InvalidAlgorithmParameterException {
+ createInitialDirContext(serverName, port);
+ // Create CertificateFactory for use later on
+ try {
+ cf = CertificateFactory.getInstance("X.509");
+ } catch (CertificateException e) {
+ throw new InvalidAlgorithmParameterException(
+ "unable to create CertificateFactory for X.509");
+ }
+ if (LIFETIME == 0) {
+ valueCache = Cache.newNullCache();
+ } else if (LIFETIME < 0) {
+ valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
+ } else {
+ valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
+ }
+ }
+
+ /**
+ * Create InitialDirContext.
+ *
+ * @param server Server DNS name hosting LDAP service
+ * @param port Port at which server listens for requests
+ * @throws InvalidAlgorithmParameterException if creation fails
+ */
+ private void createInitialDirContext(String server, int port)
+ throws InvalidAlgorithmParameterException {
+ String url = "ldap://" + server + ":" + port;
+ Hashtable<String,Object> env = new Hashtable<>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY,
+ "com.sun.jndi.ldap.LdapCtxFactory");
+ env.put(Context.PROVIDER_URL, url);
+
+ // If property is set to true, disable application resource file lookup.
+ boolean disableAppResourceFiles = AccessController.doPrivileged(
+ (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
+ if (disableAppResourceFiles) {
+ if (debug != null) {
+ debug.println("LDAPCertStore disabling app resource files");
+ }
+ env.put("com.sun.naming.disable.app.resource.files", "true");
+ }
+
+ try {
+ ctx = new InitialLdapContext(env, null);
+ /*
+ * By default, follow referrals unless application has
+ * overridden property in an application resource file.
+ */
+ Hashtable<?,?> currentEnv = ctx.getEnvironment();
+ if (currentEnv.get(Context.REFERRAL) == null) {
+ ctx.addToEnvironment(Context.REFERRAL, "follow");
+ }
+ } catch (NamingException e) {
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineInit about to throw "
+ + "InvalidAlgorithmParameterException");
+ e.printStackTrace();
+ }
+ Exception ee = new InvalidAlgorithmParameterException
+ ("unable to create InitialDirContext using supplied parameters");
+ ee.initCause(e);
+ throw (InvalidAlgorithmParameterException)ee;
+ }
+ }
+
+ /**
+ * Private class encapsulating the actual LDAP operations and cache
+ * handling. Use:
+ *
+ * LDAPRequest request = new LDAPRequest(dn);
+ * request.addRequestedAttribute(CROSS_CERT);
+ * request.addRequestedAttribute(CA_CERT);
+ * byte[][] crossValues = request.getValues(CROSS_CERT);
+ * byte[][] caValues = request.getValues(CA_CERT);
+ *
+ * At most one LDAP request is sent for each instance created. If all
+ * getValues() calls can be satisfied from the cache, no request
+ * is sent at all. If a request is sent, all requested attributes
+ * are always added to the cache irrespective of whether the getValues()
+ * method is called.
+ */
+ private class LDAPRequest {
+
+ private final String name;
+ private Map<String, byte[][]> valueMap;
+ private final List<String> requestedAttributes;
+
+ LDAPRequest(String name) {
+ this.name = name;
+ requestedAttributes = new ArrayList<>(5);
+ }
+
+ String getName() {
+ return name;
+ }
+
+ void addRequestedAttribute(String attrId) {
+ if (valueMap != null) {
+ throw new IllegalStateException("Request already sent");
+ }
+ requestedAttributes.add(attrId);
+ }
+
+ /**
+ * Gets one or more binary values from an attribute.
+ *
+ * @param name the location holding the attribute
+ * @param attrId the attribute identifier
+ * @return an array of binary values (byte arrays)
+ * @throws NamingException if a naming exception occurs
+ */
+ byte[][] getValues(String attrId) throws NamingException {
+ if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
+ System.out.println("Cache hits: " + cacheHits + "; misses: "
+ + cacheMisses);
+ }
+ String cacheKey = name + "|" + attrId;
+ byte[][] values = valueCache.get(cacheKey);
+ if (values != null) {
+ cacheHits++;
+ return values;
+ }
+ cacheMisses++;
+ Map<String, byte[][]> attrs = getValueMap();
+ values = attrs.get(attrId);
+ return values;
+ }
+
+ /**
+ * Get a map containing the values for this request. The first time
+ * this method is called on an object, the LDAP request is sent,
+ * the results parsed and added to a private map and also to the
+ * cache of this LDAPCertStore. Subsequent calls return the private
+ * map immediately.
+ *
+ * The map contains an entry for each requested attribute. The
+ * attribute name is the key, values are byte[][]. If there are no
+ * values for that attribute, values are byte[0][].
+ *
+ * @return the value Map
+ * @throws NamingException if a naming exception occurs
+ */
+ private Map<String, byte[][]> getValueMap() throws NamingException {
+ if (valueMap != null) {
+ return valueMap;
+ }
+ if (DEBUG) {
+ System.out.println("Request: " + name + ":" + requestedAttributes);
+ requests++;
+ if (requests % 5 == 0) {
+ System.out.println("LDAP requests: " + requests);
+ }
+ }
+ valueMap = new HashMap<>(8);
+ String[] attrIds = requestedAttributes.toArray(STRING0);
+ Attributes attrs;
+
+ if (communicationError) {
+ ctx.reconnect(null);
+ communicationError = false;
+ }
+
+ try {
+ attrs = ctx.getAttributes(name, attrIds);
+ } catch (CommunicationException ce) {
+ communicationError = true;
+ throw ce;
+ } catch (NameNotFoundException e) {
+ // name does not exist on this LDAP server
+ // treat same as not attributes found
+ attrs = EMPTY_ATTRIBUTES;
+ }
+ for (String attrId : requestedAttributes) {
+ Attribute attr = attrs.get(attrId);
+ byte[][] values = getAttributeValues(attr);
+ cacheAttribute(attrId, values);
+ valueMap.put(attrId, values);
+ }
+ return valueMap;
+ }
+
+ /**
+ * Add the values to the cache.
+ */
+ private void cacheAttribute(String attrId, byte[][] values) {
+ String cacheKey = name + "|" + attrId;
+ valueCache.put(cacheKey, values);
+ }
+
+ /**
+ * Get the values for the given attribute. If the attribute is null
+ * or does not contain any values, a zero length byte array is
+ * returned. NOTE that it is assumed that all values are byte arrays.
+ */
+ private byte[][] getAttributeValues(Attribute attr)
+ throws NamingException {
+ byte[][] values;
+ if (attr == null) {
+ values = BB0;
+ } else {
+ values = new byte[attr.size()][];
+ int i = 0;
+ NamingEnumeration<?> enum_ = attr.getAll();
+ while (enum_.hasMore()) {
+ Object obj = enum_.next();
+ if (debug != null) {
+ if (obj instanceof String) {
+ debug.println("LDAPCertStore.getAttrValues() "
+ + "enum.next is a string!: " + obj);
+ }
+ }
+ byte[] value = (byte[])obj;
+ values[i++] = value;
+ }
+ }
+ return values;
+ }
+
+ }
+
+ /*
+ * Gets certificates from an attribute id and location in the LDAP
+ * directory. Returns a Collection containing only the Certificates that
+ * match the specified CertSelector.
+ *
+ * @param name the location holding the attribute
+ * @param id the attribute identifier
+ * @param sel a CertSelector that the Certificates must match
+ * @return a Collection of Certificates found
+ * @throws CertStoreException if an exception occurs
+ */
+ private Collection<X509Certificate> getCertificates(LDAPRequest request,
+ String id, X509CertSelector sel) throws CertStoreException {
+
+ /* fetch encoded certs from storage */
+ byte[][] encodedCert;
+ try {
+ encodedCert = request.getValues(id);
+ } catch (NamingException namingEx) {
+ throw new CertStoreException(namingEx);
+ }
+
+ int n = encodedCert.length;
+ if (n == 0) {
+ return Collections.emptySet();
+ }
+
+ List<X509Certificate> certs = new ArrayList<>(n);
+ /* decode certs and check if they satisfy selector */
+ for (int i = 0; i < n; i++) {
+ ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
+ try {
+ Certificate cert = cf.generateCertificate(bais);
+ if (sel.match(cert)) {
+ certs.add((X509Certificate)cert);
+ }
+ } catch (CertificateException e) {
+ if (debug != null) {
+ debug.println("LDAPCertStore.getCertificates() encountered "
+ + "exception while parsing cert, skipping the bad data: ");
+ HexDumpEncoder encoder = new HexDumpEncoder();
+ debug.println(
+ "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
+ }
+ }
+ }
+
+ return certs;
+ }
+
+ /*
+ * Gets certificate pairs from an attribute id and location in the LDAP
+ * directory.
+ *
+ * @param name the location holding the attribute
+ * @param id the attribute identifier
+ * @return a Collection of X509CertificatePairs found
+ * @throws CertStoreException if an exception occurs
+ */
+ private Collection<X509CertificatePair> getCertPairs(
+ LDAPRequest request, String id) throws CertStoreException {
+
+ /* fetch the encoded cert pairs from storage */
+ byte[][] encodedCertPair;
+ try {
+ encodedCertPair = request.getValues(id);
+ } catch (NamingException namingEx) {
+ throw new CertStoreException(namingEx);
+ }
+
+ int n = encodedCertPair.length;
+ if (n == 0) {
+ return Collections.emptySet();
+ }
+
+ List<X509CertificatePair> certPairs = new ArrayList<>(n);
+ /* decode each cert pair and add it to the Collection */
+ for (int i = 0; i < n; i++) {
+ try {
+ X509CertificatePair certPair =
+ X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
+ certPairs.add(certPair);
+ } catch (CertificateException e) {
+ if (debug != null) {
+ debug.println(
+ "LDAPCertStore.getCertPairs() encountered exception "
+ + "while parsing cert, skipping the bad data: ");
+ HexDumpEncoder encoder = new HexDumpEncoder();
+ debug.println(
+ "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
+ }
+ }
+ }
+
+ return certPairs;
+ }
+
+ /*
+ * Looks at certificate pairs stored in the crossCertificatePair attribute
+ * at the specified location in the LDAP directory. Returns a Collection
+ * containing all X509Certificates stored in the forward component that match
+ * the forward X509CertSelector and all Certificates stored in the reverse
+ * component that match the reverse X509CertSelector.
+ * <p>
+ * If either forward or reverse is null, all certificates from the
+ * corresponding component will be rejected.
+ *
+ * @param name the location to look in
+ * @param forward the forward X509CertSelector (or null)
+ * @param reverse the reverse X509CertSelector (or null)
+ * @return a Collection of X509Certificates found
+ * @throws CertStoreException if an exception occurs
+ */
+ private Collection<X509Certificate> getMatchingCrossCerts(
+ LDAPRequest request, X509CertSelector forward,
+ X509CertSelector reverse)
+ throws CertStoreException {
+ // Get the cert pairs
+ Collection<X509CertificatePair> certPairs =
+ getCertPairs(request, CROSS_CERT);
+
+ // Find Certificates that match and put them in a list
+ ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
+ for (X509CertificatePair certPair : certPairs) {
+ X509Certificate cert;
+ if (forward != null) {
+ cert = certPair.getForward();
+ if ((cert != null) && forward.match(cert)) {
+ matchingCerts.add(cert);
+ }
+ }
+ if (reverse != null) {
+ cert = certPair.getReverse();
+ if ((cert != null) && reverse.match(cert)) {
+ matchingCerts.add(cert);
+ }
+ }
+ }
+ return matchingCerts;
+ }
+
+ /**
+ * Returns a <code>Collection</code> of <code>X509Certificate</code>s that
+ * match the specified selector. If no <code>X509Certificate</code>s
+ * match the selector, an empty <code>Collection</code> will be returned.
+ * <p>
+ * It is not practical to search every entry in the LDAP database for
+ * matching <code>X509Certificate</code>s. Instead, the
+ * <code>X509CertSelector</code> is examined in order to determine where
+ * matching <code>Certificate</code>s are likely to be found (according
+ * to the PKIX LDAPv2 schema, RFC 2587).
+ * If the subject is specified, its directory entry is searched. If the
+ * issuer is specified, its directory entry is searched. If neither the
+ * subject nor the issuer are specified (or the selector is not an
+ * <code>X509CertSelector</code>), a <code>CertStoreException</code> is
+ * thrown.
+ *
+ * @param selector a <code>X509CertSelector</code> used to select which
+ * <code>Certificate</code>s should be returned.
+ * @return a <code>Collection</code> of <code>X509Certificate</code>s that
+ * match the specified selector
+ * @throws CertStoreException if an exception occurs
+ */
+ synchronized Collection<X509Certificate> getCertificates
+ (X509CertSelector xsel, String ldapDN) throws CertStoreException {
+
+ if (ldapDN == null) {
+ ldapDN = xsel.getSubjectAsString();
+ }
+ int basicConstraints = xsel.getBasicConstraints();
+ String issuer = xsel.getIssuerAsString();
+ HashSet<X509Certificate> certs = new HashSet<>();
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
+ + basicConstraints);
+ }
+
+ // basicConstraints:
+ // -2: only EE certs accepted
+ // -1: no check is done
+ // 0: any CA certificate accepted
+ // >1: certificate's basicConstraints extension pathlen must match
+ if (ldapDN != null) {
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() "
+ + " subject is not null");
+ }
+ LDAPRequest request = new LDAPRequest(ldapDN);
+ if (basicConstraints > -2) {
+ request.addRequestedAttribute(CROSS_CERT);
+ request.addRequestedAttribute(CA_CERT);
+ request.addRequestedAttribute(ARL);
+ if (prefetchCRLs) {
+ request.addRequestedAttribute(CRL);
+ }
+ }
+ if (basicConstraints < 0) {
+ request.addRequestedAttribute(USER_CERT);
+ }
+
+ if (basicConstraints > -2) {
+ certs.addAll(getMatchingCrossCerts(request, xsel, null));
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() after "
+ + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
+ + certs.size());
+ }
+ certs.addAll(getCertificates(request, CA_CERT, xsel));
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() after "
+ + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
+ + certs.size());
+ }
+ }
+ if (basicConstraints < 0) {
+ certs.addAll(getCertificates(request, USER_CERT, xsel));
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() after "
+ + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
+ + certs.size());
+ }
+ }
+ } else {
+ if (debug != null) {
+ debug.println
+ ("LDAPCertStore.engineGetCertificates() subject is null");
+ }
+ if (basicConstraints == -2) {
+ throw new CertStoreException("need subject to find EE certs");
+ }
+ if (issuer == null) {
+ throw new CertStoreException("need subject or issuer to find certs");
+ }
+ }
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() about to "
+ + "getMatchingCrossCerts...");
+ }
+ if ((issuer != null) && (basicConstraints > -2)) {
+ LDAPRequest request = new LDAPRequest(issuer);
+ request.addRequestedAttribute(CROSS_CERT);
+ request.addRequestedAttribute(CA_CERT);
+ request.addRequestedAttribute(ARL);
+ if (prefetchCRLs) {
+ request.addRequestedAttribute(CRL);
+ }
+
+ certs.addAll(getMatchingCrossCerts(request, null, xsel));
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() after "
+ + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
+ + certs.size());
+ }
+ certs.addAll(getCertificates(request, CA_CERT, xsel));
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() after "
+ + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
+ + certs.size());
+ }
+ }
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCertificates() returning certs");
+ }
+ return certs;
+ }
+
+ /*
+ * Gets CRLs from an attribute id and location in the LDAP directory.
+ * Returns a Collection containing only the CRLs that match the
+ * specified X509CRLSelector.
+ *
+ * @param name the location holding the attribute
+ * @param id the attribute identifier
+ * @param sel a X509CRLSelector that the CRLs must match
+ * @return a Collection of CRLs found
+ * @throws CertStoreException if an exception occurs
+ */
+ private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
+ X509CRLSelector sel) throws CertStoreException {
+
+ /* fetch the encoded crls from storage */
+ byte[][] encodedCRL;
+ try {
+ encodedCRL = request.getValues(id);
+ } catch (NamingException namingEx) {
+ throw new CertStoreException(namingEx);
+ }
+
+ int n = encodedCRL.length;
+ if (n == 0) {
+ return Collections.emptySet();
+ }
+
+ List<X509CRL> crls = new ArrayList<>(n);
+ /* decode each crl and check if it matches selector */
+ for (int i = 0; i < n; i++) {
+ try {
+ CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
+ if (sel.match(crl)) {
+ crls.add((X509CRL)crl);
+ }
+ } catch (CRLException e) {
+ if (debug != null) {
+ debug.println("LDAPCertStore.getCRLs() encountered exception"
+ + " while parsing CRL, skipping the bad data: ");
+ HexDumpEncoder encoder = new HexDumpEncoder();
+ debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
+ }
+ }
+ }
+
+ return crls;
+ }
+
+ /**
+ * Returns a <code>Collection</code> of <code>X509CRL</code>s that
+ * match the specified selector. If no <code>X509CRL</code>s
+ * match the selector, an empty <code>Collection</code> will be returned.
+ * <p>
+ * It is not practical to search every entry in the LDAP database for
+ * matching <code>X509CRL</code>s. Instead, the <code>X509CRLSelector</code>
+ * is examined in order to determine where matching <code>X509CRL</code>s
+ * are likely to be found (according to the PKIX LDAPv2 schema, RFC 2587).
+ * If issuerNames or certChecking are specified, the issuer's directory
+ * entry is searched. If neither issuerNames or certChecking are specified
+ * (or the selector is not an <code>X509CRLSelector</code>), a
+ * <code>CertStoreException</code> is thrown.
+ *
+ * @param selector A <code>X509CRLSelector</code> used to select which
+ * <code>CRL</code>s should be returned. Specify <code>null</code>
+ * to return all <code>CRL</code>s.
+ * @return A <code>Collection</code> of <code>X509CRL</code>s that
+ * match the specified selector
+ * @throws CertStoreException if an exception occurs
+ */
+ synchronized Collection<X509CRL> getCRLs(X509CRLSelector xsel,
+ String ldapDN) throws CertStoreException {
+
+ HashSet<X509CRL> crls = new HashSet<>();
+
+ // Look in directory entry for issuer of cert we're checking.
+ Collection<Object> issuerNames;
+ X509Certificate certChecking = xsel.getCertificateChecking();
+ if (certChecking != null) {
+ issuerNames = new HashSet<>();
+ X500Principal issuer = certChecking.getIssuerX500Principal();
+ issuerNames.add(issuer.getName(X500Principal.RFC2253));
+ } else {
+ // But if we don't know which cert we're checking, try the directory
+ // entries of all acceptable CRL issuers
+ if (ldapDN != null) {
+ issuerNames = new HashSet<>();
+ issuerNames.add(ldapDN);
+ } else {
+ issuerNames = xsel.getIssuerNames();
+ if (issuerNames == null) {
+ throw new CertStoreException("need issuerNames or"
+ + " certChecking to find CRLs");
+ }
+ }
+ }
+ for (Object nameObject : issuerNames) {
+ String issuerName;
+ if (nameObject instanceof byte[]) {
+ try {
+ X500Principal issuer = new X500Principal((byte[])nameObject);
+ issuerName = issuer.getName(X500Principal.RFC2253);
+ } catch (IllegalArgumentException e) {
+ continue;
+ }
+ } else {
+ issuerName = (String)nameObject;
+ }
+ // If all we want is CA certs, try to get the (probably shorter) ARL
+ Collection<X509CRL> entryCRLs = Collections.emptySet();
+ if (certChecking == null || certChecking.getBasicConstraints() != -1) {
+ LDAPRequest request = new LDAPRequest(issuerName);
+ request.addRequestedAttribute(CROSS_CERT);
+ request.addRequestedAttribute(CA_CERT);
+ request.addRequestedAttribute(ARL);
+ if (prefetchCRLs) {
+ request.addRequestedAttribute(CRL);
+ }
+ try {
+ entryCRLs = getCRLs(request, ARL, xsel);
+ if (entryCRLs.isEmpty()) {
+ // no ARLs found. We assume that means that there are
+ // no ARLs on this server at all and prefetch the CRLs.
+ prefetchCRLs = true;
+ } else {
+ crls.addAll(entryCRLs);
+ }
+ } catch (CertStoreException e) {
+ if (debug != null) {
+ debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
+ + "retrieving ARLs:" + e);
+ e.printStackTrace();
+ }
+ }
+ }
+ // Otherwise, get the CRL
+ // if certChecking is null, we don't know if we should look in ARL or CRL
+ // attribute, so check both for matching CRLs.
+ if (entryCRLs.isEmpty() || certChecking == null) {
+ LDAPRequest request = new LDAPRequest(issuerName);
+ request.addRequestedAttribute(CRL);
+ entryCRLs = getCRLs(request, CRL, xsel);
+ crls.addAll(entryCRLs);
+ }
+ }
+ return crls;
+ }
+}
--- a/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java Wed Jul 05 20:33:55 2017 +0200
@@ -94,9 +94,9 @@
*
* @param state the State
* @return an unmodifiable list of all terminals matching the specified
- * attribute.
+ * state.
*
- * @throws NullPointerException if attr is null
+ * @throws NullPointerException if state is null
* @throws CardException if the card operation failed
*/
public abstract List<CardTerminal> list(State state) throws CardException;
--- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/DoubleByteEncoder.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-public abstract class DoubleByteEncoder
- extends CharsetEncoder
-{
-
- private short index1[];
- private String index2[];
-
- private final Surrogate.Parser sgp = new Surrogate.Parser();
-
- protected DoubleByteEncoder(Charset cs,
- short[] index1, String[] index2)
- {
- super(cs, 2.0f, 2.0f);
- this.index1 = index1;
- this.index2 = index2;
- }
-
- protected DoubleByteEncoder(Charset cs,
- short[] index1, String[] index2,
- float avg, float max)
- {
- super(cs, avg, max);
- this.index1 = index1;
- this.index2 = index2;
- }
-
- protected DoubleByteEncoder(Charset cs,
- short[] index1, String[] index2, byte[] repl)
- {
- super(cs, 2.0f, 2.0f, repl);
- this.index1 = index1;
- this.index2 = index2;
- }
-
-
- protected DoubleByteEncoder(Charset cs,
- short[] index1, String[] index2,
- byte[] repl, float avg, float max)
- {
- super(cs, avg, max,repl);
- this.index1 = index1;
- this.index2 = index2;
- }
-
- public boolean canEncode(char c) {
- return (encodeSingle(c) != -1 ||
- encodeDouble(c) != 0);
- }
-
- private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (Character.isSurrogate(c)) {
- if (sgp.parse(c, sa, sp, sl) < 0)
- return sgp.error();
- if (sl - sp < 2)
- return CoderResult.UNDERFLOW;
- char c2 = sa[sp + 1];
-
- byte[] outputBytes = new byte[2];
- outputBytes = encodeSurrogate(c, c2);
-
- if (outputBytes == null) {
- return sgp.unmappableResult();
- }
- else {
- if (dl - dp < 2)
- return CoderResult.OVERFLOW;
- da[dp++] = outputBytes[0];
- da[dp++] = outputBytes[1];
- sp += 2;
- continue;
- }
- }
- if (c >= '\uFFFE')
- return CoderResult.unmappableForLength(1);
-
- int b = encodeSingle(c);
- if (b != -1) { // Single Byte
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = (byte)b;
- sp++;
- continue;
- }
-
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000' ) {
- if (dl - dp < 2)
- return CoderResult.OVERFLOW;
- da[dp++] = (byte) ((ncode & 0xff00) >> 8);
- da[dp++] = (byte) (ncode & 0xff);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
-
- private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
- int mark = src.position();
-
- try {
- while (src.hasRemaining()) {
- char c = src.get();
- if (Character.isSurrogate(c)) {
- int surr;
- if ((surr = sgp.parse(c, src)) < 0)
- return sgp.error();
- char c2 = Surrogate.low(surr);
- byte[] outputBytes = new byte[2];
- outputBytes = encodeSurrogate(c, c2);
-
- if (outputBytes == null) {
- return sgp.unmappableResult();
- } else {
- if (dst.remaining() < 2)
- return CoderResult.OVERFLOW;
- mark += 2;
- dst.put(outputBytes[0]);
- dst.put(outputBytes[1]);
- continue;
- }
- }
- if (c >= '\uFFFE')
- return CoderResult.unmappableForLength(1);
- int b = encodeSingle(c);
-
- if (b != -1) { // Single-byte character
- if (dst.remaining() < 1)
- return CoderResult.OVERFLOW;
- mark++;
- dst.put((byte)b);
- continue;
- }
- // Double Byte character
-
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000') {
- if (dst.remaining() < 2)
- return CoderResult.OVERFLOW;
- mark++;
- dst.put((byte) ((ncode & 0xff00) >> 8));
- dst.put((byte) ncode);
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
-
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(mark);
- }
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- if (true && src.hasArray() && dst.hasArray())
- return encodeArrayLoop(src, dst);
- else
- return encodeBufferLoop(src, dst);
- }
-
- /*
- * Can be changed by subclass
- */
- protected int encodeDouble(char ch) {
- int offset = index1[((ch & 0xff00) >> 8 )] << 8;
- return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
- }
-
- /*
- * Can be changed by subclass
- */
- protected int encodeSingle(char inputChar) {
- if (inputChar < 0x80)
- return (byte)inputChar;
- else
- return -1;
- }
-
- /**
- * Protected method which should be overridden by concrete DBCS
- * CharsetEncoder classes which included supplementary characters
- * within their mapping coverage.
- * null return value indicates surrogate values could not be
- * handled or encoded.
- */
- protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
- return null;
- }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-
-public class COMPOUND_TEXT extends Charset {
- public COMPOUND_TEXT () {
- super("x-COMPOUND_TEXT",
- ExtendedCharsets.aliasesFor("x-COMPOUND_TEXT"));
- }
-
- public CharsetEncoder newEncoder() {
- return new COMPOUND_TEXT_Encoder(this);
- }
-
- public CharsetDecoder newDecoder() {
- return new COMPOUND_TEXT_Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof COMPOUND_TEXT;
- }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,714 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-/**
- * An algorithmic conversion from COMPOUND_TEXT to Unicode.
- */
-
-public class COMPOUND_TEXT_Decoder extends CharsetDecoder {
-
- private static final int NORMAL_BYTES = 0;
- private static final int NONSTANDARD_BYTES = 1;
- private static final int VERSION_SEQUENCE_V = 2;
- private static final int VERSION_SEQUENCE_TERM = 3;
- private static final int ESCAPE_SEQUENCE = 4;
- private static final int CHARSET_NGIIF = 5;
- private static final int CHARSET_NLIIF = 6;
- private static final int CHARSET_NLIF = 7;
- private static final int CHARSET_NRIIF = 8;
- private static final int CHARSET_NRIF = 9;
- private static final int CHARSET_NONSTANDARD_FOML = 10;
- private static final int CHARSET_NONSTANDARD_OML = 11;
- private static final int CHARSET_NONSTANDARD_ML = 12;
- private static final int CHARSET_NONSTANDARD_L = 13;
- private static final int CHARSET_NONSTANDARD = 14;
- private static final int CHARSET_LIIF = 15;
- private static final int CHARSET_LIF = 16;
- private static final int CHARSET_RIIF = 17;
- private static final int CHARSET_RIF = 18;
- private static final int CONTROL_SEQUENCE_PIF = 19;
- private static final int CONTROL_SEQUENCE_IF = 20;
- private static final int EXTENSION_ML = 21;
- private static final int EXTENSION_L = 22;
- private static final int EXTENSION = 23;
- private static final int ESCAPE_SEQUENCE_OTHER = 24;
-
- private static final String ERR_LATIN1 = "ISO8859_1 unsupported";
- private static final String ERR_ILLSTATE = "Illegal state";
- private static final String ERR_ESCBYTE =
- "Illegal byte in 0x1B escape sequence";
- private static final String ERR_ENCODINGBYTE =
- "Illegal byte in non-standard character set name";
- private static final String ERR_CTRLBYTE =
- "Illegal byte in 0x9B control sequence";
- private static final String ERR_CTRLPI =
- "P following I in 0x9B control sequence";
- private static final String ERR_VERSTART =
- "Versioning escape sequence can only appear at start of byte stream";
- private static final String ERR_VERMANDATORY =
- "Cannot parse mandatory extensions";
- private static final String ERR_ENCODING = "Unknown encoding: ";
- private static final String ERR_FLUSH =
- "Escape sequence, control sequence, or ML extension not terminated";
-
- private int state = NORMAL_BYTES ;
- private int ext_count, ext_offset;
- private boolean versionSequenceAllowed = true;
- private byte[] byteBuf = new byte[1];
- private ByteBuffer inBB = ByteBuffer.allocate(16);
- private ByteArrayOutputStream queue = new ByteArrayOutputStream(),
- encodingQueue = new ByteArrayOutputStream();
-
- private CharsetDecoder glDecoder, grDecoder, nonStandardDecoder,
- lastDecoder;
- private boolean glHigh = false, grHigh = true;
-
-
- public COMPOUND_TEXT_Decoder(Charset cs) {
- super(cs, 1.0f, 1.0f);
- try {
- // Initial state in ISO 2022 designates Latin-1 charset.
- glDecoder = Charset.forName("ASCII").newDecoder();
- grDecoder = Charset.forName("ISO8859_1").newDecoder();
- } catch (IllegalArgumentException e) {
- error(ERR_LATIN1);
- }
- initDecoder(glDecoder);
- initDecoder(grDecoder);
- }
-
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer des) {
- CoderResult cr = CoderResult.UNDERFLOW;
- byte[] input = src.array();
- int inOff = src.arrayOffset() + src.position();
- int inEnd = src.arrayOffset() + src.limit();
-
- try {
- while (inOff < inEnd && cr.isUnderflow()) {
- // Byte parsing is done with shorts instead of bytes because
- // Java bytes are signed, while COMPOUND_TEXT bytes are not. If
- // we used the Java byte type, the > and < tests during parsing
- // would not work correctly.
- cr = handleByte((short)(input[inOff] & 0xFF), des);
- inOff++;
- }
- return cr;
- } finally {
- src.position(inOff - src.arrayOffset());
- }
- }
-
- private CoderResult handleByte(short newByte, CharBuffer cb) {
- CoderResult cr = CoderResult.UNDERFLOW;
- switch (state) {
- case NORMAL_BYTES:
- cr= normalBytes(newByte, cb);
- break;
- case NONSTANDARD_BYTES:
- cr = nonStandardBytes(newByte, cb);
- break;
- case VERSION_SEQUENCE_V:
- case VERSION_SEQUENCE_TERM:
- cr = versionSequence(newByte);
- break;
- case ESCAPE_SEQUENCE:
- cr = escapeSequence(newByte);
- break;
- case CHARSET_NGIIF:
- cr = charset94N(newByte);
- break;
- case CHARSET_NLIIF:
- case CHARSET_NLIF:
- cr = charset94NL(newByte, cb);
- break;
- case CHARSET_NRIIF:
- case CHARSET_NRIF:
- cr = charset94NR(newByte, cb);
- break;
- case CHARSET_NONSTANDARD_FOML:
- case CHARSET_NONSTANDARD_OML:
- case CHARSET_NONSTANDARD_ML:
- case CHARSET_NONSTANDARD_L:
- case CHARSET_NONSTANDARD:
- cr = charsetNonStandard(newByte, cb);
- break;
- case CHARSET_LIIF:
- case CHARSET_LIF:
- cr = charset9496L(newByte, cb);
- break;
- case CHARSET_RIIF:
- case CHARSET_RIF:
- cr = charset9496R(newByte, cb);
- break;
- case CONTROL_SEQUENCE_PIF:
- case CONTROL_SEQUENCE_IF:
- cr = controlSequence(newByte);
- break;
- case EXTENSION_ML:
- case EXTENSION_L:
- case EXTENSION:
- cr = extension(newByte);
- break;
- case ESCAPE_SEQUENCE_OTHER:
- cr = escapeSequenceOther(newByte);
- break;
- default:
- error(ERR_ILLSTATE);
- }
- return cr;
- }
-
- private CoderResult normalBytes(short newByte, CharBuffer cb) {
- CoderResult cr = CoderResult.UNDERFLOW;
- if ((newByte >= 0x00 && newByte <= 0x1F) || // C0
- (newByte >= 0x80 && newByte <= 0x9F)) { // C1
- char newChar;
-
- switch (newByte) {
- case 0x1B:
- state = ESCAPE_SEQUENCE;
- queue.write(newByte);
- return cr;
- case 0x9B:
- state = CONTROL_SEQUENCE_PIF;
- versionSequenceAllowed = false;
- queue.write(newByte);
- return cr;
- case 0x09:
- versionSequenceAllowed = false;
- newChar = '\t';
- break;
- case 0x0A:
- versionSequenceAllowed = false;
- newChar = '\n';
- break;
- default:
- versionSequenceAllowed = false;
- return cr;
- }
- if (!cb.hasRemaining())
- return CoderResult.OVERFLOW;
- else
- cb.put(newChar);
- } else {
- CharsetDecoder decoder;
- boolean high;
- versionSequenceAllowed = false;
-
- if (newByte >= 0x20 && newByte <= 0x7F) {
- decoder = glDecoder;
- high = glHigh;
- } else /* if (newByte >= 0xA0 && newByte <= 0xFF) */ {
- decoder = grDecoder;
- high = grHigh;
- }
- if (lastDecoder != null && decoder != lastDecoder) {
- cr = flushDecoder(lastDecoder, cb);
- }
- lastDecoder = decoder;
-
- if (decoder != null) {
- byte b = (byte)newByte;
- if (high) {
- b |= 0x80;
- } else {
- b &= 0x7F;
- }
- inBB.put(b);
- inBB.flip();
- cr = decoder.decode(inBB, cb, false);
- if (!inBB.hasRemaining() || cr.isMalformed()) {
- inBB.clear();
- } else {
- int pos = inBB.limit();
- inBB.clear();
- inBB.position(pos);
- }
- } else if (cb.remaining() < replacement().length()) {
- cb.put(replacement());
- } else {
- return CoderResult.OVERFLOW;
- }
- }
- return cr;
- }
-
- private CoderResult nonStandardBytes(short newByte, CharBuffer cb)
- {
- CoderResult cr = CoderResult.UNDERFLOW;
- if (nonStandardDecoder != null) {
- //byteBuf[0] = (byte)newByte;
- inBB.put((byte)newByte);
- inBB.flip();
- cr = nonStandardDecoder.decode(inBB, cb, false);
- if (!inBB.hasRemaining()) {
- inBB.clear();
- } else {
- int pos = inBB.limit();
- inBB.clear();
- inBB.position(pos);
- }
- } else if (cb.remaining() < replacement().length()) {
- cb.put(replacement());
- } else {
- return CoderResult.OVERFLOW;
- }
-
- ext_offset++;
- if (ext_offset >= ext_count) {
- ext_offset = ext_count = 0;
- state = NORMAL_BYTES;
- cr = flushDecoder(nonStandardDecoder, cb);
- nonStandardDecoder = null;
- }
- return cr;
- }
-
- private CoderResult escapeSequence(short newByte) {
- switch (newByte) {
- case 0x23:
- state = VERSION_SEQUENCE_V;
- break;
- case 0x24:
- state = CHARSET_NGIIF;
- versionSequenceAllowed = false;
- break;
- case 0x25:
- state = CHARSET_NONSTANDARD_FOML;
- versionSequenceAllowed = false;
- break;
- case 0x28:
- state = CHARSET_LIIF;
- versionSequenceAllowed = false;
- break;
- case 0x29:
- case 0x2D:
- state = CHARSET_RIIF;
- versionSequenceAllowed = false;
- break;
- default:
- // escapeSequenceOther will write to queue if appropriate
- return escapeSequenceOther(newByte);
- }
-
- queue.write(newByte);
- return CoderResult.UNDERFLOW;
- }
-
- /**
- * Test for unknown, but valid, escape sequences.
- */
- private CoderResult escapeSequenceOther(short newByte) {
- if (newByte >= 0x20 && newByte <= 0x2F) {
- // {I}
- state = ESCAPE_SEQUENCE_OTHER;
- versionSequenceAllowed = false;
- queue.write(newByte);
- } else if (newByte >= 0x30 && newByte <= 0x7E) {
- // F -- end of sequence
- state = NORMAL_BYTES;
- versionSequenceAllowed = false;
- queue.reset();
- } else {
- return malformedInput(ERR_ESCBYTE);
- }
- return CoderResult.UNDERFLOW;
- }
-
- /**
- * Parses directionality, as well as unknown, but valid, control sequences.
- */
- private CoderResult controlSequence(short newByte) {
- if (newByte >= 0x30 && newByte <= 0x3F) {
- // {P}
- if (state == CONTROL_SEQUENCE_IF) {
- // P no longer allowed
- return malformedInput(ERR_CTRLPI);
- }
- queue.write(newByte);
- } else if (newByte >= 0x20 && newByte <= 0x2F) {
- // {I}
- state = CONTROL_SEQUENCE_IF;
- queue.write(newByte);
- } else if (newByte >= 0x40 && newByte <= 0x7E) {
- // F -- end of sequence
- state = NORMAL_BYTES;
- queue.reset();
- } else {
- return malformedInput(ERR_CTRLBYTE);
- }
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult versionSequence(short newByte) {
- if (state == VERSION_SEQUENCE_V) {
- if (newByte >= 0x20 && newByte <= 0x2F) {
- state = VERSION_SEQUENCE_TERM;
- queue.write(newByte);
- } else {
- return escapeSequenceOther(newByte);
- }
- } else /* if (state == VERSION_SEQUENCE_TERM) */ {
- switch (newByte) {
- case 0x30:
- if (!versionSequenceAllowed) {
- return malformedInput(ERR_VERSTART);
- }
-
- // OK to ignore extensions
- versionSequenceAllowed = false;
- state = NORMAL_BYTES;
- queue.reset();
- break;
- case 0x31:
- return malformedInput((versionSequenceAllowed)
- ? ERR_VERMANDATORY : ERR_VERSTART);
- default:
- return escapeSequenceOther(newByte);
- }
- }
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult charset94N(short newByte) {
- switch (newByte) {
- case 0x28:
- state = CHARSET_NLIIF;
- break;
- case 0x29:
- state = CHARSET_NRIIF;
- break;
- default:
- // escapeSequenceOther will write byte if appropriate
- return escapeSequenceOther(newByte);
- }
-
- queue.write(newByte);
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult charset94NL(short newByte, CharBuffer cb) {
- if (newByte >= 0x21 &&
- newByte <= (state == CHARSET_NLIIF ? 0x23 : 0x2F)) {
- // {I}
- state = CHARSET_NLIF;
- queue.write(newByte);
- } else if (newByte >= 0x40 && newByte <= 0x7E) {
- // F
- return switchDecoder(newByte, cb);
- } else {
- return escapeSequenceOther(newByte);
- }
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult charset94NR(short newByte, CharBuffer cb)
- {
- if (newByte >= 0x21 &&
- newByte <= (state == CHARSET_NRIIF ? 0x23 : 0x2F)) {
- // {I}
- state = CHARSET_NRIF;
- queue.write(newByte);
- } else if (newByte >= 0x40 && newByte <= 0x7E) {
- // F
- return switchDecoder(newByte, cb);
- } else {
- return escapeSequenceOther(newByte);
- }
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult charset9496L(short newByte, CharBuffer cb) {
- if (newByte >= 0x21 &&
- newByte <= (state == CHARSET_LIIF ? 0x23 : 0x2F)) {
- // {I}
- state = CHARSET_LIF;
- queue.write(newByte);
- return CoderResult.UNDERFLOW;
- } else if (newByte >= 0x40 && newByte <= 0x7E) {
- // F
- return switchDecoder(newByte, cb);
- } else {
- return escapeSequenceOther(newByte);
- }
- }
-
- private CoderResult charset9496R(short newByte, CharBuffer cb) {
- if (newByte >= 0x21 &&
- newByte <= (state == CHARSET_RIIF ? 0x23 : 0x2F)) {
- // {I}
- state = CHARSET_RIF;
- queue.write(newByte);
- return CoderResult.UNDERFLOW;
- } else if (newByte >= 0x40 && newByte <= 0x7E) {
- // F
- return switchDecoder(newByte, cb);
- } else {
- return escapeSequenceOther(newByte);
- }
- }
-
- private CoderResult charsetNonStandard(short newByte, CharBuffer cb) {
- switch (state) {
- case CHARSET_NONSTANDARD_FOML:
- if (newByte == 0x2F) {
- state = CHARSET_NONSTANDARD_OML;
- queue.write(newByte);
- } else {
- return escapeSequenceOther(newByte);
- }
- break;
- case CHARSET_NONSTANDARD_OML:
- if (newByte >= 0x30 && newByte <= 0x34) {
- state = CHARSET_NONSTANDARD_ML;
- queue.write(newByte);
- } else if (newByte >= 0x35 && newByte <= 0x3F) {
- state = EXTENSION_ML;
- queue.write(newByte);
- } else {
- return escapeSequenceOther(newByte);
- }
- break;
- case CHARSET_NONSTANDARD_ML:
- ext_count = (newByte & 0x7F) * 0x80;
- state = CHARSET_NONSTANDARD_L;
- break;
- case CHARSET_NONSTANDARD_L:
- ext_count = ext_count + (newByte & 0x7F);
- state = (ext_count > 0) ? CHARSET_NONSTANDARD : NORMAL_BYTES;
- break;
- case CHARSET_NONSTANDARD:
- if (newByte == 0x3F || newByte == 0x2A) {
- queue.reset(); // In this case, only current byte is bad.
- return malformedInput(ERR_ENCODINGBYTE);
- }
- ext_offset++;
- if (ext_offset >= ext_count) {
- ext_offset = ext_count = 0;
- state = NORMAL_BYTES;
- queue.reset();
- encodingQueue.reset();
- } else if (newByte == 0x02) {
- // encoding name terminator
- return switchDecoder((short)0, cb);
- } else {
- encodingQueue.write(newByte);
- }
- break;
- default:
- error(ERR_ILLSTATE);
- }
- return CoderResult.UNDERFLOW;
- }
-
- private CoderResult extension(short newByte) {
- switch (state) {
- case EXTENSION_ML:
- ext_count = (newByte & 0x7F) * 0x80;
- state = EXTENSION_L;
- break;
- case EXTENSION_L:
- ext_count = ext_count + (newByte & 0x7F);
- state = (ext_count > 0) ? EXTENSION : NORMAL_BYTES;
- break;
- case EXTENSION:
- // Consume 'count' bytes. Don't bother putting them on the queue.
- // There may be too many and we can't do anything with them anyway.
- ext_offset++;
- if (ext_offset >= ext_count) {
- ext_offset = ext_count = 0;
- state = NORMAL_BYTES;
- queue.reset();
- }
- break;
- default:
- error(ERR_ILLSTATE);
- }
- return CoderResult.UNDERFLOW;
- }
-
- /**
- * Preconditions:
- * 1. 'queue' contains ControlSequence.escSequence
- * 2. 'encodingQueue' contains ControlSequence.encoding
- */
- private CoderResult switchDecoder(short lastByte, CharBuffer cb) {
- CoderResult cr = CoderResult.UNDERFLOW;
- CharsetDecoder decoder = null;
- boolean high = false;
- byte[] escSequence;
- byte[] encoding = null;
-
- if (lastByte != 0) {
- queue.write(lastByte);
- }
-
- escSequence = queue.toByteArray();
- queue.reset();
-
- if (state == CHARSET_NONSTANDARD) {
- encoding = encodingQueue.toByteArray();
- encodingQueue.reset();
- decoder = CompoundTextSupport.
- getNonStandardDecoder(escSequence, encoding);
- } else {
- decoder = CompoundTextSupport.getStandardDecoder(escSequence);
- high = CompoundTextSupport.getHighBit(escSequence);
- }
- if (decoder != null) {
- initDecoder(decoder);
- } else if (unmappableCharacterAction() == CodingErrorAction.REPORT) {
- int badInputLength = 1;
- if (encoding != null) {
- badInputLength = encoding.length;
- } else if (escSequence.length > 0) {
- badInputLength = escSequence.length;
- }
- return CoderResult.unmappableForLength(badInputLength);
- }
-
- if (state == CHARSET_NLIIF || state == CHARSET_NLIF ||
- state == CHARSET_LIIF || state == CHARSET_LIF)
- {
- if (lastDecoder == glDecoder) {
- cr = flushDecoder(glDecoder, cb);
- }
- glDecoder = lastDecoder = decoder;
- glHigh = high;
- state = NORMAL_BYTES;
- } else if (state == CHARSET_NRIIF || state == CHARSET_NRIF ||
- state == CHARSET_RIIF || state == CHARSET_RIF) {
- if (lastDecoder == grDecoder) {
- cr = flushDecoder(grDecoder, cb);
- }
- grDecoder = lastDecoder = decoder;
- grHigh = high;
- state = NORMAL_BYTES;
- } else if (state == CHARSET_NONSTANDARD) {
- if (lastDecoder != null) {
- cr = flushDecoder(lastDecoder, cb);
- lastDecoder = null;
- }
- nonStandardDecoder = decoder;
- state = NONSTANDARD_BYTES;
- } else {
- error(ERR_ILLSTATE);
- }
- return cr;
- }
-
- private ByteBuffer fbb= ByteBuffer.allocate(0);
- private CoderResult flushDecoder(CharsetDecoder dec, CharBuffer cb) {
- dec.decode(fbb, cb, true);
- CoderResult cr = dec.flush(cb);
- dec.reset(); //reuse
- return cr;
- }
-
- private CoderResult malformedInput(String msg) {
- int badInputLength = queue.size() + 1 /* current byte */ ;
- queue.reset();
- //TBD: nowhere to put the msg in CoderResult
- return CoderResult.malformedForLength(badInputLength);
- }
-
- private void error(String msg) {
- // For now, throw InternalError. Convert to 'assert' keyword later.
- throw new InternalError(msg);
- }
-
- protected CoderResult implFlush(CharBuffer out) {
- CoderResult cr = CoderResult.UNDERFLOW;
- if (lastDecoder != null)
- cr = flushDecoder(lastDecoder, out);
- if (state != NORMAL_BYTES)
- //TBD message ERR_FLUSH;
- cr = CoderResult.malformedForLength(0);
- reset();
- return cr;
- }
-
- /**
- * Resets the decoder.
- * Call this method to reset the decoder to its initial state
- */
- protected void implReset() {
- state = NORMAL_BYTES;
- ext_count = ext_offset = 0;
- versionSequenceAllowed = true;
- queue.reset();
- encodingQueue.reset();
- nonStandardDecoder = lastDecoder = null;
- glHigh = false;
- grHigh = true;
- try {
- // Initial state in ISO 2022 designates Latin-1 charset.
- glDecoder = Charset.forName("ASCII").newDecoder();
- grDecoder = Charset.forName("ISO8859_1").newDecoder();
- } catch (IllegalArgumentException e) {
- error(ERR_LATIN1);
- }
- initDecoder(glDecoder);
- initDecoder(grDecoder);
- }
-
- protected void implOnMalformedInput(CodingErrorAction newAction) {
- if (glDecoder != null)
- glDecoder.onMalformedInput(newAction);
- if (grDecoder != null)
- grDecoder.onMalformedInput(newAction);
- if (nonStandardDecoder != null)
- nonStandardDecoder.onMalformedInput(newAction);
- }
-
- protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
- if (glDecoder != null)
- glDecoder.onUnmappableCharacter(newAction);
- if (grDecoder != null)
- grDecoder.onUnmappableCharacter(newAction);
- if (nonStandardDecoder != null)
- nonStandardDecoder.onUnmappableCharacter(newAction);
- }
-
- protected void implReplaceWith(String newReplacement) {
- if (glDecoder != null)
- glDecoder.replaceWith(newReplacement);
- if (grDecoder != null)
- grDecoder.replaceWith(newReplacement);
- if (nonStandardDecoder != null)
- nonStandardDecoder.replaceWith(newReplacement);
- }
-
- private void initDecoder(CharsetDecoder dec) {
- dec.onUnmappableCharacter(CodingErrorAction.REPLACE)
- .replaceWith(replacement());
- }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.nio.cs.ext;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class COMPOUND_TEXT_Encoder extends CharsetEncoder {
-
- /**
- * NOTE: The following four static variables should be used *only* for
- * testing whether a encoder can encode a specific character. They
- * cannot be used for actual encoding because they are shared across all
- * COMPOUND_TEXT encoders and may be stateful.
- */
- private static final Map<String,CharsetEncoder> encodingToEncoderMap =
- Collections.synchronizedMap(new HashMap<String,CharsetEncoder>(21, 1.0f));
- private static final CharsetEncoder latin1Encoder;
- private static final CharsetEncoder defaultEncoder;
- private static final boolean defaultEncodingSupported;
-
- static {
- CharsetEncoder encoder = Charset.defaultCharset().newEncoder();
- String encoding = encoder.charset().name();
- if ("ISO8859_1".equals(encoding)) {
- latin1Encoder = encoder;
- defaultEncoder = encoder;
- defaultEncodingSupported = true;
- } else {
- try {
- latin1Encoder =
- Charset.forName("ISO8859_1").newEncoder();
- } catch (IllegalArgumentException e) {
- throw new ExceptionInInitializerError
- ("ISO8859_1 unsupported");
- }
- defaultEncoder = encoder;
- defaultEncodingSupported = CompoundTextSupport.getEncodings().
- contains(defaultEncoder.charset().name());
- }
- }
-
- private CharsetEncoder encoder;
- private char[] charBuf = new char[1];
- private CharBuffer charbuf = CharBuffer.wrap(charBuf);
- private ByteArrayOutputStream nonStandardCharsetBuffer;
- private byte[] byteBuf;
- private ByteBuffer bytebuf;
- private int numNonStandardChars, nonStandardEncodingLen;
-
- public COMPOUND_TEXT_Encoder(Charset cs) {
- super(cs,
- (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2),
- (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2));
- try {
- encoder = Charset.forName("ISO8859_1").newEncoder();
- } catch (IllegalArgumentException cannotHappen) {}
- initEncoder(encoder);
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer des) {
- CoderResult cr = CoderResult.UNDERFLOW;
- char[] input = src.array();
- int inOff = src.arrayOffset() + src.position();
- int inEnd = src.arrayOffset() + src.limit();
-
- try {
- while (inOff < inEnd && cr.isUnderflow()) {
- charBuf[0] = input[inOff];
- if (charBuf[0] <= '\u0008' ||
- (charBuf[0] >= '\u000B' && charBuf[0] <= '\u001F') ||
- (charBuf[0] >= '\u0080' && charBuf[0] <= '\u009F')) {
- // The compound text specification only permits the octets
- // 0x09, 0x0A, 0x1B, and 0x9B in C0 and C1. Of these, 1B and
- // 9B must also be removed because they initiate control
- // sequences.
- charBuf[0] = '?';
- }
-
- CharsetEncoder enc = getEncoder(charBuf[0]);
- //System.out.println("char=" + charBuf[0] + ", enc=" + enc);
- if (enc == null) {
- if (unmappableCharacterAction()
- == CodingErrorAction.REPORT) {
- charBuf[0] = '?';
- enc = latin1Encoder;
- } else {
- return CoderResult.unmappableForLength(1);
- }
- }
- if (enc != encoder) {
- if (nonStandardCharsetBuffer != null) {
- cr = flushNonStandardCharsetBuffer(des);
- } else {
- //cr= encoder.flush(des);
- flushEncoder(encoder, des);
- }
- if (!cr.isUnderflow())
- return cr;
- byte[] escSequence = CompoundTextSupport.
- getEscapeSequence(enc.charset().name());
- if (escSequence == null) {
- throw new InternalError("Unknown encoding: " +
- enc.charset().name());
- } else if (escSequence[1] == (byte)0x25 &&
- escSequence[2] == (byte)0x2F) {
- initNonStandardCharsetBuffer(enc, escSequence);
- } else if (des.remaining() >= escSequence.length) {
- des.put(escSequence, 0, escSequence.length);
- } else {
- return CoderResult.OVERFLOW;
- }
- encoder = enc;
- continue;
- }
- charbuf.rewind();
- if (nonStandardCharsetBuffer == null) {
- cr = encoder.encode(charbuf, des, false);
- } else {
- bytebuf.clear();
- cr = encoder.encode(charbuf, bytebuf, false);
- bytebuf.flip();
- nonStandardCharsetBuffer.write(byteBuf,
- 0, bytebuf.limit());
- numNonStandardChars++;
- }
- inOff++;
- }
- return cr;
- } finally {
- src.position(inOff - src.arrayOffset());
- }
- }
-
- protected CoderResult implFlush(ByteBuffer out) {
- CoderResult cr = (nonStandardCharsetBuffer != null)
- ? flushNonStandardCharsetBuffer(out)
- //: encoder.flush(out);
- : flushEncoder(encoder, out);
- reset();
- return cr;
- }
-
- private void initNonStandardCharsetBuffer(CharsetEncoder c,
- byte[] escSequence)
- {
- nonStandardCharsetBuffer = new ByteArrayOutputStream();
- byteBuf = new byte[(int)c.maxBytesPerChar()];
- bytebuf = ByteBuffer.wrap(byteBuf);
- nonStandardCharsetBuffer.write(escSequence, 0, escSequence.length);
- nonStandardCharsetBuffer.write(0); // M placeholder
- nonStandardCharsetBuffer.write(0); // L placeholder
- byte[] encoding = CompoundTextSupport.
- getEncoding(c.charset().name());
- if (encoding == null) {
- throw new InternalError
- ("Unknown encoding: " + encoder.charset().name());
- }
- nonStandardCharsetBuffer.write(encoding, 0, encoding.length);
- nonStandardCharsetBuffer.write(0x02); // divider
- nonStandardEncodingLen = encoding.length + 1;
- }
-
- private CoderResult flushNonStandardCharsetBuffer(ByteBuffer out) {
- if (numNonStandardChars > 0) {
- byte[] flushBuf = new byte[(int)encoder.maxBytesPerChar() *
- numNonStandardChars];
- ByteBuffer bb = ByteBuffer.wrap(flushBuf);
- flushEncoder(encoder, bb);
- bb.flip();
- nonStandardCharsetBuffer.write(flushBuf, 0, bb.limit());
- numNonStandardChars = 0;
- }
-
- int numBytes = nonStandardCharsetBuffer.size();
- int nonStandardBytesOff = 6 + nonStandardEncodingLen;
-
- if (out.remaining() < (numBytes - nonStandardBytesOff) +
- nonStandardBytesOff * (((numBytes - nonStandardBytesOff) /
- ((1 << 14) - 1)) + 1))
- {
- return CoderResult.OVERFLOW;
- }
-
- byte[] nonStandardBytes =
- nonStandardCharsetBuffer.toByteArray();
-
- // The non-standard charset header only supports 2^14-1 bytes of data.
- // If we have more than that, we have to repeat the header.
- do {
- out.put((byte)0x1B);
- out.put((byte)0x25);
- out.put((byte)0x2F);
- out.put(nonStandardBytes[3]);
-
- int toWrite = Math.min(numBytes - nonStandardBytesOff,
- (1 << 14) - 1 - nonStandardEncodingLen);
-
- out.put((byte)
- (((toWrite + nonStandardEncodingLen) / 0x80) | 0x80)); // M
- out.put((byte)
- (((toWrite + nonStandardEncodingLen) % 0x80) | 0x80)); // L
- out.put(nonStandardBytes, 6, nonStandardEncodingLen);
- out.put(nonStandardBytes, nonStandardBytesOff, toWrite);
- nonStandardBytesOff += toWrite;
- } while (nonStandardBytesOff < numBytes);
-
- nonStandardCharsetBuffer = null;
- byteBuf = null;
- nonStandardEncodingLen = 0;
- return CoderResult.UNDERFLOW;
- }
-
- /**
- * Resets the encoder.
- * Call this method to reset the encoder to its initial state
- */
- protected void implReset() {
- numNonStandardChars = nonStandardEncodingLen = 0;
- nonStandardCharsetBuffer = null;
- byteBuf = null;
- try {
- encoder = Charset.forName("ISO8859_1").newEncoder();
- } catch (IllegalArgumentException cannotHappen) {
- }
- initEncoder(encoder);
- }
-
- /**
- * Return whether a character is mappable or not
- * @return true if a character is mappable
- */
- public boolean canEncode(char ch) {
- return getEncoder(ch) != null;
- }
-
- protected void implOnMalformedInput(CodingErrorAction newAction) {
- encoder.onUnmappableCharacter(newAction);
- }
-
- protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
- encoder.onUnmappableCharacter(newAction);
- }
-
- protected void implReplaceWith(byte[] newReplacement) {
- if (encoder != null)
- encoder.replaceWith(newReplacement);
- }
-
- /**
- * Try to figure out which CharsetEncoder to use for conversion
- * of the specified Unicode character. The target character encoding
- * of the returned encoder is approved to be used with Compound Text.
- *
- * @param ch Unicode character
- * @return CharsetEncoder to convert the given character
- */
- private CharsetEncoder getEncoder(char ch) {
- // 1. Try the current encoder.
- if (encoder.canEncode(ch)) {
- return encoder;
- }
-
- // 2. Try the default encoder.
- if (defaultEncodingSupported && defaultEncoder.canEncode(ch)) {
- CharsetEncoder retval = null;
- try {
- retval = defaultEncoder.charset().newEncoder();
- } catch (UnsupportedOperationException cannotHappen) {
- }
- initEncoder(retval);
- return retval;
- }
-
- // 3. Try ISO8859-1.
- if (latin1Encoder.canEncode(ch)) {
- CharsetEncoder retval = null;
- try {
- retval = latin1Encoder.charset().newEncoder();
- } catch (UnsupportedOperationException cannotHappen) {}
- initEncoder(retval);
- return retval;
- }
-
- // 4. Brute force search of all supported encodings.
- for (String encoding : CompoundTextSupport.getEncodings())
- {
- CharsetEncoder enc = encodingToEncoderMap.get(encoding);
- if (enc == null) {
- enc = CompoundTextSupport.getEncoder(encoding);
- if (enc == null) {
- throw new InternalError("Unsupported encoding: " +
- encoding);
- }
- encodingToEncoderMap.put(encoding, enc);
- }
- if (enc.canEncode(ch)) {
- CharsetEncoder retval = CompoundTextSupport.getEncoder(encoding);
- initEncoder(retval);
- return retval;
- }
- }
-
- return null;
- }
-
- private void initEncoder(CharsetEncoder enc) {
- try {
- enc.onUnmappableCharacter(CodingErrorAction.REPLACE)
- .replaceWith(replacement());
- } catch (IllegalArgumentException x) {}
- }
-
- private CharBuffer fcb= CharBuffer.allocate(0);
- private CoderResult flushEncoder(CharsetEncoder enc, ByteBuffer bb) {
- enc.encode(fcb, bb, true);
- return enc.flush(bb);
- }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/CompoundTextSupport.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,548 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.nio.charset.*;
-
-final class CompoundTextSupport {
-
- private static final class ControlSequence {
-
- final int hash;
- final byte[] escSequence;
- final byte[] encoding;
-
- ControlSequence(byte[] escSequence) {
- this(escSequence, null);
- }
- ControlSequence(byte[] escSequence, byte[] encoding) {
- if (escSequence == null) {
- throw new NullPointerException();
- }
-
- this.escSequence = escSequence;
- this.encoding = encoding;
-
- int hash = 0;
- int length = escSequence.length;
-
- for (int i = 0; i < escSequence.length; i++) {
- hash += (((int)escSequence[i]) & 0xff) << (i % 4);
- }
- if (encoding != null) {
- for (int i = 0; i < encoding.length; i++) {
- hash += (((int)encoding[i]) & 0xff) << (i % 4);
- }
- length += 2 /* M L */ + encoding.length + 1 /* 0x02 */;
- }
-
- this.hash = hash;
-
- if (MAX_CONTROL_SEQUENCE_LEN < length) {
- MAX_CONTROL_SEQUENCE_LEN = length;
- }
- }
-
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (!(obj instanceof ControlSequence)) {
- return false;
- }
- ControlSequence rhs = (ControlSequence)obj;
- if (escSequence != rhs.escSequence) {
- if (escSequence.length != rhs.escSequence.length) {
- return false;
- }
- for (int i = 0; i < escSequence.length; i++) {
- if (escSequence[i] != rhs.escSequence[i]) {
- return false;
- }
- }
- }
- if (encoding != rhs.encoding) {
- if (encoding == null || rhs.encoding == null ||
- encoding.length != rhs.encoding.length)
- {
- return false;
- }
- for (int i = 0; i < encoding.length; i++) {
- if (encoding[i] != rhs.encoding[i]) {
- return false;
- }
- }
- }
- return true;
- }
-
- public int hashCode() {
- return hash;
- }
-
- ControlSequence concatenate(ControlSequence rhs) {
- if (encoding != null) {
- throw new IllegalArgumentException
- ("cannot concatenate to a non-standard charset escape " +
- "sequence");
- }
-
- int len = escSequence.length + rhs.escSequence.length;
- byte[] newEscSequence = new byte[len];
- System.arraycopy(escSequence, 0, newEscSequence, 0,
- escSequence.length);
- System.arraycopy(rhs.escSequence, 0, newEscSequence,
- escSequence.length, rhs.escSequence.length);
- return new ControlSequence(newEscSequence, rhs.encoding);
- }
- }
-
- static int MAX_CONTROL_SEQUENCE_LEN;
-
- /**
- * Maps a GL or GR escape sequence to an encoding.
- */
- private static final Map<ControlSequence, String> sequenceToEncodingMap;
-
- /**
- * Indicates whether a particular encoding wants the high bit turned on
- * or off.
- */
- private static final Map<ControlSequence, Boolean> highBitsMap;
-
- /**
- * Maps an encoding to an escape sequence. Rather than manage two
- * converters in CharToByteCOMPOUND_TEXT, we output escape sequences which
- * modify both GL and GR if necessary. This makes the output slightly less
- * efficient, but our code much simpler.
- */
- private static final Map<String, ControlSequence> encodingToSequenceMap;
-
- /**
- * The keys of 'encodingToSequenceMap', sorted in preferential order.
- */
- private static final List<String> encodings;
-
- static {
- HashMap<ControlSequence, String> tSequenceToEncodingMap =
- new HashMap<>(33, 1.0f);
- HashMap<ControlSequence, Boolean> tHighBitsMap =
- new HashMap<>(31, 1.0f);
- HashMap<String, ControlSequence> tEncodingToSequenceMap =
- new HashMap<>(21, 1.0f);
- ArrayList<String> tEncodings = new ArrayList<>(21);
-
- if (!(isEncodingSupported("US-ASCII") &&
- isEncodingSupported("ISO-8859-1")))
- {
- throw new ExceptionInInitializerError
- ("US-ASCII and ISO-8859-1 unsupported");
- }
-
- ControlSequence leftAscii = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x28, 0x42 });
- tSequenceToEncodingMap.put(leftAscii, "US-ASCII");
- tHighBitsMap.put(leftAscii, Boolean.FALSE);
-
- {
- ControlSequence rightAscii = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x29, 0x42 });
- tSequenceToEncodingMap.put(rightAscii, "US-ASCII");
- tHighBitsMap.put(rightAscii, Boolean.FALSE);
- }
-
- {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x41 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-1");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-1", fullSet);
- tEncodings.add("ISO-8859-1");
- }
- if (isEncodingSupported("ISO-8859-2")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x42 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-2");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-2", fullSet);
- tEncodings.add("ISO-8859-2");
- }
- if (isEncodingSupported("ISO-8859-3")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x43 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-3");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-3", fullSet);
- tEncodings.add("ISO-8859-3");
- }
- if (isEncodingSupported("ISO-8859-4")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x44 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-4");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-4", fullSet);
- tEncodings.add("ISO-8859-4");
- }
- if (isEncodingSupported("ISO-8859-5")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4C });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-5");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-5", fullSet);
- tEncodings.add("ISO-8859-5");
- }
- if (isEncodingSupported("ISO-8859-6")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x47 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-6");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-6", fullSet);
- tEncodings.add("ISO-8859-6");
- }
- if (isEncodingSupported("ISO-8859-7")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x46 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-7");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-7", fullSet);
- tEncodings.add("ISO-8859-7");
- }
- if (isEncodingSupported("ISO-8859-8")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x48 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-8");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-8", fullSet);
- tEncodings.add("ISO-8859-8");
- }
- if (isEncodingSupported("ISO-8859-9")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4D });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-9");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-9", fullSet);
- tEncodings.add("ISO-8859-9");
- }
- if (isEncodingSupported("JIS_X0201")) {
- ControlSequence glLeft = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x28, 0x4A });
- ControlSequence glRight = // high bit off, turn on
- new ControlSequence(new byte[] { 0x1B, 0x28, 0x49 });
- ControlSequence grLeft = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x29, 0x4A });
- ControlSequence grRight = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x29, 0x49 });
- tSequenceToEncodingMap.put(glLeft, "JIS_X0201");
- tSequenceToEncodingMap.put(glRight, "JIS_X0201");
- tSequenceToEncodingMap.put(grLeft, "JIS_X0201");
- tSequenceToEncodingMap.put(grRight, "JIS_X0201");
- tHighBitsMap.put(glLeft, Boolean.FALSE);
- tHighBitsMap.put(glRight, Boolean.TRUE);
- tHighBitsMap.put(grLeft, Boolean.FALSE);
- tHighBitsMap.put(grRight, Boolean.TRUE);
-
- ControlSequence fullSet = glLeft.concatenate(grRight);
- tEncodingToSequenceMap.put("JIS_X0201", fullSet);
- tEncodings.add("JIS_X0201");
- }
- if (isEncodingSupported("X11GB2312")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x41 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x41 });
- tSequenceToEncodingMap.put(leftHalf, "X11GB2312");
- tSequenceToEncodingMap.put(rightHalf, "X11GB2312");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("X11GB2312", leftHalf);
- tEncodings.add("X11GB2312");
- }
- if (isEncodingSupported("x-JIS0208")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x42 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x42 });
- tSequenceToEncodingMap.put(leftHalf, "x-JIS0208");
- tSequenceToEncodingMap.put(rightHalf, "x-JIS0208");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("x-JIS0208", leftHalf);
- tEncodings.add("x-JIS0208");
- }
- if (isEncodingSupported("X11KSC5601")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x43 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x43 });
- tSequenceToEncodingMap.put(leftHalf, "X11KSC5601");
- tSequenceToEncodingMap.put(rightHalf, "X11KSC5601");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("X11KSC5601", leftHalf);
- tEncodings.add("X11KSC5601");
- }
-
- // Encodings not listed in Compound Text Encoding spec
-
- // Esc seq: -b
- if (isEncodingSupported("ISO-8859-15")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x62 });
- tSequenceToEncodingMap.put(rightHalf, "ISO-8859-15");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("ISO-8859-15", fullSet);
- tEncodings.add("ISO-8859-15");
- }
- // Esc seq: -T
- if (isEncodingSupported("TIS-620")) {
- ControlSequence rightHalf = // high bit on, leave on
- new ControlSequence(new byte[] { 0x1B, 0x2D, 0x54 });
- tSequenceToEncodingMap.put(rightHalf, "TIS-620");
- tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
- ControlSequence fullSet = leftAscii.concatenate(rightHalf);
- tEncodingToSequenceMap.put("TIS-620", fullSet);
- tEncodings.add("TIS-620");
- }
- if (isEncodingSupported("JIS_X0212-1990")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x44 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x44 });
- tSequenceToEncodingMap.put(leftHalf, "JIS_X0212-1990");
- tSequenceToEncodingMap.put(rightHalf, "JIS_X0212-1990");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("JIS_X0212-1990", leftHalf);
- tEncodings.add("JIS_X0212-1990");
- }
- if (isEncodingSupported("X11CNS11643P1")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x47 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x47 });
- tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P1");
- tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P1");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("X11CNS11643P1", leftHalf);
- tEncodings.add("X11CNS11643P1");
- }
- if (isEncodingSupported("X11CNS11643P2")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x48 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x48 });
- tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P2");
- tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P2");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("X11CNS11643P2", leftHalf);
- tEncodings.add("X11CNS11643P2");
- }
- if (isEncodingSupported("X11CNS11643P3")) {
- ControlSequence leftHalf = // high bit off, leave off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x49 });
- ControlSequence rightHalf = // high bit on, turn off
- new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x49 });
- tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P3");
- tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P3");
- tHighBitsMap.put(leftHalf, Boolean.FALSE);
- tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
- tEncodingToSequenceMap.put("X11CNS11643P3", leftHalf);
- tEncodings.add("X11CNS11643P3");
- }
- // Esc seq: %/2??SUN-KSC5601.1992-3
- if (isEncodingSupported("x-Johab")) {
- // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
- // support code. It implies that all Johab characters comprise two
- // octets, which isn't true. Johab supports the ASCII/KS-Roman
- // characters from 0x21-0x7E with single-byte representations.
- ControlSequence johab = new ControlSequence(
- new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
- new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x4b, 0x53, 0x43, 0x35,
- 0x36, 0x30, 0x31, 0x2e, 0x31, 0x39, 0x39, 0x32,
- 0x2d, 0x33 });
- tSequenceToEncodingMap.put(johab, "x-Johab");
- tEncodingToSequenceMap.put("x-Johab", johab);
- tEncodings.add("x-Johab");
- }
- // Esc seq: %/2??SUN-BIG5-1
- if (isEncodingSupported("Big5")) {
- // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
- // support code. It implies that all Big5 characters comprise two
- // octets, which isn't true. Big5 supports the ASCII/CNS-Roman
- // characters from 0x21-0x7E with single-byte representations.
- ControlSequence big5 = new ControlSequence(
- new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
- new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x42, 0x49, 0x47, 0x35,
- 0x2d, 0x31 });
- tSequenceToEncodingMap.put(big5, "Big5");
- tEncodingToSequenceMap.put("Big5", big5);
- tEncodings.add("Big5");
- }
-
- sequenceToEncodingMap =
- Collections.unmodifiableMap(tSequenceToEncodingMap);
- highBitsMap = Collections.unmodifiableMap(tHighBitsMap);
- encodingToSequenceMap =
- Collections.unmodifiableMap(tEncodingToSequenceMap);
- encodings = Collections.unmodifiableList(tEncodings);
- }
-
- private static boolean isEncodingSupported(String encoding) {
- try {
- if (Charset.isSupported(encoding))
- return true;
- } catch (IllegalArgumentException x) { }
- return (getDecoder(encoding) != null &&
- getEncoder(encoding) != null);
- }
-
-
- // For Decoder
- static CharsetDecoder getStandardDecoder(byte[] escSequence) {
- return getNonStandardDecoder(escSequence, null);
- }
- static boolean getHighBit(byte[] escSequence) {
- Boolean bool = highBitsMap.get(new ControlSequence(escSequence));
- return (bool == Boolean.TRUE);
- }
- static CharsetDecoder getNonStandardDecoder(byte[] escSequence,
- byte[] encoding) {
- return getDecoder(sequenceToEncodingMap.get
- (new ControlSequence(escSequence, encoding)));
- }
- static CharsetDecoder getDecoder(String enc) {
- if (enc == null) {
- return null;
- }
- Charset cs = null;
- try {
- cs = Charset.forName(enc);
- } catch (IllegalArgumentException e) {
- Class<?> cls;
- try {
- cls = Class.forName("sun.awt.motif." + enc);
- } catch (ClassNotFoundException ee) {
- return null;
- }
- try {
- cs = (Charset)cls.newInstance();
- } catch (InstantiationException ee) {
- return null;
- } catch (IllegalAccessException ee) {
- return null;
- }
- }
- try {
- return cs.newDecoder();
- } catch (UnsupportedOperationException e) {}
- return null;
- }
-
-
- // For Encoder
- static byte[] getEscapeSequence(String encoding) {
- ControlSequence seq = encodingToSequenceMap.get(encoding);
- if (seq != null) {
- return seq.escSequence;
- }
- return null;
- }
- static byte[] getEncoding(String encoding) {
- ControlSequence seq = encodingToSequenceMap.get(encoding);
- if (seq != null) {
- return seq.encoding;
- }
- return null;
- }
- static List<String> getEncodings() {
- return encodings;
- }
- static CharsetEncoder getEncoder(String enc) {
- if (enc == null) {
- return null;
- }
- Charset cs = null;
- try {
- cs = Charset.forName(enc);
- } catch (IllegalArgumentException e) {
- Class<?> cls;
- try {
- cls = Class.forName("sun.awt.motif." + enc);
- } catch (ClassNotFoundException ee) {
- return null;
- }
- try {
- cs = (Charset)cls.newInstance();
- } catch (InstantiationException ee) {
- return null;
- } catch (IllegalAccessException ee) {
- return null;
- }
- }
- try {
- return cs.newEncoder();
- } catch (Throwable e) {}
- return null;
- }
-
- // Not an instantiable class
- private CompoundTextSupport() {}
-}
--- a/jdk/test/ProblemList.txt Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/ProblemList.txt Wed Jul 05 20:33:55 2017 +0200
@@ -225,12 +225,6 @@
# 8058849
sun/security/krb5/config/dns.sh generic-all
-# 6988842: 4 tests failing on Solaris 5.10
-sun/security/pkcs11/Secmod/AddPrivateKey.java solaris-all
-sun/security/pkcs11/ec/ReadCertificates.java solaris-all
-sun/security/pkcs11/ec/ReadPKCS12.java solaris-all
-sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java solaris-all
-
# 7041639: Solaris DSA keypair generation bug
java/security/KeyPairGenerator/SolarisShortDSA.java solaris-all
sun/security/tools/keytool/standard.sh solaris-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/BasicStroke/DashStrokeTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ * @test
+ * @bug 8075942
+ * @summary test there is no exception rendering a dashed stroke
+ * @run DashStrokeTest
+ * @run -Dsun.java2d.renderer=sun.java2d.pisces.PiscesRenderingEngine
+ */
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.geom.GeneralPath;
+import java.awt.image.BufferedImage;
+
+
+public class DashStrokeTest {
+
+ public static void main(String[] args) {
+
+ GeneralPath shape = new GeneralPath();
+ int[] pointTypes = {0, 0, 1, 1, 0, 1, 1, 0};
+ double[] xpoints = {428, 420, 400, 400, 400, 400, 420, 733};
+ double[] ypoints = {180, 180, 180, 160, 30, 10, 10, 10};
+ shape.moveTo(xpoints[0], ypoints[0]);
+ for (int i = 1; i < pointTypes.length; i++) {
+ if (pointTypes[i] == 1 && i < pointTypes.length - 1) {
+ shape.quadTo(xpoints[i], ypoints[i],
+ xpoints[i + 1], ypoints[i + 1]);
+ } else {
+ shape.lineTo(xpoints[i], ypoints[i]);
+ }
+ }
+
+ BufferedImage image = new
+ BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g2 = image.createGraphics();
+
+ Color color = new Color(124, 0, 124, 255);
+ g2.setColor(color);
+ Stroke stroke = new BasicStroke(1.0f,
+ BasicStroke.CAP_BUTT,
+ BasicStroke.JOIN_BEVEL,
+ 10.0f, new float[] {9, 6}, 0.0f);
+ g2.setStroke(stroke);
+ g2.draw(shape);
+ }
+}
--- a/jdk/test/java/awt/Component/Headless/HeadlessComponent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessComponent.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -52,7 +52,6 @@
comp.getName();
comp.setName("goober");
comp.getParent();
- comp.getPeer();
comp.getGraphicsConfiguration();
comp.getTreeLock();
comp.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessContainer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessContainer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -87,7 +87,6 @@
lw.setName("goober");
lw.getName();
lw.getParent();
- lw.getPeer();
lw.getGraphicsConfiguration();
lw.getTreeLock();
lw.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessPanel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Component/Headless/HeadlessPanel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -76,7 +76,6 @@
p.setName("goober");
p.getName();
p.getParent();
- p.getPeer();
p.getGraphicsConfiguration();
p.getTreeLock();
p.getToolkit();
--- a/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- @test
- @bug 6255653
- @summary REGRESSION: Override isLightweight() causes access violation in awt.dll
- @author Andrei Dmitriev: area=awt-component
- @run main StubPeerCrash
-*/
-
-/*
- * The test may not crash for several times so iteratively continue up to some limit.
- */
-
-import java.awt.*;
-import java.awt.peer.*;
-import java.awt.event.PaintEvent;
-import java.awt.image.ImageProducer;
-import java.awt.image.ImageObserver;
-import java.awt.image.ColorModel;
-import java.awt.image.VolatileImage;
-import java.awt.GraphicsConfiguration;
-import sun.awt.CausedFocusEvent;
-import sun.java2d.pipe.Region;
-
-public class StubPeerCrash {
- public static int ITERATIONS = 20;
-
- public static void main(String []s)
- {
- for (int i = 0; i < ITERATIONS; i++){
- showFrame(i);
- }
- }
-
- private static void showFrame(int i){
- System.out.println("iteration = "+i);
- Frame f = new Frame();
- f.add(new AHeavyweightComponent());
- f.setVisible(true);
- f.setVisible(false);
- }
-}
-
-class AHeavyweightComponent extends Component {
- private ComponentPeer peer = new StubComponentPeer();
-
- public AHeavyweightComponent(){
- }
-
- public boolean isLightweight() {
- return false;
- }
-
- public ComponentPeer getPeer(){
- return peer;
- }
-}
-
-class StubComponentPeer implements ComponentPeer {
- public boolean isObscured(){return true;};
- public boolean canDetermineObscurity(){return true;};
- public void setVisible(boolean b){};
- public void setEnabled(boolean b){};
- public void paint(Graphics g){};
- public void repaint(long tm, int x, int y, int width, int height){};
- public void print(Graphics g){};
- public void setBounds(int x, int y, int width, int height, int op){};
- public void handleEvent(AWTEvent e){};
- public void coalescePaintEvent(PaintEvent e){};
- public Point getLocationOnScreen(){return null;};
- public Dimension getPreferredSize(){return null;};
- public Dimension getMinimumSize(){return null;};
- public ColorModel getColorModel(){return null;};
- public Toolkit getToolkit(){return null;};
- public Graphics getGraphics(){return null;};
- public FontMetrics getFontMetrics(Font font){return null;};
- public void dispose(){};
- public void setForeground(Color c){};
- public void setBackground(Color c){};
- public void setFont(Font f){};
- public void updateCursorImmediately(){};
- public boolean requestFocus(Component lightweightChild,
- boolean temporary,
- boolean focusedWindowChangeAllowed,
- long time, CausedFocusEvent.Cause cause){
- return true;
- };
- public boolean isFocusable(){return true;};
-
- public Image createImage(ImageProducer producer){return null;};
- public Image createImage(int width, int height){return null;};
- public VolatileImage createVolatileImage(int width, int height){return null;};
- public boolean prepareImage(Image img, int w, int h, ImageObserver o){return true;};
- public int checkImage(Image img, int w, int h, ImageObserver o){return 0;};
- public GraphicsConfiguration getGraphicsConfiguration(){return null;};
- public boolean handlesWheelScrolling(){return true;};
- public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{};
- public Image getBackBuffer(){return null;};
- public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){};
- public void destroyBuffers(){};
-
- /**
- * Reparents this peer to the new parent referenced by <code>newContainer</code> peer
- * Implementation depends on toolkit and container.
- * @param newContainer peer of the new parent container
- * @since 1.5
- */
- public void reparent(ContainerPeer newContainer){};
- /**
- * Returns whether this peer supports reparenting to another parent withour destroying the peer
- * @return true if appropriate reparent is supported, false otherwise
- * @since 1.5
- */
- public boolean isReparentSupported(){return true;};
-
- /**
- * Used by lightweight implementations to tell a ComponentPeer to layout
- * its sub-elements. For instance, a lightweight Checkbox needs to layout
- * the box, as well as the text label.
- */
- public void layout(){};
-
-
- public Rectangle getBounds(){return null;};
-
- /**
- * Applies the shape to the native component window.
- * @since 1.7
- */
- public void applyShape(Region shape){};
-
- /**
- * DEPRECATED: Replaced by getPreferredSize().
- */
- public Dimension preferredSize(){return null;};
-
- /**
- * DEPRECATED: Replaced by getMinimumSize().
- */
- public Dimension minimumSize(){return null;};
-
- /**
- * DEPRECATED: Replaced by setVisible(boolean).
- */
- public void show(){};
-
- /**
- * DEPRECATED: Replaced by setVisible(boolean).
- */
- public void hide(){};
-
- /**
- * DEPRECATED: Replaced by setEnabled(boolean).
- */
- public void enable(){};
-
- /**
- * DEPRECATED: Replaced by setEnabled(boolean).
- */
- public void disable(){};
-
- /**
- * DEPRECATED: Replaced by setBounds(int, int, int, int).
- */
- public void reshape(int x, int y, int width, int height){};
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/AWTFocusTransitionTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile AWTFocusTransitionTest.java
+ * @run main/othervm AWTFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class AWTFocusTransitionTest {
+ private static SunToolkit toolkit;
+ private static Robot robot;
+
+ private static Frame frame;
+ private static TextField textField;
+ private static Button button;
+
+ public static void main(String[] args) throws Exception {
+ toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+ robot = new Robot();
+ robot.setAutoDelay(50);
+
+ try {
+ createAndShowGUI();
+
+ toolkit.realSync();
+
+ checkFocusOwner(textField);
+
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ toolkit.realSync();
+
+ checkFocusOwner(button);
+
+ robot.keyPress(KeyEvent.VK_SHIFT);
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_SHIFT);
+ toolkit.realSync();
+
+ checkFocusOwner(textField);
+
+ robot.keyPress(KeyEvent.VK_SHIFT);
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_SHIFT);
+ toolkit.realSync();
+
+ checkFocusOwner(button);
+ } finally {
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ System.out.println("Test Passed!");
+ }
+
+ private static void createAndShowGUI() {
+ frame = new Frame("AWTFocusTransitionTest");
+ frame.setSize(300, 300);
+ frame.setFocusTraversalPolicyProvider(true);
+ frame.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+ textField = new TextField();
+ button = new Button();
+
+ Panel panel = new Panel();
+ panel.setFocusTraversalPolicyProvider(true);
+ panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+ Panel p = new Panel();
+ p.setLayout(new GridLayout(3, 1));
+ p.add(textField);
+ p.add(button);
+ p.add(panel);
+
+ frame.add(p);
+ frame.setVisible(true);
+ }
+
+ private static void checkFocusOwner(Component component) {
+ if (component != frame.getFocusOwner()) {
+ throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+ ", but expected: " + component);
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/SwingFocusTransitionTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile SwingFocusTransitionTest.java
+ * @run main/othervm SwingFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class SwingFocusTransitionTest {
+ private static SunToolkit toolkit;
+ private static Robot robot;
+
+ private static JFrame frame;
+ private static JTextField textField;
+ private static JButton button;
+
+ public static void main(String[] args) throws Exception {
+ toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+ robot = new Robot();
+ robot.setAutoDelay(50);
+
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ toolkit.realSync();
+
+ checkFocusOwner(textField);
+
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ toolkit.realSync();
+
+ checkFocusOwner(button);
+
+ robot.keyPress(KeyEvent.VK_SHIFT);
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_SHIFT);
+ toolkit.realSync();
+
+ checkFocusOwner(textField);
+
+ robot.keyPress(KeyEvent.VK_SHIFT);
+ robot.keyPress(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_TAB);
+ robot.keyRelease(KeyEvent.VK_SHIFT);
+ toolkit.realSync();
+
+ checkFocusOwner(button);
+ } finally {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ if (frame != null) {
+ frame.dispose();
+ }
+ }
+ });
+ }
+ System.out.println("Test Passed!");
+ }
+
+ private static void createAndShowGUI() {
+ frame = new JFrame("SwingFocusTransitionTest");
+ frame.setSize(300, 300);
+ frame.setFocusTraversalPolicyProvider(true);
+ frame.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
+
+ textField = new JTextField();
+ button = new JButton();
+
+ JPanel panel = new JPanel();
+ panel.setFocusTraversalPolicyProvider(true);
+ panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+ JPanel p = new JPanel();
+ p.setLayout(new GridLayout(3, 1));
+ p.add(textField);
+ p.add(button);
+ p.add(panel);
+
+ frame.add(p);
+ frame.setVisible(true);
+ }
+
+ private static void checkFocusOwner(final Component component) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ if (component != frame.getFocusOwner()) {
+ throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+ ", but expected: " + component);
+ }
+ }
+ });
+ }
+}
+
--- a/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. 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
@@ -25,6 +25,16 @@
* @test
* @bug 6652929
* @summary verify handling of File.getPath()
+ * @compile FontFile.java
+ * @run shell TestFontFile.sh
+ */
+
+/*
+ * When using jtreg this test needs to be run by shell script,
+ * since otherwise jtreg reflectively invokes the main method
+ * and the codebase for the purposes of the security manager
+ * is that of the jtreg harness, not the codebase (class file location)
+ * of this program, thus access to read to that location is not available.
*/
import java.awt.*;
@@ -34,10 +44,21 @@
public static void main(String[] args) throws Exception {
String sep = System.getProperty("file.separator");
String fname = ".." + sep + "A.ttf";
- String dir = System.getProperty("test.src");
+ //String dir = System.getProperty("test.src");
+ String dir = System.getenv("TESTSRC");
if (dir != null) {
fname = dir + sep + fname;
}
+ //String classesDir = System.getProperty("test.classes");
+ String classesDir = System.getenv("TESTCLASSES");
+ System.out.println("classesDir="+classesDir);
+ String testfile = "somefile";
+ if (classesDir != null) {
+ testfile = classesDir + sep + testfile;
+ }
+ final String somefile = testfile;
+ System.out.println("somefile="+somefile);
+ System.out.println("userdir="+System.getProperty("user.dir"));
final String name = fname;
System.out.println("Will try to access " + name);
if (!(new File(name)).canRead()) {
@@ -66,7 +87,7 @@
return name;
} else {
read = true;
- return "somefile";
+ return somefile;
}
}
@Override public boolean canRead() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/TestFontFile.sh Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#!/bin/sh
+
+if [ "${TESTSRC}" = "" ]
+then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+ PARENT=`dirname \`which java\``
+ TESTJAVA=`dirname ${PARENT}`
+ echo "TESTJAVA not set, selecting " ${TESTJAVA}
+ echo "If this is incorrect, try setting the variable manually."
+fi
+
+if [ "${TESTCLASSES}" = "" ]
+then
+ echo "TESTCLASSES not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+BIT_FLAG=""
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux | Darwin )
+ NULL=/dev/null
+ PS=":"
+ FS="/"
+ ## for solaris, linux it's HOME
+ FILE_LOCATION=$HOME
+ if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
+ then
+ BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT`
+ fi
+ ;;
+ Windows_* | CYGWIN* )
+ NULL=NUL
+ PS=";"
+ FS="\\"
+ ;;
+ * )
+ echo "Unrecognized system!"
+ exit 1;
+ ;;
+esac
+
+JEMMYPATH=${CPAPPEND}
+CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
+
+THIS_DIR=`pwd`
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} FontFile > test.out 2>&1
+
+STATUS=$?
+
+cat test.out
+
+exit $STATUS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/DebugFonts.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4956241 80769790
+ * @summary NPE debugging fonts
+ * @run main/othervm DebugFonts
+ */
+
+import java.awt.Font;
+
+public class DebugFonts {
+
+ public static void main(String [] args) {
+ System.setProperty("sun.java2d.debugfonts", "true");
+ Font font = new Font("dialog", Font.PLAIN, 14);
+ System.out.println(font);
+ String s1 = font.getFamily();
+ String s2 = font.getFontName();
+ }
+}
--- a/jdk/test/java/awt/FontClass/HeadlessFont.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/FontClass/HeadlessFont.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -224,11 +224,6 @@
f2.hasUniformLineMetrics();
f3.hasUniformLineMetrics();
f4.hasUniformLineMetrics();
-
- f1.getPeer();
- f2.getPeer();
- f3.getPeer();
- f4.getPeer();
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Graphics2D/ScaledTransform/ScaledTransform.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.Panel;
+import java.awt.geom.AffineTransform;
+
+/*
+ * @test
+ * @bug 8069361
+ * @summary SunGraphics2D.getDefaultTransform() does not include scale factor
+ * @author Alexander Scherbatiy
+ * @run main ScaledTransform
+ */
+public class ScaledTransform {
+
+ private static volatile boolean passed = false;
+
+ public static void main(String[] args) {
+ GraphicsEnvironment ge = GraphicsEnvironment.
+ getLocalGraphicsEnvironment();
+
+ if (ge.isHeadlessInstance()) {
+ return;
+ }
+
+ for (GraphicsDevice gd : ge.getScreenDevices()) {
+ for (GraphicsConfiguration gc : gd.getConfigurations()) {
+ testScaleFactor(gc);
+ }
+ }
+ }
+
+ private static void testScaleFactor(final GraphicsConfiguration gc) {
+ final Dialog dialog = new Dialog((Frame) null, "Test", true, gc);
+
+ try {
+ dialog.setSize(100, 100);
+ Panel panel = new Panel() {
+
+ @Override
+ public void paint(Graphics g) {
+ if (g instanceof Graphics2D) {
+ AffineTransform gcTx = gc.getDefaultTransform();
+ AffineTransform gTx
+ = ((Graphics2D) g).getTransform();
+ passed = gcTx.getScaleX() == gTx.getScaleX()
+ && gcTx.getScaleY() == gTx.getScaleY();
+ } else {
+ passed = true;
+ }
+ dialog.setVisible(false);
+ }
+ };
+ dialog.add(panel);
+ dialog.setVisible(true);
+
+ if (!passed) {
+ throw new RuntimeException("Transform is not scaled!");
+ }
+ } finally {
+ dialog.dispose();
+ }
+ }
+}
--- a/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. 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
@@ -29,6 +29,8 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
import javax.swing.*;
+
+import sun.awt.AWTAccessor;
import sun.awt.EmbeddedFrame;
import java.io.*;
import test.java.awt.regtesthelpers.Util;
@@ -243,8 +245,9 @@
if (Toolkit.getDefaultToolkit().getClass().getName().contains("XToolkit")) {
getWindowMethodName = "getWindow";
}
- ComponentPeer peer = embedder.getPeer();
-// System.err.println("Peer: " + peer);
+ ComponentPeer peer = AWTAccessor.getComponentAccessor()
+ .getPeer(embedder);
+ // System.err.println("Peer: " + peer);
Method getWindowMethod = peer.getClass().getMethod(getWindowMethodName);
frameWindow = (Long) getWindowMethod.invoke(peer);
// System.err.println("frame peer ID: " + frameWindow);
--- a/jdk/test/java/awt/Paint/ButtonRepaint.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/ButtonRepaint.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -23,7 +23,6 @@
import java.awt.*;
-import java.awt.peer.ButtonPeer;
/**
* @test
@@ -66,23 +65,16 @@
setLabel("");
setLabel(null);
setLabel(getLabel());
- ((ButtonPeer) getPeer()).setLabel("");
- ((ButtonPeer) getPeer()).setLabel(null);
- ((ButtonPeer) getPeer()).setLabel(getLabel());
setFont(null);
setFont(getFont());
- getPeer().setFont(getFont());
setBackground(null);
setBackground(getBackground());
- getPeer().setBackground(getBackground());
setForeground(null);
setForeground(getForeground());
- getPeer().setForeground(getForeground());
setEnabled(isEnabled());
- getPeer().setEnabled(isEnabled());
}
}
--- a/jdk/test/java/awt/Paint/CheckboxRepaint.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/CheckboxRepaint.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -22,7 +22,6 @@
*/
import java.awt.*;
-import java.awt.peer.CheckboxPeer;
/**
* @test
@@ -63,31 +62,21 @@
void test() {
setState(getState());
- ((CheckboxPeer) getPeer()).setState(getState());
-
setCheckboxGroup(getCheckboxGroup());
- ((CheckboxPeer) getPeer()).setCheckboxGroup(getCheckboxGroup());
setLabel("");
setLabel(null);
setLabel(getLabel());
- ((CheckboxPeer) getPeer()).setLabel("");
- ((CheckboxPeer) getPeer()).setLabel(null);
- ((CheckboxPeer) getPeer()).setLabel(getLabel());
setFont(null);
setFont(getFont());
- getPeer().setFont(getFont());
setBackground(null);
setBackground(getBackground());
- getPeer().setBackground(getBackground());
setForeground(null);
setForeground(getForeground());
- getPeer().setForeground(getForeground());
setEnabled(isEnabled());
- getPeer().setEnabled(isEnabled());
}
}
--- a/jdk/test/java/awt/Paint/LabelRepaint.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/LabelRepaint.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
-import java.awt.peer.LabelPeer;
/**
* @test
@@ -66,28 +65,20 @@
void test() {
setAlignment(getAlignment());
- ((LabelPeer) getPeer()).setAlignment(getAlignment());
setText("");
setText(null);
setText(getText());
- ((LabelPeer) getPeer()).setText("");
- ((LabelPeer) getPeer()).setText(null);
- ((LabelPeer) getPeer()).setText(getText());
setFont(null);
setFont(getFont());
- getPeer().setFont(getFont());
setBackground(null);
setBackground(getBackground());
- getPeer().setBackground(getBackground());
setForeground(null);
setForeground(getForeground());
- getPeer().setForeground(getForeground());
setEnabled(isEnabled());
- getPeer().setEnabled(isEnabled());
}
}
--- a/jdk/test/java/awt/Paint/ListRepaint.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Paint/ListRepaint.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. 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
@@ -25,7 +25,6 @@
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.List;
-import java.awt.peer.ListPeer;
/**
* @test
@@ -71,21 +70,16 @@
void test() {
select(0);
- ((ListPeer) getPeer()).select(getSelectedIndex());
setFont(null);
setFont(getFont());
- getPeer().setFont(getFont());
setBackground(null);
setBackground(getBackground());
- getPeer().setBackground(getBackground());
setForeground(null);
setForeground(getForeground());
- getPeer().setForeground(getForeground());
setEnabled(isEnabled());
- getPeer().setEnabled(isEnabled());
}
}
--- a/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,7 +40,7 @@
/**
* @test
- * @bug 8043869 8075244
+ * @bug 8043869 8075244 8078082
* @author Alexander Scherbatiy
* @summary [macosx] java -splash does not honor 2x hi dpi notation for retina
* support
@@ -115,6 +115,7 @@
frame.setSize(100, 100);
String test = "123";
TextField textField = new TextField(test);
+ textField.selectAll();
frame.add(textField);
frame.setVisible(true);
robot.waitForIdle();
--- a/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. 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
@@ -42,6 +42,9 @@
import javax.swing.SwingUtilities;
import javax.swing.text.DefaultCaret;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
public class bug7129742 {
@@ -64,7 +67,8 @@
frame.setVisible(true);
try {
- Class XTextAreaPeerClzz = textArea.getPeer().getClass();
+ ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+ Class XTextAreaPeerClzz = acc.getPeer(textArea).getClass();
System.out.println(XTextAreaPeerClzz.getName());
if (!XTextAreaPeerClzz.getName().equals("sun.awt.X11.XTextAreaPeer")) {
fastreturn = true;
@@ -73,7 +77,7 @@
Field jtextField = XTextAreaPeerClzz.getDeclaredField("jtext");
jtextField.setAccessible(true);
- JTextArea jtext = (JTextArea)jtextField.get(textArea.getPeer());
+ JTextArea jtext = (JTextArea)jtextField.get(acc.getPeer(textArea));
caret = (DefaultCaret) jtext.getCaret();
textArea.requestFocusInWindow();
--- a/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java Wed Jul 05 20:33:55 2017 +0200
@@ -23,16 +23,13 @@
import java.awt.*;
+import java.awt.Frame;
import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
-import java.awt.peer.*;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
@@ -67,130 +64,6 @@
return super.isDynamicLayoutSet();
}
- @Override
- protected DesktopPeer createDesktopPeer(final Desktop target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected ButtonPeer createButton(final Button target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected TextFieldPeer createTextField(final TextField target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected LabelPeer createLabel(final Label target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ListPeer createList(final List target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected CheckboxPeer createCheckbox(final Checkbox target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected ScrollbarPeer createScrollbar(final Scrollbar target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected ScrollPanePeer createScrollPane(final ScrollPane target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected TextAreaPeer createTextArea(final TextArea target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected ChoicePeer createChoice(final Choice target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected FramePeer createFrame(final Frame target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected CanvasPeer createCanvas(final Canvas target) {
- return null;
- }
-
- @Override
- protected PanelPeer createPanel(final Panel target) {
- return null;
- }
-
- @Override
- protected WindowPeer createWindow(final Window target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected DialogPeer createDialog(final Dialog target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuBarPeer createMenuBar(final MenuBar target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuPeer createMenu(final Menu target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected PopupMenuPeer createPopupMenu(final PopupMenu target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuItemPeer createMenuItem(final MenuItem target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected FileDialogPeer createFileDialog(final FileDialog target)
- throws HeadlessException {
- return null;
- }
-
- @Override
- protected CheckboxMenuItemPeer createCheckboxMenuItem(
- final CheckboxMenuItem target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected FontPeer getFontPeer(final String name, final int style) {
- return null;
- }
@Override
public Dimension getScreenSize() throws HeadlessException {
@@ -288,12 +161,6 @@
}
@Override
- public DragSourceContextPeer createDragSourceContextPeer(
- final DragGestureEvent dge) throws InvalidDnDOperationException {
- return null;
- }
-
- @Override
public boolean isModalityTypeSupported(
final Dialog.ModalityType modalityType) {
return false;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Toolkit/GetImage/bug8078165.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.awt.*;
+import java.net.URL;
+import java.security.Permission;
+
+
+/**
+ * @test
+ * @bug 8078165
+ * @summary NPE when attempting to get image from toolkit
+ * @author Anton Nashatyrev
+ */
+public final class bug8078165 {
+
+ public static void main(final String[] args) throws Exception {
+ // Mac only
+ System.setSecurityManager(new SecurityManager() {
+ @Override
+ public void checkPermission(Permission permission) {
+ // Just allows everything
+ }
+ });
+ // The method shouldn't throw NPE
+ Toolkit.getDefaultToolkit().getImage(new URL("file://./dummyImage@2x.png"));
+ Toolkit.getDefaultToolkit().getImage("./dummyImage@2x.png");
+ }
+}
--- a/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java Wed Jul 05 20:33:55 2017 +0200
@@ -36,12 +36,9 @@
import test.java.awt.regtesthelpers.Sysout;
import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
import java.awt.image.*;
-import java.awt.peer.*;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
@@ -112,116 +109,6 @@
}
@Override
- protected DesktopPeer createDesktopPeer(Desktop target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ButtonPeer createButton(Button target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected TextFieldPeer createTextField(TextField target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected LabelPeer createLabel(Label target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ListPeer createList(List target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected CheckboxPeer createCheckbox(Checkbox target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ScrollbarPeer createScrollbar(Scrollbar target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ScrollPanePeer createScrollPane(ScrollPane target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected TextAreaPeer createTextArea(TextArea target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected ChoicePeer createChoice(Choice target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected FramePeer createFrame(Frame target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected CanvasPeer createCanvas(Canvas target) {
- return null;
- }
-
- @Override
- protected PanelPeer createPanel(Panel target) {
- return null;
- }
-
- @Override
- protected WindowPeer createWindow(Window target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected DialogPeer createDialog(Dialog target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuPeer createMenu(Menu target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected PopupMenuPeer createPopupMenu(PopupMenu target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected MenuItemPeer createMenuItem(MenuItem target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected FileDialogPeer createFileDialog(FileDialog target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) throws HeadlessException {
- return null;
- }
-
- @Override
- protected FontPeer getFontPeer(String name, int style) {
- return null;
- }
-
- @Override
public Dimension getScreenSize() throws HeadlessException {
return null;
}
@@ -312,11 +199,6 @@
}
@Override
- public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
- return null;
- }
-
- @Override
public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
return false;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.java2d.SunGraphics2D;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+import static java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
+
+/**
+ * @test
+ * @bug 8076106
+ * @author Hendrik Schreiber
+ * @summary [macosx] Drag image of TransferHandler does not honor
+ * MultiResolutionImage
+ * @run main MultiResolutionDragImageTest TEST_DRAG
+ */
+public class MultiResolutionDragImageTest {
+
+ private static final Color COLOR_1X = Color.BLUE;
+ private static final Color COLOR_2X = Color.RED;
+ private static JFrame frame;
+ private static JTextField field;
+ private static Point p;
+
+ public static void main(String[] args) throws Exception {
+
+ final String test = args[0];
+
+ switch (test) {
+ case "TEST_DRAG":
+ testDrag();
+ break;
+ default:
+ throw new RuntimeException("Unknown test: " + test);
+ }
+ }
+
+ private static void testDrag() throws Exception {
+
+
+ SwingUtilities.invokeAndWait(() -> {
+
+ frame = new JFrame();
+ field = new JTextField("Drag Me");
+ setupFrame(frame, field);
+ frame.setVisible(true);
+ });
+
+ final Robot robot = new Robot();
+ robot.setAutoDelay(500);
+ robot.setAutoWaitForIdle(true);
+ robot.waitForIdle();
+
+ // get mouse into position
+ SwingUtilities.invokeAndWait(() -> {
+
+ p = new Point(field.getWidth() / 2, field.getHeight() / 2);
+ SwingUtilities.convertPointToScreen(p, field);
+ });
+
+ robot.mouseMove(p.x, p.y);
+ // simulate dragging
+ robot.mousePress(BUTTON1_DOWN_MASK);
+ p.translate(10, 10);
+ robot.mouseMove(p.x, p.y);
+
+ p.translate(5, 5);
+ final Color color = robot.getPixelColor(p.x, p.y);
+ robot.mouseRelease(BUTTON1_DOWN_MASK);
+
+ SwingUtilities.invokeAndWait(frame::dispose);
+
+ final float scaleFactor = getScaleFactor();
+ final Color testColor = (1 < scaleFactor) ? COLOR_2X : COLOR_1X;
+
+ if (!similar(testColor, color)) {
+ throw new RuntimeException(
+ "TEST FAILED: Image with wrong resolution is used for drag image!");
+ }
+ System.out.println("TEST PASSED!");
+ }
+
+ private static void setupFrame(final JFrame frame, final JTextField field) {
+
+ frame.setBounds(0, 0, 50, 50);
+ frame.setLayout(new BorderLayout());
+ field.setDragEnabled(true);
+ final TransferHandler transferHandler = field.getTransferHandler();
+ transferHandler.setDragImage(createMultiResolutionImage());
+ frame.getContentPane().add(field, BorderLayout.CENTER);
+ }
+
+ private static boolean similar(Color c1, Color c2){
+ return similar(c1.getRed(), c2.getRed())
+ && similar(c1.getGreen(), c2.getGreen())
+ && similar(c1.getBlue(), c2.getBlue());
+ }
+
+ private static boolean similar(int n, int m){
+ return Math.abs(n - m) <= 50;
+ }
+
+ private static float getScaleFactor() {
+
+ final Dialog dialog = new Dialog((Window) null);
+ dialog.setSize(100, 100);
+ dialog.setModal(true);
+ final float[] scaleFactors = new float[1];
+ Panel panel = new Panel() {
+
+ @Override
+ public void paint(Graphics g) {
+ float scaleFactor = 1;
+ if (g instanceof SunGraphics2D) {
+ scaleFactor = ((SunGraphics2D) g).surfaceData.getDefaultScale();
+ }
+ scaleFactors[0] = scaleFactor;
+ dialog.setVisible(false);
+ }
+ };
+
+ dialog.add(panel);
+ dialog.setVisible(true);
+ dialog.dispose();
+
+ return scaleFactors[0];
+ }
+
+ private static Image createMultiResolutionImage() {
+
+ return new MultiResolutionToolkitImage(
+ createImage(50, COLOR_1X),
+ createImage(100, COLOR_2X)
+ );
+
+ }
+
+ private static Image createImage(final int length, final Color color) {
+
+ final BufferedImage image = new BufferedImage(length, length,
+ BufferedImage.TYPE_INT_ARGB_PRE);
+ final Graphics graphics = image.getGraphics();
+ graphics.setColor(color);
+ graphics.fillRect(0, 0, length, length);
+ graphics.dispose();
+ return image;
+ }
+}
\ No newline at end of file
--- a/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -74,7 +74,6 @@
new Point(100, 100),
Arrays.asList(me));
DragSourceContext dsc = new DragSourceContext(
- Toolkit.getDefaultToolkit().createDragSourceContextPeer(dge),
dge,
new Cursor(Cursor.HAND_CURSOR),
null, null, new StringSelection("TEXT"), null);
--- a/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java Wed Jul 05 20:33:55 2017 +0200
@@ -37,7 +37,7 @@
* @bug 8076419
* @summary Check Path2D copy constructor (trims arrays)
* and constructor with zero capacity
- * @run main Path2DTrimCopy
+ * @run main Path2DCopyConstructor
*/
public class Path2DCopyConstructor {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/geom/Path2D/Path2DGrow.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Path2D;
+
+/**
+ * @test
+ * @bug 8078464
+ * @summary Check the growth algorithm (needRoom) in Path2D implementations
+ * @run main Path2DGrow
+ */
+public class Path2DGrow {
+
+ public static final int N = 1000 * 1000;
+
+ public static boolean verbose = false;
+ public static boolean force = false;
+
+ static void echo(String msg) {
+ System.out.println(msg);
+ }
+
+ static void log(String msg) {
+ if (verbose || force) {
+ echo(msg);
+ }
+ }
+
+ public static void main(String argv[]) {
+ verbose = (argv.length != 0);
+
+ testEmptyDoublePaths();
+ testDoublePaths();
+
+ testEmptyFloatPaths();
+ testFloatPaths();
+
+ testEmptyGeneralPath();
+ testGeneralPath();
+ }
+
+ static void testEmptyDoublePaths() {
+ echo("\n - Test(Path2D.Double[0]) ---");
+ test(() -> new Path2D.Double(Path2D.WIND_NON_ZERO, 0));
+ }
+
+ static void testDoublePaths() {
+ echo("\n - Test(Path2D.Double) ---");
+ test(() -> new Path2D.Double());
+ }
+
+ static void testEmptyFloatPaths() {
+ echo("\n - Test(Path2D.Float[0]) ---");
+ test(() -> new Path2D.Float(Path2D.WIND_NON_ZERO, 0));
+ }
+
+ static void testFloatPaths() {
+ echo("\n - Test(Path2D.Float) ---");
+ test(() -> new Path2D.Float());
+ }
+
+ static void testEmptyGeneralPath() {
+ echo("\n - Test(GeneralPath[0]) ---");
+ test(() -> new GeneralPath(Path2D.WIND_NON_ZERO, 0));
+ }
+
+ static void testGeneralPath() {
+ echo("\n - Test(GeneralPath) ---");
+ test(() -> new GeneralPath());
+ }
+
+ interface PathFactory {
+ Path2D makePath();
+ }
+
+ static void test(PathFactory pf) {
+ long start, end;
+
+ for (int n = 1; n <= N; n *= 10) {
+ force = (n == N);
+
+ start = System.nanoTime();
+ testAddMoves(pf.makePath(), n);
+ end = System.nanoTime();
+ log("testAddMoves[" + n + "] duration= "
+ + (1e-6 * (end - start)) + " ms.");
+
+ start = System.nanoTime();
+ testAddLines(pf.makePath(), n);
+ end = System.nanoTime();
+ log("testAddLines[" + n + "] duration= "
+ + (1e-6 * (end - start)) + " ms.");
+
+ start = System.nanoTime();
+ testAddQuads(pf.makePath(), n);
+ end = System.nanoTime();
+ log("testAddQuads[" + n + "] duration= "
+ + (1e-6 * (end - start)) + " ms.");
+
+ start = System.nanoTime();
+ testAddCubics(pf.makePath(), n);
+ end = System.nanoTime();
+ log("testAddCubics[" + n + "] duration= "
+ + (1e-6 * (end - start)) + " ms.");
+
+ start = System.nanoTime();
+ testAddMoveAndCloses(pf.makePath(), n);
+ end = System.nanoTime();
+ log("testAddMoveAndCloses[" + n + "] duration= "
+ + (1e-6 * (end - start)) + " ms.");
+ }
+ }
+
+ static void addMove(Path2D p2d, int i) {
+ p2d.moveTo(1.0 * i, 0.5 * i);
+ }
+
+ static void addLine(Path2D p2d, int i) {
+ p2d.lineTo(1.1 * i, 2.3 * i);
+ }
+
+ static void addCubic(Path2D p2d, int i) {
+ p2d.curveTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i, 1.5 * i, 1.6 * i);
+ }
+
+ static void addQuad(Path2D p2d, int i) {
+ p2d.quadTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i);
+ }
+
+ static void addClose(Path2D p2d) {
+ p2d.closePath();
+ }
+
+ static void testAddMoves(Path2D pathA, int n) {
+ for (int i = 0; i < n; i++) {
+ addMove(pathA, i);
+ }
+ }
+
+ static void testAddLines(Path2D pathA, int n) {
+ addMove(pathA, 0);
+ for (int i = 0; i < n; i++) {
+ addLine(pathA, i);
+ }
+ }
+
+ static void testAddQuads(Path2D pathA, int n) {
+ addMove(pathA, 0);
+ for (int i = 0; i < n; i++) {
+ addQuad(pathA, i);
+ }
+ }
+
+ static void testAddCubics(Path2D pathA, int n) {
+ addMove(pathA, 0);
+ for (int i = 0; i < n; i++) {
+ addCubic(pathA, i);
+ }
+ }
+
+ static void testAddMoveAndCloses(Path2D pathA, int n) {
+ for (int i = 0; i < n; i++) {
+ addMove(pathA, i);
+ addClose(pathA);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/PageFormat/ImageableAreaTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dialog;
+import java.awt.FlowLayout;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.text.MessageFormat;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.DialogTypeSelection;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+/**
+ * @test
+ * @bug 8044444
+ * @summary The output's 'Page-n' footer does not show completely
+ * @author Alexandr Scherbatiy
+ * @run main/manual ImageableAreaTest
+ */
+public class ImageableAreaTest {
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+
+ createAndShowTestDialog(
+ "1. Press the Print Table button\n"
+ + " Java print dialog should appear.\n"
+ + "2. Press the Print button on the Java Print dialog.\n"
+ + "2. Check that the page number is correctly printed.\n"
+ + "If so, press PASS, else press FAIL.",
+ "Page number is not correctly printed!",
+ ImageableAreaTest::printWithJavaPrintDialog);
+
+ createAndShowTestDialog(
+ "1. Press the Print Table button\n"
+ + " The table should be printed without the print dialog.\n"
+ + "2. Check that the page number is correctly printed.\n"
+ + "If so, press PASS, else press FAIL.",
+ "Page number is not correctly printed!",
+ ImageableAreaTest::printWithoutPrintDialog);
+
+ createAndShowTestDialog(
+ "1. Press the Print Table button\n"
+ + " Java print dialog should appear.\n"
+ + "2. Press the Print button on the Java Print dialog.\n"
+ + "3. Check that the table has about half size of the printed page\n"
+ + "If so, press PASS, else press FAIL.",
+ "Custom imageable area is not correctly printed!",
+ ImageableAreaTest::printWithCustomImageareaSize);
+ }
+ });
+ }
+
+ private static void printWithJavaPrintDialog() {
+ final JTable table = createAuthorTable(42);
+ Printable printable = table.getPrintable(
+ JTable.PrintMode.NORMAL,
+ new MessageFormat("Author Table"),
+ new MessageFormat("Page - {0}"));
+
+ PrinterJob job = PrinterJob.getPrinterJob();
+ job.setPrintable(printable);
+
+ boolean printAccepted = job.printDialog();
+ if (printAccepted) {
+ try {
+ job.print();
+ closeFrame();
+ } catch (PrinterException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ private static void printWithoutPrintDialog() {
+
+ final JTable table = createAuthorTable(42);
+ PrintRequestAttributeSet pras
+ = new HashPrintRequestAttributeSet();
+ pras.add(new Copies(1));
+
+ try {
+
+ boolean printAccepted = table.print(JTable.PrintMode.FIT_WIDTH,
+ new MessageFormat("Author Table"),
+ new MessageFormat("Page - {0}"),
+ false, pras, false);
+
+ closeFrame();
+ if (!printAccepted) {
+ throw new RuntimeException("User cancels the printer job!");
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static void printWithCustomImageareaSize() {
+ final JTable table = createAuthorTable(18);
+ PrintRequestAttributeSet printAttributes = new HashPrintRequestAttributeSet();
+ printAttributes.add(DialogTypeSelection.NATIVE);
+ printAttributes.add(new Copies(1));
+ printAttributes.add(new MediaPrintableArea(
+ 0.25f, 0.25f, 8.0f, 5.0f, MediaPrintableArea.INCH));
+ Printable printable = table.getPrintable(
+ JTable.PrintMode.NORMAL,
+ new MessageFormat("Author Table"),
+ new MessageFormat("Page - {0}")
+ );
+
+ PrinterJob job = PrinterJob.getPrinterJob();
+ job.setPrintable(printable);
+
+ boolean printAccepted = job.printDialog(printAttributes);
+ if (printAccepted) {
+ try {
+ job.print(printAttributes);
+ closeFrame();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ throw new RuntimeException("User cancels the printer job!");
+ }
+ }
+
+ private static JFrame frame;
+
+ private static void closeFrame() {
+ if (frame != null) {
+ frame.setVisible(false);
+ frame.dispose();
+ }
+ }
+
+ private static JTable createAuthorTable(int rows) {
+ final String[] headers = {"Book", "Title"};
+
+ final Object[][] data = new Object[rows][2];
+ for (int i = 0; i < rows; i++) {
+ int n = i + 1;
+ data[i] = new Object[]{"Book: " + n, "Title: " + n};
+ }
+
+ TableModel dataModel = new AbstractTableModel() {
+
+ public int getColumnCount() {
+ return headers.length;
+ }
+
+ public int getRowCount() {
+ return data.length;
+ }
+
+ public Object getValueAt(int row, int col) {
+ return data[row][col];
+ }
+
+ public String getColumnName(int column) {
+ return headers[column];
+ }
+
+ public Class getColumnClass(int col) {
+ return getValueAt(0, col).getClass();
+ }
+
+ public void setValueAt(Object aValue, int row, int column) {
+ data[row][column] = aValue;
+ }
+
+ public boolean isCellEditable(int row, int col) {
+ return false;
+ }
+ };
+
+ JTable table = new JTable(dataModel);
+ table.setGridColor(Color.BLUE);
+ table.setBackground(Color.WHITE);
+ table.setForeground(Color.BLACK);
+ table.setSize(600, 800);
+
+ frame = new JFrame();
+ frame.setSize(400, 600);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.add(table);
+ frame.setVisible(true);
+ return table;
+ }
+
+ private static int testCount;
+
+ private static void createAndShowTestDialog(String description,
+ String failMessage, Runnable action) {
+ final JDialog dialog = new JDialog();
+ dialog.setTitle("Test: " + (++testCount));
+ dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
+ JTextArea textArea = new JTextArea(description);
+ textArea.setEditable(false);
+ final JButton testButton = new JButton("Print Table");
+ final JButton passButton = new JButton("PASS");
+ passButton.setEnabled(false);
+ passButton.addActionListener((e) -> {
+ dialog.dispose();
+ });
+ final JButton failButton = new JButton("FAIL");
+ failButton.setEnabled(false);
+ failButton.addActionListener((e) -> {
+ throw new RuntimeException(failMessage);
+ });
+ testButton.addActionListener((e) -> {
+ testButton.setEnabled(false);
+ action.run();
+ passButton.setEnabled(true);
+ failButton.setEnabled(true);
+ });
+ JPanel mainPanel = new JPanel(new BorderLayout());
+ mainPanel.add(textArea, BorderLayout.CENTER);
+ JPanel buttonPanel = new JPanel(new FlowLayout());
+ buttonPanel.add(testButton);
+ buttonPanel.add(passButton);
+ buttonPanel.add(failButton);
+ mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+ dialog.add(mainPanel);
+ dialog.pack();
+ dialog.setVisible(true);
+ }
+}
--- a/jdk/test/java/awt/regtesthelpers/UtilInternal.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/awt/regtesthelpers/UtilInternal.java Wed Jul 05 20:33:55 2017 +0200
@@ -31,6 +31,7 @@
import java.awt.Toolkit;
import java.awt.Frame;
+import sun.awt.AWTAccessor;
/**
@@ -45,7 +46,8 @@
InstantiationException, InvocationTargetException
{
Toolkit tk = Toolkit.getDefaultToolkit();
- FramePeer frame_peer = (FramePeer) embedder.getPeer();
+ FramePeer frame_peer = AWTAccessor.getComponentAccessor()
+ .getPeer(embedder);
System.out.println("frame's peer = " + frame_peer);
if ("sun.awt.windows.WToolkit".equals(tk.getClass().getName())) {
Class comp_peer_class =
--- a/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. 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
@@ -20,11 +20,13 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
import java.awt.event.ActionListener;
import java.beans.BeanDescriptor;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.JavaBean;
+
/*
* @test
* @bug 4058433
@@ -32,53 +34,63 @@
* @author Sergey Malenkov
*/
public class TestJavaBean {
- public static void main(String[] args) throws Exception {
- test(X.class);
- test(D.class);
- test(DP.class);
- test(DES.class);
+
+ static final String DSCR = "description";
+ static final String PRP = "value";
+ static final String ACT = "action";
+
+ public static void main(final String[] args) throws Exception {
+ test(X.class, "TestJavaBean$X", "TestJavaBean$X", null, null);
+ test(D.class, "TestJavaBean$D", DSCR, null, null);
+ test(DP.class, "TestJavaBean$DP", "TestJavaBean$DP", PRP, null);
+ test(DES.class, "TestJavaBean$DES", "TestJavaBean$DES", null, ACT);
+ test(DDP.class, "TestJavaBean$DDP", DSCR, PRP, null);
+ test(DDES.class, "TestJavaBean$DDES", DSCR, null, ACT);
+ test(DPDES.class, "TestJavaBean$DPDES", "TestJavaBean$DPDES", PRP, ACT);
+ test(DDPDES.class, "TestJavaBean$DDPDES", DSCR, PRP, ACT);
}
- private static void test(Class<?> type) throws Exception {
- System.out.println(type);
+ private static void test(Class<?> type, String name, String descr,
+ String prop, String event) throws Exception {
BeanInfo info = Introspector.getBeanInfo(type);
BeanDescriptor bd = info.getBeanDescriptor();
- String description = bd.getShortDescription();
- System.out.println("description = " + description);
+ if (!bd.getName().equals(name)) {
+ throw new Error("unexpected name of the bean");
+ }
+
+ if (!bd.getShortDescription().equals(descr)) {
+ throw new Error("unexpected description of the bean");
+ }
int dp = info.getDefaultPropertyIndex();
- System.out.println("property index = " + dp);
- if (0 <= dp) {
- String name = info.getPropertyDescriptors()[dp].getName();
- System.out.println("property name = " + name);
+ if (dp < 0 && prop != null) {
+ throw new Error("unexpected index of the default property");
+ }
+ if (dp >= 0) {
+ if (!info.getPropertyDescriptors()[dp].getName().equals(prop)) {
+ throw new Error("unexpected default property");
+ }
}
int des = info.getDefaultEventIndex();
- System.out.println("event set index = " + des);
- if (0 <= des) {
- String name = info.getPropertyDescriptors()[des].getName();
- System.out.println("event set name = " + name);
+ if (des < 0 && event != null) {
+ throw new Error("unexpected index of the default event set");
}
-
- if ((D.class == type) == bd.getName().equals(description)) {
- throw new Error("unexpected description of the bean");
- }
- if ((DP.class == type) == (dp < 0)) {
- throw new Error("unexpected index of the default property");
- }
- if ((DES.class == type) == (des < 0)) {
- throw new Error("unexpected index of the default event set");
+ if (des >= 0) {
+ if (!info.getEventSetDescriptors()[des].getName().equals(event)) {
+ throw new Error("unexpected default event set");
+ }
}
}
public static class X {
}
- @JavaBean(description = "description")
+ @JavaBean(description = DSCR)
public static class D {
}
- @JavaBean(defaultProperty = "value")
+ @JavaBean(defaultProperty = PRP)
public static class DP {
private int value;
@@ -91,7 +103,7 @@
}
}
- @JavaBean(defaultEventSet = "action")
+ @JavaBean(defaultEventSet = ACT)
public static class DES {
public void addActionListener(ActionListener listener) {
}
@@ -99,4 +111,64 @@
public void removeActionListener(ActionListener listener) {
}
}
+
+ @JavaBean(description = DSCR, defaultProperty = PRP)
+ public static class DDP {
+ private int value;
+
+ public int getValue() {
+ return this.value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+ }
+
+ @JavaBean(description = DSCR, defaultEventSet = ACT)
+ public static class DDES {
+ public void addActionListener(ActionListener listener) {
+ }
+
+ public void removeActionListener(ActionListener listener) {
+ }
+ }
+
+ @JavaBean(defaultProperty = PRP, defaultEventSet = ACT)
+ public static class DPDES {
+ private int value;
+
+ public int getValue() {
+ return this.value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public void addActionListener(ActionListener listener) {
+ }
+
+ public void removeActionListener(ActionListener listener) {
+ }
+ }
+
+ @JavaBean(description = DSCR, defaultProperty = PRP, defaultEventSet = ACT)
+ public static class DDPDES {
+ private int value;
+
+ public int getValue() {
+ return this.value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public void addActionListener(ActionListener listener) {
+ }
+
+ public void removeActionListener(ActionListener listener) {
+ }
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Reader/ReaderBulkReadContract.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.CharArrayReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.PipedReader;
+import java.io.PipedWriter;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.UncheckedIOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+
+import static java.lang.String.format;
+
+/*
+ * @test
+ * @bug 8029689
+ * @summary checks the bounds part of the contract of java.io.Reader.read(char[], int, int):
+ *
+ * 0 <= off <= off+len <= cbuf.length
+ *
+ * for publicly exported subtypes of java.io.Reader
+ */
+public class ReaderBulkReadContract {
+
+ public static void main(String[] args) throws IOException {
+ ReaderBulkReadContract t = new ReaderBulkReadContract();
+ t.test();
+ }
+
+ private void test() throws IOException {
+ Iterator<Object[]> args = args();
+ while (args.hasNext()) {
+ Object[] a = args.next();
+ Reader r = (Reader) a[0];
+ int size = (int) a[1];
+ int off = (int) a[2];
+ int len = (int) a[3];
+ try {
+ read(r, size, off, len);
+ } finally {
+ r.close();
+ }
+ }
+ }
+
+ private Iterator<Object[]> args() {
+
+ Integer[] lens = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+ Integer[] offs = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+ Integer[] sizes = {0, 1, 2, 3, 4, 5};
+ String[] contents = {"", "a", "ab"};
+
+ List<Function<String, Reader>> fs = Arrays.asList(
+ (String s) -> new BufferedReader(new StringReader(s)),
+ (String s) -> new LineNumberReader(new StringReader(s)),
+ (String s) -> new CharArrayReader(s.toCharArray()),
+ (String s) -> new InputStreamReader(new ByteArrayInputStream(s.getBytes())),
+ (String s) -> newFileReader(s),
+ (String s) -> new PushbackReader(new StringReader(s)),
+ (String s) -> newPipedReader(s),
+ (String s) -> new StringReader(s)
+ );
+
+ // The easiest way to produce a cartesian product from a small fixed number of sets
+ List<Object[]> tuples = Collections.synchronizedList(new LinkedList<>());
+ for (Integer len : lens)
+ for (Integer off : offs)
+ for (String s : contents)
+ for (Integer size : sizes)
+ for (Function<String, Reader> f : fs)
+ tuples.add(new Object[]{f.apply(s), size, off, len});
+
+ return tuples.iterator();
+ }
+
+ private void read(Reader r, int size, int off, int len) throws IOException {
+ IndexOutOfBoundsException ex = null;
+ try {
+ r.read(new char[size], off, len);
+ } catch (IndexOutOfBoundsException e) {
+ ex = e;
+ }
+
+ boolean incorrectBounds = off < 0 || len < 0 || len > size - off;
+ boolean exceptionThrown = ex != null;
+
+ if (incorrectBounds != exceptionThrown) { // incorrectBounds iff exceptionThrown
+ throw new AssertionError(format("r=%s, size=%s, off=%s, len=%s, incorrectBounds=%s, exceptionThrown=%s",
+ r, size, off, len, incorrectBounds, exceptionThrown));
+ }
+ }
+
+ private static PipedReader newPipedReader(String contents) {
+ try (PipedWriter w = new PipedWriter()) {
+ PipedReader r = new PipedReader(w);
+ w.write(contents);
+ return r;
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ private FileReader newFileReader(String contents) {
+ try {
+ // To not create an enormous amount of files
+ File f = cache.computeIfAbsent(contents,
+ ReaderBulkReadContract::createTempFileWithContents);
+ return new FileReader(f);
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ private static File createTempFileWithContents(String contents) {
+ try {
+ File file = File.createTempFile("ReaderContract", "");
+ try (FileWriter w = new FileWriter(file)) {
+ w.write(contents);
+ }
+ return file;
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ //
+ // To avoid myriads of tiny files a cache is used.
+ // ConcurrentHashMap.computeIfAbsent promises a crucial thing:
+ //
+ // ...The entire method invocation is performed atomically, so the
+ // function is applied at most once per key...
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ //
+ private final ConcurrentHashMap<String, File> cache = new ConcurrentHashMap<>();
+}
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
* @key randomness
*/
+import jdk.testlibrary.RandomFactory;
+
public class ParseHexFloatingPoint {
private ParseHexFloatingPoint(){}
--- a/jdk/test/java/lang/Integer/BitTwiddle.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
*/
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
import static java.lang.Integer.*;
public class BitTwiddle {
--- a/jdk/test/java/lang/Long/BitTwiddle.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Long/BitTwiddle.java Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
*/
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
import static java.lang.Long.*;
public class BitTwiddle {
--- a/jdk/test/java/lang/Math/CubeRootTests.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/CubeRootTests.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
* @key randomness
*/
+import jdk.testlibrary.RandomFactory;
+
public class CubeRootTests {
private CubeRootTests(){}
--- a/jdk/test/java/lang/Math/HypotTests.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/HypotTests.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
* @key randomness
*/
+import jdk.testlibrary.RandomFactory;
+
public class HypotTests {
private HypotTests(){}
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
* @key randomness
*/
+import jdk.testlibrary.RandomFactory;
+
public class IeeeRecommendedTests {
private IeeeRecommendedTests(){}
--- a/jdk/test/java/lang/Math/Log1pTests.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/Math/Log1pTests.java Wed Jul 05 20:33:55 2017 +0200
@@ -32,6 +32,8 @@
* @key randomness
*/
+import jdk.testlibrary.RandomFactory;
+
public class Log1pTests {
private Log1pTests(){}
--- a/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. 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
@@ -67,6 +67,7 @@
expected.add("com.sun.security.sasl.Provider");
expected.add("org.jcp.xml.dsig.internal.dom.XMLDSigRI");
expected.add("sun.security.smartcardio.SunPCSC");
+ expected.add("sun.security.provider.certpath.ldap.JdkLDAP");
if (os.startsWith("Windows")) {
expected.add("sun.security.mscapi.SunMSCAPI");
}
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java Wed Jul 05 20:33:55 2017 +0200
@@ -33,6 +33,7 @@
import java.math.*;
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
public class StringConstructor {
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
/**
* This is a simple test class created to ensure that the results
--- a/jdk/test/java/math/BigInteger/ModPow65537.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java Wed Jul 05 20:33:55 2017 +0200
@@ -37,6 +37,7 @@
import java.security.*;
import java.security.spec.*;
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
public class ModPow65537 {
--- a/jdk/test/java/math/BigInteger/PrimeTest.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
import java.util.Set;
import java.util.SplittableRandom;
import java.util.TreeSet;
+import jdk.testlibrary.RandomFactory;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
--- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
import java.util.Arrays;
import java.math.BigInteger;
import java.util.Random;
+import jdk.testlibrary.RandomFactory;
public class SymmetricRangeTests {
--- a/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java Wed Jul 05 20:33:55 2017 +0200
@@ -97,7 +97,7 @@
// no datagram received
if (sa == null) {
if (datagramExepcted) {
- throw new RuntimeException("Expected message not recieved");
+ throw new RuntimeException("Expected message not received");
}
System.out.println("No message received (correct)");
return;
@@ -109,10 +109,15 @@
buf.flip();
byte[] bytes = new byte[buf.remaining()];
buf.get(bytes);
- int receivedId = Integer.parseInt(new String(bytes));
-
- System.out.format("Received message from %s (id=0x%x)\n",
- sender, receivedId);
+ String s = new String(bytes, "UTF-8");
+ int receivedId = -1;
+ try {
+ receivedId = Integer.parseInt(s);
+ System.out.format("Received message from %s (id=0x%x)\n",
+ sender, receivedId);
+ } catch (NumberFormatException x) {
+ System.out.format("Received message from %s (msg=%s)\n", sender, s);
+ }
if (!datagramExepcted) {
if (receivedId == id)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/CustomPolicy.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.AccessController;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+
+public class CustomPolicy extends Policy {
+
+ // the ProtectionDomain of CustomPolicy
+ private final ProtectionDomain policyPd;
+
+ public CustomPolicy() {
+ policyPd = AccessController.doPrivileged(
+ (PrivilegedAction<ProtectionDomain>)
+ () -> this.getClass().getProtectionDomain());
+ }
+
+ @Override
+ public boolean implies(ProtectionDomain pd, Permission perm) {
+ System.out.println("CustomPolicy.implies");
+
+ // If the protection domain is the same as CustomPolicy, then
+ // we return true. This is to prevent recursive permission checks
+ // that lead to StackOverflow errors when the policy implementation
+ // performs a sensitive operation that triggers a permission check,
+ // for example, as below.
+ if (pd == policyPd) {
+ return true;
+ }
+
+ // Do something that triggers a permission check to make sure that
+ // we don't cause a StackOverflow error.
+ String home = AccessController.doPrivileged(
+ (PrivilegedAction<String>) () -> System.getProperty("user.home"));
+
+ return true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/UseSystemClassLoader.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.net.URL;
+import java.security.Policy;
+import java.security.Security;
+
+/*
+ * @test
+ * @bug 8075706
+ * @summary Check that a custom policy provider can be loaded from the classpath
+ * @run main/othervm UseSystemClassLoader CUSTOM
+ * @run main/othervm UseSystemClassLoader DEFAULT
+ * @run main/othervm UseSystemClassLoader NOT_AVAIL
+ * @run main/othervm UseSystemClassLoader NOT_SET
+ */
+
+public class UseSystemClassLoader {
+
+ enum Type {
+ CUSTOM, DEFAULT, NOT_AVAIL, NOT_SET
+ };
+
+ public static void main(String[] args) throws Exception {
+
+ Type t = Type.valueOf(args[0]);
+
+ // We can't use the jtreg java.security.policy option to specify
+ // the policy file because that causes the default JDK policy provider
+ // to be set and once set, we cannot change it. So, instead we use the
+ // policy.url security property.
+ File file = new File(System.getProperty("test.src"), "test.policy");
+ URL policyURL = file.toURI().toURL();
+ Security.setProperty("policy.url.1", policyURL.toString());
+
+ switch (t) {
+ case CUSTOM:
+ // Set policy.provider to our custom policy provider
+ Security.setProperty("policy.provider", "CustomPolicy");
+ break;
+ case NOT_AVAIL:
+ // Set policy.provider to a non-existent policy provider
+ Security.setProperty("policy.provider", "NonExistentPolicy");
+ break;
+ case DEFAULT:
+ // Don't set policy.provider (leave default)
+ break;
+ case NOT_SET:
+ // Set policy.provider to empty string
+ Security.setProperty("policy.provider", "");
+ break;
+ }
+
+ System.setSecurityManager(new SecurityManager());
+ Policy p = Policy.getPolicy();
+ switch (t) {
+ case CUSTOM:
+ // check that the custom policy provider has been set
+ if (!(p instanceof CustomPolicy)) {
+ throw new Exception("CustomPolicy was not set");
+ }
+ break;
+ case NOT_AVAIL:
+ case DEFAULT:
+ case NOT_SET:
+ // check that the default policy provider has been set
+ if (!(p instanceof sun.security.provider.PolicyFile)) {
+ throw new Exception("default provider was not set");
+ }
+ break;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/test.policy Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,9 @@
+grant {
+ permission java.lang.RuntimePermission "createSecurityManager";
+ permission java.lang.RuntimePermission "setSecurityManager";
+ permission java.security.SecurityPermission "setProperty.policy.provider";
+ permission java.security.SecurityPermission "getPolicy";
+ permission java.util.PropertyPermission "user.home", "read";
+ permission java.lang.RuntimePermission "getProtectionDomain";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.security.provider";
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/cert/URICertStoreParameters/TestBasic.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.cert.CertStore;
+import java.security.cert.URICertStoreParameters;
+import java.net.URI;
+
+/*
+ * @test
+ * @bug 8038084
+ * @summary Basic testing for URICertStoreParameters
+ * @run main TestBasic
+ */
+public class TestBasic {
+
+ public static void main(String[] args) throws Exception {
+ String str1 = "ldap://myownhost:5000/";
+ String str2 = "ldap://myownhost:5000/cn=foo";
+ test(str1, str2);
+ System.out.println("Test passed");
+ }
+
+ private static void test(String str1, String str2) throws Exception {
+ System.out.println("Testing clone");
+ URICertStoreParameters p1 = new URICertStoreParameters(new URI(str1));
+ URICertStoreParameters p1Too = p1.clone();
+ if (!(p1.getURI().equals(p1Too.getURI())) ||
+ !(p1.equals(p1Too))) {
+ throw new Exception("Error: problem with clone");
+ }
+ System.out.println("Testing equal and hashCode");
+ p1Too = new URICertStoreParameters(new URI(str1));
+ URICertStoreParameters p2 = new URICertStoreParameters(new URI(str2));
+
+ if (p1.equals(null)) {
+ throw new Exception("Error: p1 should NOT equal null");
+ }
+ if ((!p1.equals(p1)) || (p1.hashCode() != p1.hashCode())) {
+ throw new Exception("Error: p1 should equal p1");
+ }
+ if ((!p1.equals(p1Too)) || (p1.hashCode() != p1Too.hashCode())) {
+ throw new Exception("Error: p1 should equal p1Too");
+ }
+ if ((!p1Too.equals(p1)) || (p1Too.hashCode() != p1.hashCode())) {
+ throw new Exception("Error: p1Too should equal p1");
+ }
+ if (p1.equals(p2) || p1Too.equals(p2)) {
+ throw new Exception("Error: p1/p1Too should NOT equal p2");
+ }
+ }
+}
--- a/jdk/test/java/util/Map/Collisions.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/Map/Collisions.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. 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
@@ -198,138 +198,125 @@
}
private static <T> void testInsertion(Map<T, T> map, String keys_desc, T[] keys) {
- check("map empty", (map.size() == 0) && map.isEmpty());
+ check(map.size() == 0 && map.isEmpty(), "map empty");
for (int i = 0; i < keys.length; i++) {
- check(String.format("insertion: map expected size m%d != i%d", map.size(), i),
- map.size() == i);
- check(String.format("insertion: put(%s[%d])", keys_desc, i), null == map.put(keys[i], keys[i]));
- check(String.format("insertion: containsKey(%s[%d])", keys_desc, i), map.containsKey(keys[i]));
- check(String.format("insertion: containsValue(%s[%d])", keys_desc, i), map.containsValue(keys[i]));
+ check(map.size() == i, "insertion: map expected size m%d != i%d", map.size(), i);
+ check(null == map.put(keys[i], keys[i]), "insertion: put(%s[%d])", keys_desc, i);
+ check(map.containsKey(keys[i]), "insertion: containsKey(%s[%d])", keys_desc, i);
+ check(map.containsValue(keys[i]), "insertion: containsValue(%s[%d])", keys_desc, i);
}
- check(String.format("map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
}
private static void testIntegerIteration(Map<HashableInteger, HashableInteger> map, HashableInteger[] keys) {
- check(String.format("map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
BitSet all = new BitSet(keys.length);
for (Map.Entry<HashableInteger, HashableInteger> each : map.entrySet()) {
- check("Iteration: key already seen", !all.get(each.getKey().value));
+ check(!all.get(each.getKey().value), "Iteration: key already seen");
all.set(each.getKey().value);
}
all.flip(0, keys.length);
- check("Iteration: some keys not visited", all.isEmpty());
+ check(all.isEmpty(), "Iteration: some keys not visited");
for (HashableInteger each : map.keySet()) {
- check("Iteration: key already seen", !all.get(each.value));
+ check(!all.get(each.value), "Iteration: key already seen");
all.set(each.value);
}
all.flip(0, keys.length);
- check("Iteration: some keys not visited", all.isEmpty());
+ check(all.isEmpty(), "Iteration: some keys not visited");
int count = 0;
for (HashableInteger each : map.values()) {
count++;
}
- check(String.format("Iteration: value count matches size m%d != c%d", map.size(), count),
- map.size() == count);
+ check(map.size() == count, "Iteration: value count matches size m%d != c%d", map.size(), count);
}
private static void testStringIteration(Map<String, String> map, String[] keys) {
- check(String.format("map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
BitSet all = new BitSet(keys.length);
for (Map.Entry<String, String> each : map.entrySet()) {
String key = each.getKey();
boolean longKey = key.length() > 5;
int index = key.hashCode() + (longKey ? keys.length / 2 : 0);
- check("key already seen", !all.get(index));
+ check(!all.get(index), "key already seen");
all.set(index);
}
all.flip(0, keys.length);
- check("some keys not visited", all.isEmpty());
+ check(all.isEmpty(), "some keys not visited");
for (String each : map.keySet()) {
boolean longKey = each.length() > 5;
int index = each.hashCode() + (longKey ? keys.length / 2 : 0);
- check("key already seen", !all.get(index));
+ check(!all.get(index), "key already seen");
all.set(index);
}
all.flip(0, keys.length);
- check("some keys not visited", all.isEmpty());
+ check(all.isEmpty(), "some keys not visited");
int count = 0;
for (String each : map.values()) {
count++;
}
- check(String.format("value count matches size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "value count matches size m%d != k%d", map.size(), keys.length);
}
private static <T> void testContainsKey(Map<T, T> map, String keys_desc, T[] keys) {
for (int i = 0; i < keys.length; i++) {
T each = keys[i];
- check("containsKey: " + keys_desc + "[" + i + "]" + each, map.containsKey(each));
+ check(map.containsKey(each), "containsKey: %s[%d]%s", keys_desc, i, each);
}
}
private static <T> void testRemove(Map<T, T> map, String keys_desc, T[] keys) {
- check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
for (int i = 0; i < keys.length; i++) {
T each = keys[i];
- check("remove: " + keys_desc + "[" + i + "]" + each, null != map.remove(each));
+ check(null != map.remove(each), "remove: %s[%d]%s", keys_desc, i, each);
}
- check(String.format("remove: map empty. size=%d", map.size()),
- (map.size() == 0) && map.isEmpty());
+ check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
}
private static <T> void testKeysIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
- check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
Iterator<T> each = map.keySet().iterator();
while (each.hasNext()) {
T t = each.next();
each.remove();
- check("not removed: " + each, !map.containsKey(t) );
+ check(!map.containsKey(t), "not removed: %s", each);
}
- check(String.format("remove: map empty. size=%d", map.size()),
- (map.size() == 0) && map.isEmpty());
+ check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
}
private static <T> void testValuesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
- check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
Iterator<T> each = map.values().iterator();
while (each.hasNext()) {
T t = each.next();
each.remove();
- check("not removed: " + each, !map.containsValue(t) );
+ check(!map.containsValue(t), "not removed: %s", each);
}
- check(String.format("remove: map empty. size=%d", map.size()),
- (map.size() == 0) && map.isEmpty());
+ check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
}
private static <T> void testEntriesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
- check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
- map.size() == keys.length);
+ check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
Iterator<Map.Entry<T,T>> each = map.entrySet().iterator();
while (each.hasNext()) {
@@ -337,13 +324,12 @@
T key = t.getKey();
T value = t.getValue();
each.remove();
- check("not removed: " + each, (map instanceof IdentityHashMap) || !map.entrySet().contains(t) );
- check("not removed: " + each, !map.containsKey(key) );
- check("not removed: " + each, !map.containsValue(value));
+ check((map instanceof IdentityHashMap) || !map.entrySet().contains(t), "not removed: %s", each);
+ check(!map.containsKey(key), "not removed: %s", each);
+ check(!map.containsValue(value), "not removed: %s", each);
}
- check(String.format("remove: map empty. size=%d", map.size()),
- (map.size() == 0) && map.isEmpty());
+ check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
}
//--------------------- Infrastructure ---------------------------
@@ -391,7 +377,7 @@
}
}
- static void check(String desc, boolean cond) {
+ static void check(boolean cond, String desc) {
if (cond) {
pass();
} else {
@@ -399,6 +385,46 @@
}
}
+ static void check(boolean cond, String fmt, int i) {
+ if (cond) {
+ pass();
+ } else {
+ fail(String.format(fmt, i));
+ }
+ }
+
+ static void check(boolean cond, String fmt, Object o) {
+ if (cond) {
+ pass();
+ } else {
+ fail(String.format(fmt, o));
+ }
+ }
+
+ static void check(boolean cond, String fmt, int i1, int i2) {
+ if (cond) {
+ pass();
+ } else {
+ fail(String.format(fmt, i1, i2));
+ }
+ }
+
+ static void check(boolean cond, String fmt, String s, int i) {
+ if (cond) {
+ pass();
+ } else {
+ fail(String.format(fmt, s, i));
+ }
+ }
+
+ static void check(boolean cond, String fmt, String s, int i, Object o) {
+ if (cond) {
+ pass();
+ } else {
+ fail(String.format(fmt, s, i, o));
+ }
+ }
+
static void equal(Object x, Object y) {
if (Objects.equals(x, y)) {
pass();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/concurrent/ConcurrentMap/ConcurrentRemoveIf.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @run testng ConcurrentRemoveIf
+ * @bug 8078645
+ * @summary Test removeIf on views of concurrent maps
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentNavigableMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+@Test
+public class ConcurrentRemoveIf {
+ static final int K = 100;
+ static final int SIZE = 1000;
+ static final int HALF_SIZE = SIZE / 2;
+
+ @DataProvider(name = "String,Supplier<ConcurrentMap>,Runnable")
+ public static Object[][] spliteratorDataProvider() {
+ List<Object[]> rows = new ArrayList<>();
+
+ // ConcurrentMap classes to test
+ Map<String, Supplier<ConcurrentMap<Integer, Integer>>> maps = new HashMap<>();
+ maps.put("ConcurrentHashMap", ConcurrentHashMap::new);
+ maps.put("ConcurrentSkipListMap", ConcurrentSkipListMap::new);
+
+ // ConcurrentMap actions
+ Map<String, Consumer<ConcurrentMap<Integer, Integer>>> actions = new HashMap<>();
+ actions.put(".entrySet().removeIf()", m -> m.entrySet().removeIf(e -> e.getValue() == 0));
+ actions.put(".values().removeIf()", m -> m.values().removeIf(v -> v == 0));
+
+ // ConcurrentNavigableMap actions
+ Map<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> navActions = new HashMap<>();
+ navActions.put(".headMap()/tailMap().entrySet().removeIf()",
+ m -> {
+ ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+ ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+ left.entrySet().removeIf(e -> e.getValue() == 0);
+ right.entrySet().removeIf(e -> e.getValue() == 0);
+ });
+ navActions.put(".headMap()/tailMap().values().removeIf()",
+ m -> {
+ ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+ ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+ left.values().removeIf(v -> v == 0);
+ right.values().removeIf(v -> v == 0);
+ });
+ navActions.put(".descendingMap().entrySet().removeIf()",
+ m -> {
+ ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+ dm.entrySet().removeIf(e -> e.getValue() == 0);
+ });
+ navActions.put(".descendingMap().values().removeIf()",
+ m -> {
+ ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+ dm.values().removeIf(v -> v == 0);
+ });
+
+ for (Map.Entry<String, Supplier<ConcurrentMap<Integer, Integer>>> mapSupplier : maps.entrySet()) {
+ Supplier<ConcurrentMap<Integer, Integer>> sm = mapSupplier.getValue();
+ for (Map.Entry<String, Consumer<ConcurrentMap<Integer, Integer>>> action : actions.entrySet()) {
+ rows.add(new Object[]{
+ mapSupplier.getKey() + action.getKey(),
+ sm,
+ action.getValue()});
+ }
+
+ if (sm.get() instanceof ConcurrentNavigableMap) {
+ for (Map.Entry<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> action : navActions.entrySet()) {
+ rows.add(new Object[]{
+ mapSupplier.getKey() + action.getKey(),
+ sm,
+ action.getValue()});
+ }
+ }
+ }
+
+ return rows.toArray(new Object[0][]);
+ }
+
+ ExecutorService executorService = Executors.newCachedThreadPool();
+
+ @AfterClass
+ public void after() {
+ executorService.shutdown();
+ }
+
+ @Test(dataProvider = "String,Supplier<ConcurrentMap>,Runnable")
+ public void testMap(String desc, Supplier<ConcurrentMap<Integer, Integer>> ms, Consumer<ConcurrentMap<Integer, Integer>> action)
+ throws InterruptedException {
+ for (int i = 0; i < K; i++) {
+ testMap(ms.get(), action);
+ }
+ }
+
+ private void testMap(ConcurrentMap<Integer, Integer> map, Consumer<ConcurrentMap<Integer, Integer>> action)
+ throws InterruptedException {
+ // put 0's
+ fillMap(map, 0);
+
+ // To start working simultaneously
+ CyclicBarrier threadStarted = new CyclicBarrier(2);
+
+ // This task put 1's into map
+ CompletableFuture<Void> putter = CompletableFuture.runAsync(
+ awaitOn(threadStarted, () -> fillMap(map, 1)),
+ executorService);
+
+ // This task performs the map action to remove all 0's from map
+ CompletableFuture<Void> remover = CompletableFuture.runAsync(
+ awaitOn(threadStarted, () -> action.accept(map)),
+ executorService);
+
+ // Wait for both tasks to complete
+ CompletableFuture.allOf(putter, remover).join();
+
+ Assert.assertEquals(map.size(), SIZE, "Map size incorrect");
+ }
+
+ static void fillMap(ConcurrentMap<Integer, Integer> map, int value) {
+ for (int i = 0; i < SIZE; i++) {
+ map.put(i, value);
+ }
+ }
+
+ static Runnable awaitOn(CyclicBarrier threadStarted, Runnable r) {
+ return () -> {
+ try {
+ threadStarted.await();
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ r.run();
+ };
+ }
+}
--- a/jdk/test/java/util/logging/LogManager/TestLoggerNames.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/logging/LogManager/TestLoggerNames.java Wed Jul 05 20:33:55 2017 +0200
@@ -20,6 +20,7 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
@@ -107,7 +108,11 @@
System.out.println("OK: Iterator doesn't support remove.");
}
}
+ // We're not supposed to come here, but if we do then we
+ // need to rewind names...
+ names = LogManager.getLogManager().getLoggerNames();
}
+
List<String> loggerNames = Collections.list(names);
if (!loggerNames.contains("")) {
throw new RuntimeException("\"\"" +
@@ -147,7 +152,13 @@
Thread loggerNamesThread = new Thread(() -> {
try {
while (!stop) {
- checkLoggerNames(loggers);
+ // Make a defensive copy of the list of loggers that we pass
+ // to checkLoggerNames - in order to make sure that
+ // we won't see new loggers that might appear after
+ // checkLoggerNames has called LogManager.getLoggerNames().
+ // ('loggers' is a live list and the main thread adds and
+ // and removes loggers from it concurrently to this thread).
+ checkLoggerNames(new ArrayList<>(loggers));
Thread.sleep(10);
if (!stop) {
phaser.arriveAndAwaitAdvance();
@@ -156,6 +167,10 @@
} catch (Throwable t) {
t.printStackTrace(System.err);
checkLoggerNamesFailed = t;
+ // makes sure the main thread isn't going to wait
+ // forever waiting for this dead thread to arrive at the
+ // phaser.
+ phaser.arrive();
}
}, "loggerNames");
@@ -197,14 +212,29 @@
loggers.remove(l);
l = Logger.getLogger(name.replace("replaceMe", "meReplaced"));
loggers.add(l);
+ // Give some chance to the loggerNames thread to arrive at the
+ // phaser first. We don't really care if the logger is actually
+ // replaced this turn - or the next.
+ Thread.sleep(100);
System.gc();
if (LogManager.getLogManager().getLogger(name) == null) {
- System.out.println("*** "+ name + " successfully replaced with " + l.getName());
+ // The original logger may not have been gc'ed yet, since
+ // it could still be referenced by the list being processed
+ // by the loggerNamesThread, if that thread hasn't arrived
+ // to the phaser yet...
+ System.out.println("*** "+ name
+ + " successfully replaced with " + l.getName());
}
i++;
} else {
System.out.println("Nothing to do for logger: " + name);
}
+ if (checkLoggerNamesFailed != null) {
+ // The checkLoggerNames thread failed. No need to
+ // continue.
+ break;
+ }
+ // Waits for the checkLoggerNamesThread to arrive
phaser.arriveAndAwaitAdvance();
if (i >= 3 && i++ == 3) {
System.out.println("Loggers are now: " +
--- a/jdk/test/java/util/regex/RegExTest.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/java/util/regex/RegExTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -46,6 +46,7 @@
import java.util.*;
import java.nio.CharBuffer;
import java.util.function.Predicate;
+import jdk.testlibrary.RandomFactory;
/**
* This is a test class created to check the operation of
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/Subject/AddPrincipalSubclass.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8034820
+ * @summary Check that adding Principal subclasses to Subject works
+ */
+
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Set;
+import javax.security.auth.Subject;
+
+public class AddPrincipalSubclass {
+
+ public static void main(String[] args) throws Exception {
+
+ // create Subject with no principals and then add TestPrincipal
+ Subject subject = new Subject();
+ Set<Principal> principals = subject.getPrincipals(Principal.class);
+ Principal principal = new TestPrincipal();
+ if (!principals.add(principal)) {
+ throw new Exception("add returned false instead of true");
+ }
+ if (!principals.contains(principal)) {
+ throw new Exception("set does not contain principal");
+ }
+
+ // pre-populate Subject with TestPrincipal
+ subject = new Subject(false,
+ Collections.singleton(principal),
+ Collections.emptySet(), Collections.emptySet());
+ principals = subject.getPrincipals(Principal.class);
+ if (!principals.contains(principal)) {
+ throw new Exception("set does not contain principal");
+ }
+ }
+
+ private static class TestPrincipal implements Principal {
+ @Override
+ public String getName() {
+ return "TestPrincipal";
+ }
+ }
+}
--- a/jdk/test/javax/swing/Headless/HeadlessBox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessBox.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -142,7 +142,6 @@
b.setName("goober");
b.getName();
b.getParent();
- b.getPeer();
b.getGraphicsConfiguration();
b.getTreeLock();
b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -113,7 +113,6 @@
bf.setName("goober");
bf.getName();
bf.getParent();
- bf.getPeer();
bf.getGraphicsConfiguration();
bf.getTreeLock();
bf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -91,7 +91,6 @@
crp.setName("goober");
crp.getName();
crp.getParent();
- crp.getPeer();
crp.getGraphicsConfiguration();
crp.getTreeLock();
crp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -116,7 +116,6 @@
dcr.setName("goober");
dcr.getName();
dcr.getParent();
- dcr.getPeer();
dcr.getGraphicsConfiguration();
dcr.getTreeLock();
dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -116,7 +116,6 @@
dcr.setName("goober");
dcr.getName();
dcr.getParent();
- dcr.getPeer();
dcr.getGraphicsConfiguration();
dcr.getTreeLock();
dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJButton.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJButton.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -113,7 +113,6 @@
b.setName("goober");
b.getName();
b.getParent();
- b.getPeer();
b.getGraphicsConfiguration();
b.getTreeLock();
b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -116,7 +116,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -113,7 +113,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -113,7 +113,6 @@
cc.setName("goober");
cc.getName();
cc.getParent();
- cc.getPeer();
cc.getGraphicsConfiguration();
cc.getTreeLock();
cc.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComboBox.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJComboBox.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -113,7 +113,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComponent.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJComponent.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -115,7 +115,6 @@
b.setName("goober");
b.getName();
b.getParent();
- b.getPeer();
b.getGraphicsConfiguration();
b.getTreeLock();
b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
ch.setName("goober");
ch.getName();
ch.getParent();
- ch.getPeer();
ch.getGraphicsConfiguration();
ch.getTreeLock();
ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -135,7 +135,6 @@
intf.setName("goober");
intf.getName();
intf.getParent();
- intf.getPeer();
intf.getGraphicsConfiguration();
intf.getTreeLock();
intf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
jdi.setName("goober");
jdi.getName();
jdi.getParent();
- jdi.getPeer();
jdi.getGraphicsConfiguration();
jdi.getTreeLock();
jdi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLabel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJLabel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
l.setName("goober");
l.getName();
l.getParent();
- l.getPeer();
l.getGraphicsConfiguration();
l.getTreeLock();
l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
lp.setName("goober");
lp.getName();
lp.getParent();
- lp.getPeer();
lp.getGraphicsConfiguration();
lp.getTreeLock();
lp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJList.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJList.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
l.setName("goober");
l.getName();
l.getParent();
- l.getPeer();
l.getGraphicsConfiguration();
l.getTreeLock();
l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenu.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenu.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -110,7 +110,6 @@
m.setName("goober");
m.getName();
m.getParent();
- m.getPeer();
m.getGraphicsConfiguration();
m.getTreeLock();
m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
mb.setName("goober");
mb.getName();
mb.getParent();
- mb.getPeer();
mb.getGraphicsConfiguration();
mb.getTreeLock();
mb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
mi.setName("goober");
mi.getName();
mi.getParent();
- mi.getPeer();
mi.getGraphicsConfiguration();
mi.getTreeLock();
mi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
op.setName("goober");
op.getName();
op.getParent();
- op.getPeer();
op.getGraphicsConfiguration();
op.getTreeLock();
op.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPanel.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPanel.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
p.setName("goober");
p.getName();
p.getParent();
- p.getPeer();
p.getGraphicsConfiguration();
p.getTreeLock();
p.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -110,7 +110,6 @@
m.setName("goober");
m.getName();
m.getParent();
- m.getPeer();
m.getGraphicsConfiguration();
m.getTreeLock();
m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
pb.setName("goober");
pb.getName();
pb.getParent();
- pb.getPeer();
pb.getGraphicsConfiguration();
pb.getTreeLock();
pb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
rb.setName("goober");
rb.getName();
rb.getParent();
- rb.getPeer();
rb.getGraphicsConfiguration();
rb.getTreeLock();
rb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
i.setName("goober");
i.getName();
i.getParent();
- i.getPeer();
i.getGraphicsConfiguration();
i.getTreeLock();
i.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRootPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJRootPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
rp.setName("goober");
rp.getName();
rp.getParent();
- rp.getPeer();
rp.getGraphicsConfiguration();
rp.getTreeLock();
rp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
sb.setName("goober");
sb.getName();
sb.getParent();
- sb.getPeer();
sb.getGraphicsConfiguration();
sb.getTreeLock();
sb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
sp.setName("goober");
sp.getName();
sp.getParent();
- sp.getPeer();
sp.getGraphicsConfiguration();
sp.getTreeLock();
sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSeparator.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSeparator.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
sp.setName("goober");
sp.getName();
sp.getParent();
- sp.getPeer();
sp.getGraphicsConfiguration();
sp.getTreeLock();
sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSlider.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSlider.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSpinner.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSpinner.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -106,7 +106,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTable.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTable.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -135,7 +135,6 @@
t.setName("goober");
t.getName();
t.getParent();
- t.getPeer();
t.getGraphicsConfiguration();
t.getTreeLock();
t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextArea.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextArea.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -116,7 +116,6 @@
t.setName("goober");
t.getName();
t.getParent();
- t.getPeer();
t.getGraphicsConfiguration();
t.getTreeLock();
t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextField.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextField.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -116,7 +116,6 @@
t.setName("goober");
t.getName();
t.getParent();
- t.getPeer();
t.getGraphicsConfiguration();
t.getTreeLock();
t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
tb.setName("goober");
tb.getName();
tb.getParent();
- tb.getPeer();
tb.getGraphicsConfiguration();
tb.getTreeLock();
tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
tb.setName("goober");
tb.getName();
tb.getParent();
- tb.getPeer();
tb.getGraphicsConfiguration();
tb.getTreeLock();
tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
s.setName("goober");
s.getName();
s.getParent();
- s.getPeer();
s.getGraphicsConfiguration();
s.getTreeLock();
s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolTip.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolTip.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -112,7 +112,6 @@
tt.setName("goober");
tt.getName();
tt.getParent();
- tt.getPeer();
tt.getGraphicsConfiguration();
tt.getTreeLock();
tt.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTree.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJTree.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -153,7 +153,6 @@
t.setName("goober");
t.getName();
t.getParent();
- t.getPeer();
t.getGraphicsConfiguration();
t.getTreeLock();
t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJViewport.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/Headless/HeadlessJViewport.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. 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
@@ -120,7 +120,6 @@
v.setName("goober");
v.getName();
v.getParent();
- v.getPeer();
v.getGraphicsConfiguration();
v.getTreeLock();
v.getToolkit();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.html Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+1. Press button "Show ColorChooser" in the frame "frame" and
+ a color chooser dialog should appear.
+2. Without closing the color chooser, change Look And Feel
+ selecting it from the combobox in the frame "frame".
+ Dialog appearance will change.
+3. Resize the color chooser by mouse drag.
+
+ If you see some remnants of the previous color chooser,
+ press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="Test4319113.class">
+</applet>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4319113
+ * @summary Tests the open JColorChooser behavior on LaF change.
+ * @author yan
+ * @run applet/manual=yesno Test4319113.html
+ */
+
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.PrintStream;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+public class Test4319113
+extends JApplet
+implements ActionListener {
+ private final JFrame frame = new JFrame("frame");
+ private JComboBox cbPlaf;
+
+ @Override
+ public void init() {
+ try {
+ java.awt.EventQueue.invokeLater( () -> {
+ Test4319113.this.frame.setLayout(new GridLayout(2, 1));
+ Test4319113.this.show(Test4319113.this.frame);
+ });
+ }catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent actionEvent) {
+ Object object = actionEvent.getSource();
+ Component component = object instanceof Component ? (Component)object : null;
+ JDialog jDialog = JColorChooser.createDialog(component, "ColorChooser", false, new JColorChooser(Color.BLUE), null, null);
+ jDialog.setVisible(true);
+ }
+
+ private void show(Window window) {
+ JButton jButton = new JButton("Show ColorChooser");
+ jButton.setActionCommand("Show ColorChooser");
+ jButton.addActionListener(this);
+ this.cbPlaf = new JComboBox<UIManager.LookAndFeelInfo>(UIManager.getInstalledLookAndFeels());
+ this.cbPlaf.addItemListener(new ItemListener(){
+
+ @Override
+ public void itemStateChanged(ItemEvent itemEvent) {
+ if (itemEvent.getStateChange() == 1) {
+ SwingUtilities.invokeLater(new Runnable(){
+
+ @Override
+ public void run() {
+ UIManager.LookAndFeelInfo lookAndFeelInfo = (UIManager.LookAndFeelInfo)Test4319113.this.cbPlaf.getSelectedItem();
+ try {
+ UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
+ Frame[] arrframe = Frame.getFrames();
+ int n = arrframe.length;
+ while (--n >= 0) {
+ Test4319113.updateWindowTreeUI(arrframe[n]);
+ }
+ }
+ catch (Exception var2_3) {
+ System.err.println("Exception while changing L&F!");
+ }
+ }
+ });
+ }
+ }
+
+ });
+ window.add(this.cbPlaf);
+ window.add(jButton);
+ window.pack();
+ window.setVisible(true);
+ }
+
+ private static void updateWindowTreeUI(Window window) {
+ SwingUtilities.updateComponentTreeUI(window);
+ Window[] arrwindow = window.getOwnedWindows();
+ int n = arrwindow.length;
+ while (--n >= 0) {
+ Window window2 = arrwindow[n];
+ if (!window2.isDisplayable()) continue;
+ Test4319113.updateWindowTreeUI(window2);
+ }
+ }
+
+}
--- a/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015 Oracle and/or its affiliates. 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
@@ -22,23 +22,39 @@
*/
/* @test
- * @bug 6632953
+ * @bug 6632953 8078614
* @summary MetalComboBoxUI.getBaseline(JComponent, int, int) throws IAE for valid width/height
* @author Alexander Potochkin
*/
-
import javax.swing.JComboBox;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalComboBoxUI;
public class bug6632953 {
public static void main(String... args) throws Exception {
- MetalComboBoxUI ui = new MetalComboBoxUI();
- ui.installUI(new JComboBox());
- ui.getBaseline(new JComboBox(), 0, 0);
- ui.getBaseline(new JComboBox(), 1, 1);
- ui.getBaseline(new JComboBox(), 2, 2);
- ui.getBaseline(new JComboBox(), 3, 3);
- ui.getBaseline(new JComboBox(), 4, 4);
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+
+ for (UIManager.LookAndFeelInfo lafInfo
+ : UIManager.getInstalledLookAndFeels()) {
+ try {
+ UIManager.setLookAndFeel(lafInfo.getClassName());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ MetalComboBoxUI ui = new MetalComboBoxUI();
+ ui.installUI(new JComboBox());
+ ui.getBaseline(new JComboBox(), 0, 0);
+ ui.getBaseline(new JComboBox(), 1, 1);
+ ui.getBaseline(new JComboBox(), 2, 2);
+ ui.getBaseline(new JComboBox(), 3, 3);
+ ui.getBaseline(new JComboBox(), 4, 4);
+ }
+ }
+ });
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JComboBox/8072767/bug8072767.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ /*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+
+/**
+ * @test
+ * @bug 8072767
+ * @author Alexander Scherbatiy
+ * @summary DefaultCellEditor for comboBox creates ActionEvent with wrong source
+ * object
+ * @run main bug8072767
+ */
+
+public class bug8072767 {
+
+ private static final String TEST1 = "Test";
+ private static final String TEST2 = TEST1 + 1;
+
+ private static JFrame frame;
+ private static JTable table;
+ private static Point point;
+ private static boolean testPass;
+
+ public static void main(String[] args) throws Exception {
+ Robot robot = new Robot();
+ robot.setAutoDelay(50);
+ SwingUtilities.invokeAndWait(bug8072767::createAndShowGUI);
+ robot.waitForIdle();
+ SwingUtilities.invokeAndWait(() -> {
+ point = table.getLocationOnScreen();
+ Rectangle rect = table.getCellRect(0, 0, true);
+ point.translate(rect.width / 2, rect.height / 2);
+ });
+ robot.mouseMove(point.x, point.y);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ robot.waitForIdle();
+
+ robot.keyPress(KeyEvent.VK_1);
+ robot.keyRelease(KeyEvent.VK_1);
+ robot.waitForIdle();
+
+ SwingUtilities.invokeAndWait(() -> {
+ point = frame.getLocationOnScreen();
+ point.translate(frame.getWidth() / 2, frame.getHeight() / 2);
+ });
+
+ robot.mouseMove(point.x, point.y);
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ robot.waitForIdle();
+
+ SwingUtilities.invokeAndWait(() -> {
+ testPass = TEST2.equals(table.getValueAt(0, 0));
+ frame.dispose();
+ });
+
+ if (!testPass) {
+ throw new RuntimeException("Table cell is not edited!");
+ }
+ }
+
+ private static void createAndShowGUI() {
+ frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setSize(200, 200);
+ frame.setLocation(100, 100);
+
+ table = new JTable(
+ new String[][]{{TEST1}}, new String[]{"Header"});
+ JComboBox<String> comboBox = new JComboBox<>();
+ comboBox.setEditable(true);
+ table.getColumnModel().getColumn(0).setCellEditor(
+ new DefaultCellEditor(comboBox));
+ frame.getContentPane().add(table);
+ frame.setVisible(true);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.html Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,36 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+ Message Dialog should pop up
+ with a button font size 10
+ and message font size 24.
+
+ It should be true even on OS X.
+ If it is not so press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="bug4174551.class">
+</applet>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4174551
+ * @summary JOptionPane should allow custom buttons
+ * @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+ * @run applet/manual=yesno bug4174551.html
+ */
+import java.awt.Font;
+import javax.swing.JApplet;
+import javax.swing.UIManager;
+import javax.swing.JOptionPane;
+
+public class bug4174551 extends JApplet {
+
+ public void init() {
+ try {
+ java.awt.EventQueue.invokeLater( () -> {
+ UIManager.getDefaults().put("OptionPane.buttonFont", new Font("Dialog", Font.PLAIN, 10));
+ UIManager.getDefaults().put("OptionPane.messageFont", new Font("Dialog", Font.PLAIN, 24));
+ JOptionPane.showMessageDialog(null, "HI 24!");
+
+ System.out.println(UIManager.getDefaults().get("OptionPane.buttonFont"));
+ System.out.println(UIManager.getDefaults().get("OptionPane.messageFont"));
+ });
+ }catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.html Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<!--
+ @test
+ @summary Test that focus indicator is painted properly in JTabbedPane
+ @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+ @run applet/manual=done bug4666224.html
+ -->
+<head>
+<title> bug4666224 </title>
+</head>
+<body>
+
+<h1>bug4666224<br>Bug ID: 4666224 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4666224.class" WIDTH=300 HEIGHT=300></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,554 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+/*
+ * test
+ * @bug 4666224
+*/
+
+public class bug4666224 extends JApplet {
+ final static int placements[] = { JTabbedPane.LEFT, JTabbedPane.RIGHT, JTabbedPane.TOP, JTabbedPane.BOTTOM };
+ private JTabbedPane tabPane;
+ private JPanel mainPanel;
+
+ public bug4666224() throws Exception {
+ java.awt.EventQueue.invokeAndWait( () -> {
+ tabPane = new JTabbedPane();
+ tabPane.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ Point pt = e.getPoint();
+ System.out.println("Index at location: "
+ + tabPane.indexAtLocation(pt.x, pt.y));
+ }
+ });
+ InputMap inputMap = createInputMap();
+ SwingUtilities.replaceUIInputMap(getRootPane(), JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
+ ActionMap actionMap = createActionMap();
+ SwingUtilities.replaceUIActionMap(getRootPane(), actionMap);
+
+ //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ tabPane.setTabPlacement(JTabbedPane.TOP);
+ tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+ JPanel panel = new JPanel();
+ panel.setPreferredSize(new Dimension(200, 300));
+ tabPane.addTab("Number Zero", panel);
+ panel = new JPanel();
+ //panel.requestFocus();
+ panel.setPreferredSize(new Dimension(200, 300));
+ tabPane.addTab("Number One", panel);
+ panel = new JPanel();
+ panel.setPreferredSize(new Dimension(200, 300));
+ tabPane.addTab("Number Two", panel);
+ panel = new JPanel();
+ panel.setPreferredSize(new Dimension(200, 300));
+ tabPane.addTab("Number Three", new JColorChooser());
+ panel = new JPanel();
+ panel.setPreferredSize(new Dimension(200, 300));
+ tabPane.addTab("Number Four", panel);
+ mainPanel = new JPanel();
+ mainPanel.add(tabPane);
+
+ getContentPane().add(mainPanel);
+ tabPane.requestFocus();
+
+
+ //pack();
+ //setVisible(true);
+ });
+ }
+
+ public void init() {
+ String[][] instructionsSet =
+ {
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. Click on any of the tabs, focus indicator is visible",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'R' to align the tabs to the right side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'B' to align the tabs to the bottom side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'L' to align the tabs to the left side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'C' to change the tab layout to WRAP_TAB_LAYOUT ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'T' to align the tabs to the top side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'B' to align the tabs to the bottom side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ },
+
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. type 'R' to align the tabs to the right side ",
+ "2. Lose focus on the window by clicking on some other window ",
+ "3. Focus indicator should disappear",
+ "4. Regain focus on the window the focus indicator should reappear." ,
+ " If focus doesn't behave as above, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ }
+ };
+
+ String[] exceptionsSet =
+ {
+ "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+ "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the RIGHT of the window",
+ "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+ "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+ "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+ "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+ "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+ "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the RIGHT of the window"
+ };
+
+ Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+ }
+
+ public void start (){}
+
+ public void destroy(){
+ if(Sysout.failStatus()) {
+ String failMsg = Sysout.getFailureMessages();
+ failMsg = failMsg.replace('\n',' ');
+ throw new RuntimeException(failMsg);
+ }// End destroy
+ }
+
+ protected InputMap createInputMap() {
+ return LookAndFeel.makeComponentInputMap(getRootPane(), new Object[] {
+ "R", "right",
+ "L", "left",
+ "T", "top",
+ "B", "bottom",
+ "C", "changeLayout",
+ "D", "dump"
+ });
+ }
+
+ protected ActionMap createActionMap() {
+ ActionMap map = new ActionMap();
+ map.put("right", new RotateAction(JTabbedPane.RIGHT));
+ map.put("left", new RotateAction(JTabbedPane.LEFT));
+ map.put("top", new RotateAction(JTabbedPane.TOP));
+ map.put("bottom", new RotateAction(JTabbedPane.BOTTOM));
+ map.put("changeLayout", new ChangeLayoutAction());
+ map.put("dump", new DumpAction());
+ return map;
+ }
+
+ private class RotateAction extends AbstractAction {
+ private int placement;
+ public RotateAction(int placement) {
+ this.placement = placement;
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ tabPane.setTabPlacement(placement);
+ }
+ }
+
+ private class ChangeLayoutAction extends AbstractAction {
+ private boolean a = true;
+ public void actionPerformed(ActionEvent e) {
+ if (a) {
+ tabPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
+ a = false;
+ } else {
+ tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+ a = true;
+ }
+ }
+ }
+
+ private class DumpAction extends AbstractAction {
+ public void actionPerformed(ActionEvent e) {
+ for (int i = 0; i < tabPane.getTabCount(); i++) {
+ System.out.println("Tab: " + i + " "
+ + tabPane.getUI().getTabBounds(tabPane, i));
+ }
+ }
+ }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+ chunk of code whose purpose is to make user
+ interaction uniform, and thereby make it simpler
+ to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+ for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+ WithInstructions method. Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+ with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+ as standalone.
+ */
+
+class Sysout
+ {
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions( String[] instructions )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ dialog.printInstructions( instructions );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+ public static void createDialog( )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ String[] defInstr = { "Instructions will appear here. ", "" } ;
+ dialog.printInstructions( defInstr );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+
+ public static void printInstructions( String[] instructions )
+ {
+ dialog.printInstructions( instructions );
+ }
+
+
+ public static void println( String messageIn )
+ {
+ dialog.displayMessage( messageIn );
+ }
+
+ public static void setInstructionsWithExceptions(String instructionsSet[][],
+ String exceptionsSet[]) {
+ createDialogWithInstructions(instructionsSet[0]);
+ dialog.setInstructions(instructionsSet);
+ dialog.setExceptionMessages(exceptionsSet);
+ }
+
+ public static String getFailureMessages() {
+ return dialog.failureMessages;
+ }
+
+ public static boolean failStatus() {
+ return dialog.failStatus;
+ }
+
+ }// Sysout class
+
+/**
+ This is part of the standard test machinery. It provides a place for the
+ test instructions to be displayed, and a place for interactive messages
+ to the user to be displayed.
+ To have the test instructions displayed, see Sysout.
+ To have a message to the user be displayed, see Sysout.
+ Do not call anything in this dialog directly.
+ */
+class TestDialog extends Dialog
+ {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 70;
+
+ Panel assertPanel;
+ Button assertPass,assertFail,remarks;
+ HandleAssert handleAssert;
+ boolean failStatus=false;
+ int instructionCounter=0;
+ String instructions[][];
+ int exceptionCounter=0;
+ String exceptionMessages[];
+ String failureMessages="<br>";
+ String remarksMessage=null;
+ RemarksDialog remarksDialog;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog( Frame frame, String name )
+ {
+ super( frame, name );
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+ add( "North", instructionsText );
+
+ messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+ add("Center", messageText);
+
+ assertPanel = new Panel(new FlowLayout());
+ assertPass=new Button("Assertion Pass");
+ assertPass.setName("Assertion Pass");
+ assertFail=new Button("Assertion Fail");
+ assertFail.setName("Assertion Fail");
+ remarks = new Button("Assertion Fail Remarks");
+ remarks.setEnabled(false);
+ remarks.setName("Assertion Remarks");
+ assertPanel.add(assertPass);
+ assertPanel.add(assertFail);
+ assertPanel.add(remarks);
+ handleAssert = new HandleAssert();
+ assertPass.addActionListener(handleAssert);
+ assertFail.addActionListener(handleAssert);
+ remarks.addActionListener(handleAssert);
+ add("South",assertPanel);
+ pack();
+
+ show();
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions( String[] instructions )
+ {
+ //Clear out any current instructions
+ instructionsText.setText( "" );
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for( int i=0; i < instructions.length; i++ )
+ {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i ];
+ while( remainingStr.length() > 0 )
+ {
+ //if longer than max then chop off first max chars to print
+ if( remainingStr.length() >= maxStringLength )
+ {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf( ' ', maxStringLength - 1 );
+
+ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
+ remainingStr = remainingStr.substring( posOfSpace + 1 );
+ }
+ //else just print
+ else
+ {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append( printStr + "\n" );
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage( String messageIn )
+ {
+ messageText.append( messageIn + "\n" );
+ }
+
+ public void emptyMessage() {
+ messageText.setText("");
+ }
+
+ public void setInstructions(String insStr[][]) {
+ instructions=insStr;
+ }
+
+ public void setExceptionMessages(String exceptionMessages[]) {
+ this.exceptionMessages=exceptionMessages;
+ }
+
+ class HandleAssert implements ActionListener {
+ public void actionPerformed(ActionEvent ae) {
+ if(ae.getSource()==remarks) {
+ remarksDialog = new RemarksDialog(TestDialog.this,
+ "Assertion Remarks Dialog",true);
+ remarks.setEnabled(false);
+ if(remarksMessage!=null)
+ failureMessages+=". User Remarks : "+remarksMessage;
+ }
+ else {
+ if(instructionCounter<instructions.length-1) {
+ emptyMessage();
+ instructionCounter++;
+ printInstructions(instructions[instructionCounter]);
+ }
+ else {
+ emptyMessage();
+ displayMessage("Testcase Completed");
+ displayMessage("Press 'Done' button in the "+
+ "BaseApplet to close");
+ assertPass.setEnabled(false);
+ assertFail.setEnabled(false);
+ }
+
+ if(ae.getSource()==assertPass) {
+ // anything to be done in future
+ }
+ else if(ae.getSource()==assertFail) {
+ remarks.setEnabled(true);
+ if(!failStatus)
+ failStatus=true;
+ if(exceptionCounter<exceptionMessages.length) {
+ failureMessages = failureMessages + "<br>"+
+ exceptionMessages[exceptionCounter];
+ }
+ }
+ exceptionCounter++;
+ }
+ }
+ }
+
+ class RemarksDialog extends Dialog implements ActionListener{
+ Panel rootPanel,remarksPanel;
+ TextArea textarea;
+ Button addRemarks,cancelRemarks;
+ public RemarksDialog(Dialog owner,String title,boolean modal) {
+ super(owner,title,modal);
+ rootPanel = new Panel(new BorderLayout());
+ remarksPanel = new Panel(new FlowLayout());
+ textarea = new TextArea(5,30);
+ addRemarks=new Button("Add Remarks");
+ addRemarks.addActionListener(this);
+ cancelRemarks = new Button("Cancel Remarks");
+ cancelRemarks.addActionListener(this);
+ remarksPanel.add(addRemarks);
+ remarksPanel.add(cancelRemarks);
+ rootPanel.add(textarea,"Center");
+ rootPanel.add(remarksPanel,"South");
+ add(rootPanel);
+ setBounds(150,150,400,200);
+ setVisible(true);
+ }
+
+ public void actionPerformed(ActionEvent ae) {
+ remarksMessage=null;
+ if(ae.getSource()==addRemarks) {
+ String msg = textarea.getText().trim();
+ if (msg.length()>0)
+ remarksMessage=msg;
+ }
+ dispose();
+ }
+
+ }
+
+}// TestDialog class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.html Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+
+<html>
+<!--
+ @test
+ @summary JToolTip is shown improperly when placed very close to screen boundaries
+ @bug 4644444 8076246
+ @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+ @run applet/manual=done bug4644444.html
+ -->
+<head>
+<title> bug4644444 </title>
+</head>
+<body>
+
+<h1>bug4644444<br>Bug ID: 4644444 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4644444.class" WIDTH=50 HEIGHT=40></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import javax.swing.*;
+import java.awt.event.*;
+
+/*
+ * test
+ * @bug 4644444 8076246
+*/
+
+public class bug4644444 extends JApplet {
+
+ JPanel panel;
+ JButton button;
+
+ public bug4644444() throws Exception {
+ java.awt.EventQueue.invokeLater( () -> {
+ panel = new JPanel();
+ button = new JButton("whooo");
+ button.setToolTipText("Somthing really long 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890");
+ panel.add(button);
+ getContentPane().add(panel);
+ });
+ }
+
+ public void init() {
+ String[][] instructionsSet =
+ {
+ {
+ " Note : Incase of Assertion failure,user can enter",
+ " remarks by pressing 'Assertion Fail Remarks ' button",
+ " ",
+ " You would see a testframe with a Button",
+ " ",
+ " ON ALL PLATFORMS",
+ "1. Move the mouse on the button, ",
+ " so that the tooltip attached to it comes up ",
+ "2. Tool tip should get adjusted it-self to show ",
+ " its full length of text. ",
+ "3. If tooltip text gets cut, ",
+ " press 'Assertion Fail' else press 'Assertion Pass'",
+ "4. Similarly, move the applet to different locations of the screen, ",
+ " & see if tooltip works properly everywhere. "
+ }
+ };
+
+ String[] exceptionsSet =
+ {
+ "JToolTip is shown partially when placed very close to screen boundaries",
+ };
+
+ Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+ }
+
+ public void start (){}
+
+ public void destroy(){
+ if(Sysout.failStatus()) {
+ String failMsg = Sysout.getFailureMessages();
+ failMsg = failMsg.replace('\n',' ');
+ throw new RuntimeException(failMsg);
+ }// End destroy
+ }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+ chunk of code whose purpose is to make user
+ interaction uniform, and thereby make it simpler
+ to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+ for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+ WithInstructions method. Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+ with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+ as standalone.
+ */
+
+class Sysout
+ {
+ private static TestDialog dialog;
+
+ public static void createDialogWithInstructions( String[] instructions )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ dialog.printInstructions( instructions );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+ public static void createDialog( )
+ {
+ dialog = new TestDialog( new Frame(), "Instructions" );
+ String[] defInstr = { "Instructions will appear here. ", "" } ;
+ dialog.printInstructions( defInstr );
+ dialog.show();
+ println( "Any messages for the tester will display here." );
+ }
+
+
+ public static void printInstructions( String[] instructions )
+ {
+ dialog.printInstructions( instructions );
+ }
+
+
+ public static void println( String messageIn )
+ {
+ dialog.displayMessage( messageIn );
+ }
+
+ public static void setInstructionsWithExceptions(String instructionsSet[][],
+ String exceptionsSet[]) {
+ createDialogWithInstructions(instructionsSet[0]);
+ dialog.setInstructions(instructionsSet);
+ dialog.setExceptionMessages(exceptionsSet);
+ }
+
+ public static String getFailureMessages() {
+ return dialog.failureMessages;
+ }
+
+ public static boolean failStatus() {
+ return dialog.failStatus;
+ }
+
+ }// Sysout class
+
+/**
+ This is part of the standard test machinery. It provides a place for the
+ test instructions to be displayed, and a place for interactive messages
+ to the user to be displayed.
+ To have the test instructions displayed, see Sysout.
+ To have a message to the user be displayed, see Sysout.
+ Do not call anything in this dialog directly.
+ */
+class TestDialog extends Dialog
+ {
+
+ TextArea instructionsText;
+ TextArea messageText;
+ int maxStringLength = 70;
+
+ Panel assertPanel;
+ Button assertPass,assertFail,remarks;
+ HandleAssert handleAssert;
+ boolean failStatus=false;
+ int instructionCounter=0;
+ String instructions[][];
+ int exceptionCounter=0;
+ String exceptionMessages[];
+ String failureMessages="<br>";
+ String remarksMessage=null;
+ RemarksDialog remarksDialog;
+
+ //DO NOT call this directly, go through Sysout
+ public TestDialog( Frame frame, String name )
+ {
+ super( frame, name );
+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
+ instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+ add( "North", instructionsText );
+
+ messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+ add("Center", messageText);
+
+ assertPanel = new Panel(new FlowLayout());
+ assertPass=new Button("Assertion Pass");
+ assertPass.setName("Assertion Pass");
+ assertFail=new Button("Assertion Fail");
+ assertFail.setName("Assertion Fail");
+ remarks = new Button("Assertion Fail Remarks");
+ remarks.setEnabled(false);
+ remarks.setName("Assertion Remarks");
+ assertPanel.add(assertPass);
+ assertPanel.add(assertFail);
+ assertPanel.add(remarks);
+ handleAssert = new HandleAssert();
+ assertPass.addActionListener(handleAssert);
+ assertFail.addActionListener(handleAssert);
+ remarks.addActionListener(handleAssert);
+ add("South",assertPanel);
+ pack();
+
+ show();
+ }// TestDialog()
+
+ //DO NOT call this directly, go through Sysout
+ public void printInstructions( String[] instructions )
+ {
+ //Clear out any current instructions
+ instructionsText.setText( "" );
+
+ //Go down array of instruction strings
+
+ String printStr, remainingStr;
+ for( int i=0; i < instructions.length; i++ )
+ {
+ //chop up each into pieces maxSringLength long
+ remainingStr = instructions[ i ];
+ while( remainingStr.length() > 0 )
+ {
+ //if longer than max then chop off first max chars to print
+ if( remainingStr.length() >= maxStringLength )
+ {
+ //Try to chop on a word boundary
+ int posOfSpace = remainingStr.
+ lastIndexOf( ' ', maxStringLength - 1 );
+
+ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
+ remainingStr = remainingStr.substring( posOfSpace + 1 );
+ }
+ //else just print
+ else
+ {
+ printStr = remainingStr;
+ remainingStr = "";
+ }
+
+ instructionsText.append( printStr + "\n" );
+
+ }// while
+
+ }// for
+
+ }//printInstructions()
+
+ //DO NOT call this directly, go through Sysout
+ public void displayMessage( String messageIn )
+ {
+ messageText.append( messageIn + "\n" );
+ }
+
+ public void emptyMessage() {
+ messageText.setText("");
+ }
+
+ public void setInstructions(String insStr[][]) {
+ instructions=insStr;
+ }
+
+ public void setExceptionMessages(String exceptionMessages[]) {
+ this.exceptionMessages=exceptionMessages;
+ }
+
+ class HandleAssert implements ActionListener {
+ public void actionPerformed(ActionEvent ae) {
+ if(ae.getSource()==remarks) {
+ remarksDialog = new RemarksDialog(TestDialog.this,
+ "Assertion Remarks Dialog",true);
+ remarks.setEnabled(false);
+ if(remarksMessage!=null)
+ failureMessages+=". User Remarks : "+remarksMessage;
+ }
+ else {
+ if(instructionCounter<instructions.length-1) {
+ emptyMessage();
+ instructionCounter++;
+ printInstructions(instructions[instructionCounter]);
+ }
+ else {
+ emptyMessage();
+ displayMessage("Testcase Completed");
+ displayMessage("Press 'Done' button in the "+
+ "BaseApplet to close");
+ assertPass.setEnabled(false);
+ assertFail.setEnabled(false);
+ }
+
+ if(ae.getSource()==assertPass) {
+ // anything to be done in future
+ }
+ else if(ae.getSource()==assertFail) {
+ remarks.setEnabled(true);
+ if(!failStatus)
+ failStatus=true;
+ if(exceptionCounter<exceptionMessages.length) {
+ failureMessages = failureMessages + "<br>"+
+ exceptionMessages[exceptionCounter];
+ }
+ }
+ exceptionCounter++;
+ }
+ }
+ }
+
+ class RemarksDialog extends Dialog implements ActionListener{
+ Panel rootPanel,remarksPanel;
+ TextArea textarea;
+ Button addRemarks,cancelRemarks;
+ public RemarksDialog(Dialog owner,String title,boolean modal) {
+ super(owner,title,modal);
+ rootPanel = new Panel(new BorderLayout());
+ remarksPanel = new Panel(new FlowLayout());
+ textarea = new TextArea(5,30);
+ addRemarks=new Button("Add Remarks");
+ addRemarks.addActionListener(this);
+ cancelRemarks = new Button("Cancel Remarks");
+ cancelRemarks.addActionListener(this);
+ remarksPanel.add(addRemarks);
+ remarksPanel.add(cancelRemarks);
+ rootPanel.add(textarea,"Center");
+ rootPanel.add(remarksPanel,"South");
+ add(rootPanel);
+ setBounds(150,150,400,200);
+ setVisible(true);
+ }
+
+ public void actionPerformed(ActionEvent ae) {
+ remarksMessage=null;
+ if(ae.getSource()==addRemarks) {
+ String msg = textarea.getText().trim();
+ if (msg.length()>0)
+ remarksMessage=msg;
+ }
+ dispose();
+ }
+
+ }
+
+}// TestDialog class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,327 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 8073001
+ @summary Test verifies that combo box with custom editor renders
+ focus ring around arrow button correctly.
+ @run main CustomComboBoxFocusTest
+*/
+
+import java.awt.AWTException;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.CountDownLatch;
+import javax.imageio.ImageIO;
+import javax.swing.ComboBoxEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+public class CustomComboBoxFocusTest {
+
+ private static CustomComboBoxFocusTest test = null;
+
+ public static void main(String[] args) {
+
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ test = new CustomComboBoxFocusTest();
+ }
+ });
+ } catch (InterruptedException | InvocationTargetException e ) {
+ throw new RuntimeException("Test failed.", e);
+ }
+
+ SwingUtilities.invokeLater(test.init);
+
+ try {
+ System.out.println("Wait for screenshots...");
+ test.testDone.await();
+ } catch (InterruptedException e) {
+ throw new RuntimeException("Test failed.", e);
+ }
+ System.out.println("Compare screenshots...");
+ if (!test.match()) {
+ throw new RuntimeException("Test failed.");
+ }
+ System.out.println("Test passed.");
+ }
+
+ private final JComboBox<String> ref = new JComboBox<String>() {
+ public String toString() {
+ return "reference";
+ }
+ };
+
+ private final JComboBox<String> custom = new JComboBox<String>() {
+ public String toString() {
+ return "custom";
+ }
+ };
+
+ private final JFrame frame;
+
+ private CountDownLatch testDone = new CountDownLatch(1);
+
+ private Robot robot;
+
+ public CustomComboBoxFocusTest() {
+ frame = new JFrame(System.getProperty("java.version"));
+
+ try {
+ robot = new Robot(frame.getGraphicsConfiguration().getDevice());
+
+ } catch (AWTException e) {
+ throw new RuntimeException("Test failed.", e);
+ }
+ }
+
+ private boolean match() {
+ final BufferedImage a = captureRef.img;
+ final BufferedImage b = captureCustom.img;
+
+ final int w = Math.min(a.getWidth(), b.getWidth());
+ final int h = Math.min(a.getHeight(), b.getHeight());
+
+ for (int y = 0; y < h; y++) {
+ for (int x = 0; x < w; x++) {
+ if (a.getRGB(x, y) != b.getRGB(x, y)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ private JComboBox<String> getReference() {
+ return ref;
+ }
+
+ private JComboBox<String> getCustom() {
+ return custom;
+ }
+
+ private JFrame getFrame() {
+ return frame;
+ }
+
+ private static abstract class Step implements Runnable {
+ final public void run() {
+ doStep();
+
+ final Step next = nextStep();
+
+ if (next != null) {
+ SwingUtilities.invokeLater(next);
+ }
+ }
+
+ public abstract void doStep();
+
+ public abstract Step nextStep();
+ }
+
+ private final Step init = new Step() {
+ public void doStep() {
+ final JFrame f = getFrame();
+
+ final JPanel p = new JPanel(new GridLayout(4, 1, 20, 20));
+
+ JComboBox<String> r = getReference();
+ r.setEditable(true);
+ r.addItem("One");
+
+ JComboBox<String> c = getCustom();
+ c.setEditable(true);
+ c.addItem("One");
+ final ComboBoxEditor e = new ComboBoxEditor() {
+ private JTextField text = new JTextField();
+
+ @Override
+ public Component getEditorComponent() {
+ return this.text;
+ }
+
+ @Override
+ public void setItem(Object o) {
+ text.setText(o == null ? "" : o.toString());
+ }
+
+ @Override
+ public Object getItem() {
+ return text.getText();
+ }
+
+ @Override
+ public void selectAll() {
+ text.selectAll();
+ }
+
+ @Override
+ public void addActionListener(ActionListener actionListener) {
+ text.addActionListener(actionListener);
+ }
+
+ @Override
+ public void removeActionListener(ActionListener actionListener) {
+ text.removeActionListener(actionListener);
+ }
+ };
+ c.setEditor(e);
+
+ p.add(new JLabel("Reference"));
+ p.add(r);
+ p.add(c);
+ p.add(new JLabel("Custom"));
+
+ f.add(p);
+
+ f.pack();
+ f.setVisible(true);
+ }
+
+ public Step nextStep() {
+ return focusRef;
+ }
+ };
+
+ private class FocusStep extends Step {
+ private final JComboBox<String> target;
+ private final Step focusHandler;
+ private final Step next;
+
+ public FocusStep(JComboBox<String> t, Step h, Step n) {
+ target = t;
+ focusHandler = h;
+ next = n;
+ }
+
+ public void doStep() {
+ System.out.println("Request focus on " + target);
+ final Component c = target.getEditor().getEditorComponent();
+
+ c.addFocusListener(new FocusListener() {
+ @Override
+ public void focusGained(FocusEvent e) {
+ SwingUtilities.invokeLater(focusHandler);
+ }
+
+ @Override
+ public void focusLost(FocusEvent e) {
+
+ }
+ });
+
+ c.requestFocus();
+
+ }
+
+ public Step nextStep() {
+ return next;
+ }
+ }
+
+
+ private class CaptureStep extends Step {
+ private final JComboBox<String> target;
+ private BufferedImage img;
+ private String fname;
+ private final Step next;
+
+ private final int timeout = 2000;
+
+ public CaptureStep(JComboBox<String> t, String name, Step n) {
+ target = t;
+ next = n;
+ fname = name;
+ }
+
+ public void doStep() {
+ try {
+ Thread.sleep(timeout);
+ } catch (InterruptedException e) {
+ }
+ System.out.println("Capture sceeenshot of " + target);
+
+ Rectangle bounds = target.getBounds();
+ Point p = target.getLocationOnScreen();
+ System.out.println("Target bounds: " + bounds);
+ System.out.println("Target location: " + p);
+
+ bounds.x = p.x;
+ bounds.y = p.y;
+
+ img = robot.createScreenCapture(bounds);
+
+ try {
+ ImageIO.write(img, "PNG", new File(fname + ".png"));
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+
+ }
+
+ public Step nextStep() {
+ return next;
+ }
+ }
+
+ private final Step done = new Step() {
+ public void doStep() {
+ JFrame f = getFrame();
+ if (f != null) {
+ f.dispose();
+ }
+ System.out.println("Done");
+
+ testDone.countDown();
+ }
+
+ public Step nextStep() {
+ return null;
+ }
+ };
+
+ private final CaptureStep captureCustom = new CaptureStep(getCustom(), "cb_custom", done);
+
+ private final FocusStep focusCustom = new FocusStep(getCustom(), captureCustom, null);
+
+ private final CaptureStep captureRef = new CaptureStep(getReference(), "cb_ref", focusCustom);
+
+ private final FocusStep focusRef = new FocusStep(getReference(), captureRef, null);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/6866751/bug6866751.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ @bug 6866751
+ @summary J2SE_Swing_Reg: the caret disappears when moving to the end of the line.
+ @author Semyon Sadetsky
+ */
+import javax.swing.*;
+
+public class bug6866751 {
+ private static JFrame frame;
+ private static JTextArea area;
+
+ public static void main(String[] args) throws Exception {
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ frame = new JFrame();
+ frame.setUndecorated(true);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setup(frame);
+ }
+ });
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ int width = area.getWidth();
+ double caretX =
+ area.getCaret().getMagicCaretPosition().getX();
+ if (width < caretX + 1) {
+ throw new RuntimeException(
+ "Width of the area (" + width +
+ ") is less than caret x-position " +
+ caretX + 1);
+ }
+ area.putClientProperty("caretWidth", 10);
+ }
+ });
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ int width = area.getWidth();
+ double caretX =
+ area.getCaret().getMagicCaretPosition().getX();
+ if (width < caretX + 10) {
+ throw new RuntimeException(
+ "Width of the area (" + width +
+ ") is less than caret x-position " +
+ caretX + 10);
+ }
+ }
+ });
+ System.out.println("ok");
+ } finally {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ frame.dispose();
+ }
+ });
+ }
+ }
+
+ static void setup(JFrame frame) {
+ area = new JTextArea();
+ frame.getContentPane().add(new JScrollPane(area));
+ area.setText(
+ "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
+ area.getCaret().setDot(area.getText().length() + 1);
+
+ frame.setSize(300, 200);
+ frame.setVisible(true);
+
+ area.requestFocus();
+
+ }
+
+}
--- a/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java Wed Jul 05 20:33:55 2017 +0200
@@ -22,12 +22,13 @@
*/
/* @test
- @bug 6921687
+ @bug 6921687 8079428
@summary Mnemonic disappears after repeated attempts to open menu items using
mnemonics
@author Semyon Sadetsky
@library /lib/testlibrary
@build jdk.testlibrary.OSInfo
+ @run main bug6921687
*/
@@ -109,4 +110,4 @@
frame.setVisible(true);
}
-}
\ No newline at end of file
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/8031109/bug8031109.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.net.URL;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.text.EditorKit;
+/*
+ * @test
+ * @bug 8031109
+ * @author Victor Dyakov
+ * @summary Rendering HTML code in JEditorPane throws NumberFormatException
+ * @run main bug8031109
+ */
+public class bug8031109 {
+
+ private static final String TEXT_HTML = "text/html";
+
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ JEditorPane editorPane = new JEditorPane();
+ editorPane.setEditable(false);
+ EditorKit defaultHtmlEditor = JEditorPane
+ .createEditorKitForContentType(TEXT_HTML);
+ editorPane.setEditorKitForContentType(TEXT_HTML, defaultHtmlEditor);
+ editorPane.setContentType(TEXT_HTML);
+ editorPane.getDocument().putProperty("IgnoreCharsetDirective",
+ Boolean.TRUE);
+ URL url = generateHtmlFile();
+ String html = "<html>"
+ + "<frameset rows=\"120px, 120 PX , * , 10 *\">\n"
+ + " <frame name=\"top\" src=\"" + url + "\" />\n"
+ + " <frame name=\"center\" src=\"" + url + "\" />\n"
+ + " <frame name=\"main\" src=\"" + url + "\" />\n"
+ + " <noframes>\n"
+ + " <body>\n"
+ + " Your browser does not support frames.\n"
+ + " </body>\n"
+ + " </noframes>\n"
+ + "</frameset>";
+ editorPane.setText(html);
+ JScrollPane scrollPane = new JScrollPane(editorPane);
+
+ JFrame frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.getContentPane().add(scrollPane);
+ frame.setSize(500, 500);
+ frame.setVisible(true);
+ }
+ });
+ }
+
+ private static URL generateHtmlFile() {
+ File file = new File("hello.html");
+ try (
+ FileWriter fw = new FileWriter(file.getAbsoluteFile());
+ BufferedWriter bw = new BufferedWriter(fw);) {
+ bw.write("<head></head><body>Hello World!</body>");
+ return file.toURI().toURL();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/parser/8074956/bug8074956.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.Element;
+
+/*
+ * @test
+ * @bug 8074956
+ * @author Alexey Ivanov
+ * @summary Tests correct handling of additional HTML elements in ContentModel
+ * @run main bug8074956
+ */
+public class bug8074956 {
+ public static void main(String[] args) throws Exception {
+ final DTD html32 = DTD.getDTD("html32");
+ ContentModel contentModel = new ContentModel('&', new ContentModel());
+
+ Element elem1 = html32.getElement("html-element");
+ contentModel.first(elem1);
+
+ Element elem2 = html32.getElement("test-element");
+ // Shouldn't throw ArrayIndexOutOfBoundsException
+ contentModel.first(elem2);
+ }
+}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java Wed Jul 05 20:33:55 2017 +0200
@@ -21,6 +21,8 @@
* questions.
*/
+package jdk.testlibrary;
+
import java.util.Random;
import java.util.SplittableRandom;
--- a/jdk/test/sun/nio/cs/OLD/X11GB2312_OLD.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_CN;
-
-public class X11GB2312_OLD extends Charset {
- public X11GB2312_OLD () {
- super("X11GB2312-OLD", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GB2312_OLD;
- }
-
- private class Encoder extends EUC_CN_OLD.Encoder {
- public Encoder(Charset cs) {
- super(cs);
- }
-
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- return super.canEncode(c);
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
-
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (c <= '\u007f')
- return CoderResult.unmappableForLength(1);
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000' ) {
- da[dp++] = (byte) ((ncode >> 8) & 0x7f);
- da[dp++] = (byte) (ncode & 0x7f);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-
- private class Decoder extends EUC_CN_OLD.Decoder {
- public Decoder(Charset cs) {
- super(cs);
- }
-
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- int b1 = sa[sp] & 0xFF | 0x80;
- int b2 = sa[sp + 1] & 0xFF | 0x80;
- char c = decodeDouble(b1, b2);
- if (c == replacement().charAt(0)) {
- return CoderResult.unmappableForLength(2);
- }
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = c;
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
-
- }
- }
-
-}
--- a/jdk/test/sun/nio/cs/OLD/X11GBK_OLD.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.GBK;
-
-public class X11GBK_OLD extends Charset {
- public X11GBK_OLD () {
- super("X11GBK-OLD", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new GBK_OLD.Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11GBK_OLD;
- }
-
- private class Encoder extends GBK_OLD.Encoder {
- public Encoder(Charset cs) {
- super(cs);
- }
- public boolean canEncode(char ch){
- if (ch < 0x80) return false;
- return super.canEncode(ch);
- }
- }
-}
--- a/jdk/test/sun/nio/cs/OLD/X11KSC5601_OLD.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_KR;
-
-public class X11KSC5601_OLD extends Charset {
- public X11KSC5601_OLD () {
- super("X11KSC5601-OLD", null);
- }
- public CharsetEncoder newEncoder() {
- return new Encoder(this);
- }
- public CharsetDecoder newDecoder() {
- return new Decoder(this);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11KSC5601_OLD;
- }
-
- private class Encoder extends EUC_KR_OLD.Encoder {
- public Encoder(Charset cs) {
- super(cs);
- }
-
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- return super.canEncode(c);
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (c <= '\u007f')
- return CoderResult.unmappableForLength(1);
- int ncode = encodeDouble(c);
- if (ncode != 0 && c != '\u0000' ) {
- da[dp++] = (byte) ((ncode >> 8) & 0x7f);
- da[dp++] = (byte) (ncode & 0x7f);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
- }
-
- private class Decoder extends EUC_KR_OLD.Decoder {
- public Decoder(Charset cs) {
- super(cs);
- }
-
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- int b1 = sa[sp] & 0xFF | 0x80;
- int b2 = sa[sp + 1] & 0xFF | 0x80;
- char c = decodeDouble(b1, b2);
- if (c == replacement().charAt(0)) {
- return CoderResult.unmappableForLength(2);
- }
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = c;
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
-
- }
- }
-}
--- a/jdk/test/sun/nio/cs/TestCompoundTest.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2008, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 6427981
- * @summary Check the Compound_Text's canonical name and its aliases
- */
-
-import java.nio.charset.*;
-import java.util.Set;
-
-public class TestCompoundTest {
-
- public static void main(String args[]) throws Exception
- {
- if (System.getProperty("os.name").startsWith("Windows"))
- return;
- Charset cs = Charset.forName("COMPOUND_TEXT");
- if (!cs.name().startsWith("x-"))
- throw new RuntimeException("FAILED: name does not start with x-");
- Set<String> aliases = cs.aliases();
- if (!aliases.contains("COMPOUND_TEXT") ||
- !aliases.contains("x-compound-text") ||
- !aliases.contains("x11-compound_text"))
- throw new RuntimeException("FAILED: alias name is missing");
- }
-}
--- a/jdk/test/sun/nio/cs/TestX11CNS.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6831794
- * @summary Test X11CNS charset
- */
-
-import java.nio.charset.*;
-import java.nio.*;
-import java.util.*;
-
-public class TestX11CNS {
- static char[] decode(byte[] bb, Charset cs)
- throws Exception {
- CharsetDecoder dec = cs.newDecoder();
- ByteBuffer bbf = ByteBuffer.wrap(bb);
- CharBuffer cbf = CharBuffer.allocate(bb.length);
- CoderResult cr = dec.decode(bbf, cbf, true);
- if (cr != CoderResult.UNDERFLOW) {
- System.out.println("DEC-----------------");
- int pos = bbf.position();
- System.out.printf(" cr=%s, bbf.pos=%d, bb[pos]=%x,%x,%x,%x%n",
- cr.toString(), pos,
- bb[pos++]&0xff, bb[pos++]&0xff,bb[pos++]&0xff, bb[pos++]&0xff);
- throw new RuntimeException("Decoding err: " + cs.name());
- }
- char[] cc = new char[cbf.position()];
- cbf.flip(); cbf.get(cc);
- return cc;
-
- }
-
- static byte[] encode(char[] cc, Charset cs)
- throws Exception {
- ByteBuffer bbf = ByteBuffer.allocate(cc.length * 4);
- CharBuffer cbf = CharBuffer.wrap(cc);
- CharsetEncoder enc = cs.newEncoder();
-
- CoderResult cr = enc.encode(cbf, bbf, true);
- if (cr != CoderResult.UNDERFLOW) {
- System.out.println("ENC-----------------");
- int pos = cbf.position();
- System.out.printf(" cr=%s, cbf.pos=%d, cc[pos]=%x%n",
- cr.toString(), pos, cc[pos]&0xffff);
- throw new RuntimeException("Encoding err: " + cs.name());
- }
- byte[] bb = new byte[bbf.position()];
- bbf.flip(); bbf.get(bb);
- return bb;
- }
-
- static char[] getChars(Charset newCS, Charset oldCS) {
- CharsetEncoder enc = oldCS.newEncoder();
- CharsetEncoder encNew = newCS.newEncoder();
- char[] cc = new char[0x10000];
- int pos = 0;
- int i = 0;
- while (i < 0x10000) {
- if (i == 0x4ea0 || i == 0x51ab || i == 0x52f9) {
- i++;continue;
- }
- if (enc.canEncode((char)i) != encNew.canEncode((char)i)) {
- System.out.printf(" Err i=%x%n", i);
- //throw new RuntimeException("canEncode() err!");
- }
- if (enc.canEncode((char)i)) {
- cc[pos++] = (char)i;
- }
- i++;
- }
- return Arrays.copyOf(cc, pos);
- }
-
- static void compare(Charset newCS, Charset oldCS) throws Exception {
- if (newCS == null)
- return; // does not exist on this platform
- char[] cc = getChars(newCS, oldCS);
- System.out.printf(" Diff <%s> <%s>...%n", newCS.name(), oldCS.name());
-
- byte[] bb1 = encode(cc, newCS);
- byte[] bb2 = encode(cc, oldCS);
-
- if (!Arrays.equals(bb1, bb2)) {
- System.out.printf(" encoding failed!%n");
- }
- char[] cc1 = decode(bb1, newCS);
- char[] cc2 = decode(bb1, oldCS);
- if (!Arrays.equals(cc1, cc2)) {
- for (int i = 0; i < cc1.length; i++) {
- if (cc1[i] != cc2[i]) {
- System.out.printf("i=%d, cc1=%x cc2=%x, bb=<%x%x>%n",
- i,
- cc1[i]&0xffff, cc2[i]&0xffff,
- bb1[i*2]&0xff, bb1[i*2+1]&0xff);
- }
-
- }
-
- System.out.printf(" decoding failed%n");
- }
- }
-
- private static Charset getCharset(String czName)
- throws Exception {
- try {
- return (Charset)Class.forName(czName).newInstance();
- } catch (ClassNotFoundException e){}
- return null; // does not exist
- }
-
- public static void main(String[] args) throws Exception {
- compare(getCharset("sun.awt.motif.X11CNS11643P1"),
- new X11CNS11643P1());
-
- compare(getCharset("sun.awt.motif.X11CNS11643P2"),
- new X11CNS11643P2());
-
- compare(getCharset("sun.awt.motif.X11CNS11643P3"),
- new X11CNS11643P3());
-
- }
-}
--- a/jdk/test/sun/nio/cs/TestX11JIS0201.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 4195325
- * @summary name() should return "X11JIS0201"
- *
- */
-
-import java.nio.charset.*;
-
-public class TestX11JIS0201 {
-
- public static void main(String args[])
- throws Exception
- {
- test();
- }
-
- private static void test()
- throws Exception
- {
- Class cl = null;
- try {
- cl = Class.forName("sun.awt.motif.X11JIS0201");
- } catch (Exception e){
- return;
- }
- Charset cs = (Charset)cl.newInstance();
- if (! cs.name().equals("X11JIS0201")){
- throw new Exception("X11JIS0201 does not work correctly");
- }
- CharsetEncoder enc = cs.newEncoder();
- char[] cc = new char[0xffff];
- for (char c = 0; c < 0xffff; c++) {
- cc[c] = c;
- if (enc.canEncode(c) !=
- ((c >= 0xff61 && c <= 0xff9f) || c == 0x203e || c == 0xa5)) {
- throw new RuntimeException("x11jis0201 canEncod() failed!");
- }
- }
- String s = new String(cc);
- byte[] bb_x11 = s.getBytes(cs);
- byte[] bb = s.getBytes("jis0201");
- if (!java.util.Arrays.equals(bb, bb_x11)) {
- throw new RuntimeException("x11jis0201 encoding failed");
- }
- }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
- private final int plane;
- public X11CNS11643 (int plane, String name) {
- super(name, null);
- switch (plane) {
- case 1:
- this.plane = 0; // CS1
- break;
- case 2:
- case 3:
- this.plane = plane;
- break;
- default:
- throw new IllegalArgumentException
- ("Only planes 1, 2, and 3 supported");
- }
- }
-
- public CharsetEncoder newEncoder() {
- return new Encoder(this, plane);
- }
-
- public CharsetDecoder newDecoder() {
- return new Decoder(this, plane);
- }
-
- public boolean contains(Charset cs) {
- return cs instanceof X11CNS11643;
- }
-
- private class Encoder extends EUC_TW_OLD.Encoder {
- private int plane;
- public Encoder(Charset cs, int plane) {
- super(cs);
- this.plane = plane;
- }
- public boolean canEncode(char c) {
- if (c <= 0x7F) {
- return false;
- }
- int p = getNative(c) >> 16;
- if (p == 1 && plane == 0 ||
- p == 2 && plane == 2 ||
- p == 3 && plane == 3)
- return true;
- return false;
- }
-
- public boolean isLegalReplacement(byte[] repl) {
- return true;
- }
-
- protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
- char[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- byte[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
-
- try {
- while (sp < sl) {
- char c = sa[sp];
- if (c >= '\uFFFE' || c <= '\u007f')
- return CoderResult.unmappableForLength(1);
- int cns = getNative(c);
- int p = cns >> 16;
- if (p == 1 && plane == 0 ||
- p == 2 && plane == 2 ||
- p == 3 && plane == 3) {
- if (dl - dp < 2)
- return CoderResult.OVERFLOW;
- da[dp++] = (byte) ((cns >> 8) & 0x7f);
- da[dp++] = (byte) (cns & 0x7f);
- sp++;
- continue;
- }
- return CoderResult.unmappableForLength(1);
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- }
-
- private class Decoder extends EUC_TW_OLD.Decoder {
- private String table;
- protected Decoder(Charset cs, int plane) {
- super(cs);
- switch (plane) {
- case 0:
- table = unicodeCNS1;
- break;
- case 2:
- table = unicodeCNS2;
- break;
- case 3:
- table = unicodeCNS3;
- break;
- default:
- throw new IllegalArgumentException
- ("Only planes 1, 2, and 3 supported");
- }
- }
-
- //we only work on array backed buffer.
- protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
- byte[] sa = src.array();
- int sp = src.arrayOffset() + src.position();
- int sl = src.arrayOffset() + src.limit();
- assert (sp <= sl);
- sp = (sp <= sl ? sp : sl);
-
- char[] da = dst.array();
- int dp = dst.arrayOffset() + dst.position();
- int dl = dst.arrayOffset() + dst.limit();
- assert (dp <= dl);
- dp = (dp <= dl ? dp : dl);
-
- try {
- while (sp < sl) {
- if ( sl - sp < 2) {
- return CoderResult.UNDERFLOW;
- }
- byte b1 = sa[sp];
- byte b2 = sa[sp + 1];
- char c = replacement().charAt(0);
-
- if (table == unicodeCNS3) {
- char[] cc = convToSurrogate((byte)(b1 | 0x80),
- (byte)(b2 | 0x80),
- table);
- if (cc != null && cc[0] == '\u0000')
- c = cc[1];
- } else {
- c = convToUnicode((byte)(b1 | 0x80),
- (byte)(b2 | 0x80),
- table);
- }
- if (c == replacement().charAt(0)
- //to keep the compatibility with b2cX11CNS11643
- /*|| c == '\u0000'*/) {
- return CoderResult.unmappableForLength(2);
- }
- if (dl - dp < 1)
- return CoderResult.OVERFLOW;
- da[dp++] = c;
- sp +=2;
- }
- return CoderResult.UNDERFLOW;
- } finally {
- src.position(sp - src.arrayOffset());
- dst.position(dp - dst.arrayOffset());
- }
- }
- }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P1.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P1 extends X11CNS11643 {
- public X11CNS11643P1() {
- super(1, "X11CNS11643P1");
- }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P2.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P2 extends X11CNS11643 {
- public X11CNS11643P2() {
- super(2, "X11CNS11643P2");
- }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P3.java Wed Jul 05 20:32:49 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P3 extends X11CNS11643 {
- public X11CNS11643P3() {
- super(3, "X11CNS11643P3");
- }
-}
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java Wed Jul 05 20:33:55 2017 +0200
@@ -40,6 +40,7 @@
import java.security.*;
import java.security.interfaces.*;
import java.security.spec.*;
+import jdk.testlibrary.RandomFactory;
public class TestKeyPairGenerator extends PKCS11Test {
--- a/jdk/test/sun/security/tools/keytool/i18n.sh Wed Jul 05 20:32:49 2017 +0200
+++ b/jdk/test/sun/security/tools/keytool/i18n.sh Wed Jul 05 20:33:55 2017 +0200
@@ -22,7 +22,7 @@
#
# @test
-# @bug 4348369
+# @bug 4348369 8076069
# @summary keytool not i18n compliant
# @author charlie lai
# @run shell/manual i18n.sh
@@ -44,7 +44,7 @@
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
- SunOS | Linux )
+ SunOS | Linux | Darwin )
NULL=/dev/null
PS=":"
FS="/"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/TestMainWithoutEnclosing.java Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @test
+ * @bug 8076264
+ * @summary Launching app shouldn't require enclosing class for the main class.
+ * @compile TestMainWithoutEnclosing.java
+ * @run main TestMainWithoutEnclosing
+ */
+public final class TestMainWithoutEnclosing extends TestHelper {
+
+ static final String EnclosingName = "Enclosing";
+
+ static void createJarFile(File testJar) throws IOException {
+ List<String> scratch = new ArrayList<>();
+ scratch.add("public class Enclosing {");
+ scratch.add(" public static final class Main {");
+ scratch.add(" public static void main(String... args) {");
+ scratch.add(" System.out.println(\"Hello World\");");
+ scratch.add(" }");
+ scratch.add(" }");
+ scratch.add("}");
+ File enclosingFile = new File(EnclosingName + ".java");
+ createFile(enclosingFile, scratch);
+ compile(enclosingFile.getName());
+ // avoid side effects remove the Enclosing class
+ getClassFile(enclosingFile).delete();
+ createJar("cvfe", testJar.getName(), EnclosingName + "$Main",
+ EnclosingName + "$Main" + ".class");
+ // remove extraneous files in the current directory
+ new File(EnclosingName + "$Main" + ".class").delete();
+ }
+
+ public static void main(String... args) throws IOException {
+ File testJarFile = new File("test.jar");
+ createJarFile(testJarFile);
+ TestResult tr = doExec(javaCmd, "-jar", testJarFile.getName());
+ if (!tr.isOK()) {
+ System.out.println(tr);
+ throw new RuntimeException("test returned non-positive value");
+ }
+ if (!tr.contains("Hello World")) {
+ System.out.println(tr);
+ throw new RuntimeException("expected output not found");
+ }
+ }
+}
--- a/langtools/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -306,3 +306,4 @@
0eb91327db5a840779cc5c35b9b858d6ef7959d1 jdk9-b61
40058141a4ec04a3d4cacdb693ad188a5ddf48ed jdk9-b62
a28b7f42dae9bd59513beaa5a2d6eb563dc09e08 jdk9-b63
+809d66512998789b620d08c335d7c31211a0cf29 jdk9-b64
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java Wed Jul 05 20:33:55 2017 +0200
@@ -119,7 +119,7 @@
Content captionSpan;
Content span;
if (type.isDefaultTab()) {
- captionSpan = HtmlTree.SPAN(new StringContent(type.text()));
+ captionSpan = HtmlTree.SPAN(configuration.getResource(type.resourceKey()));
span = HtmlTree.SPAN(type.tabId(),
HtmlStyle.activeTableTab, captionSpan);
} else {
@@ -142,7 +142,7 @@
*/
public Content getMethodTypeLinks(MethodTypes methodType) {
String jsShow = "javascript:show(" + methodType.value() +");";
- HtmlTree link = HtmlTree.A(jsShow, new StringContent(methodType.text()));
+ HtmlTree link = HtmlTree.A(jsShow, configuration.getResource(methodType.resourceKey()));
return link;
}
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Wed Jul 05 20:33:55 2017 +0200
@@ -465,10 +465,10 @@
for (Map.Entry<String,Integer> entry : typeMap.entrySet()) {
vars.append(sep);
sep = ",";
- vars.append("\"");
- vars.append(entry.getKey());
- vars.append("\":");
- vars.append(entry.getValue());
+ vars.append("\"")
+ .append(entry.getKey())
+ .append("\":")
+ .append(entry.getValue());
}
vars.append("};").append(DocletConstants.NL);
sep = "";
@@ -476,11 +476,19 @@
for (MethodTypes entry : methodTypes) {
vars.append(sep);
sep = ",";
- vars.append(entry.value()).append(":");
- vars.append("[").append("\"").append(entry.tabId());
- vars.append("\"").append(sep).append("\"").append(entry.text()).append("\"]");
+ vars.append(entry.value())
+ .append(":")
+ .append("[")
+ .append("\"")
+ .append(entry.tabId())
+ .append("\"")
+ .append(sep)
+ .append("\"")
+ .append(configuration.getText(entry.resourceKey()))
+ .append("\"]");
}
- vars.append("};").append(DocletConstants.NL);
+ vars.append("};")
+ .append(DocletConstants.NL);
addStyles(HtmlStyle.altColor, vars);
addStyles(HtmlStyle.rowColor, vars);
addStyles(HtmlStyle.tableTab, vars);
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties Wed Jul 05 20:33:55 2017 +0200
@@ -150,6 +150,13 @@
doclet.Constructors=Constructors
doclet.methods=methods
doclet.Methods=Methods
+doclet.All_Methods=All Methods
+doclet.Static_Methods=Static Methods
+doclet.Instance_Methods=Instance Methods
+doclet.Abstract_Methods=Abstract Methods
+doclet.Concrete_Methods=Concrete Methods
+doclet.Default_Methods=Default Methods
+doclet.Deprecated_Methods=Deprecated Methods
doclet.annotation_type_optional_members=optional elements
doclet.Annotation_Type_Optional_Members=Optional Elements
doclet.annotation_type_required_members=required elements
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/MethodTypes.java Wed Jul 05 20:32:49 2017 +0200
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/MethodTypes.java Wed Jul 05 20:33:55 2017 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. 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
@@ -31,22 +31,22 @@
* @author Bhavesh Patel
*/
public enum MethodTypes {
- ALL(0xffff, "All Methods", "t0", true),
- STATIC(0x1, "Static Methods", "t1", false),
- INSTANCE(0x2, "Instance Methods", "t2", false),
- ABSTRACT(0x4, "Abstract Methods", "t3", false),
- CONCRETE(0x8, "Concrete Methods", "t4", false),
- DEFAULT(0x10, "Default Methods", "t5", false),
- DEPRECATED(0x20, "Deprecated Methods", "t6", false);
+ ALL(0xffff, "doclet.All_Methods", "t0", true),
+ STATIC(0x1, "doclet.Static_Methods", "t1", false),
+ INSTANCE(0x2, "doclet.Instance_Methods", "t2", false),
+ ABSTRACT(0x4, "doclet.Abstract_Methods", "t3", false),
+ CONCRETE(0x8, "doclet.Concrete_Methods", "t4", false),
+ DEFAULT(0x10, "doclet.Default_Methods", "t5", false),
+ DEPRECATED(0x20, "doclet.Deprecated_Methods", "t6", false);
private final int value;
- private final String text;
+ private final String resourceKey;
private final String tabId;
private final boolean isDefaultTab;
- MethodTypes(int v, String t, String id, boolean dt) {
+ MethodTypes(int v, String k, String id, boolean dt) {
this.value = v;
- this.text = t;
+ this.resourceKey = k;
this.tabId = id;
this.isDefaultTab = dt;
}
@@ -55,8 +55,8 @@
return value;
}
- public String text() {
- return text;
+ public String resourceKey() {
+ return resourceKey;
}
public String tabId() {
--- a/make/CompileJavaModules.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/make/CompileJavaModules.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -89,7 +89,7 @@
################################################################################
-java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-missing,-reference '-Xdoclint/package:java.*,javax.*'
+java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'
java.desktop_COPY := .gif .png .wav .txt .xml .css .pf
java.desktop_CLEAN := iio-plugin.properties cursors.properties
@@ -152,7 +152,6 @@
$(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/*.java) \
$(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/opengl/*.java) \
$(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/*.java) \
- $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/motif/*.java) \
$(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/font/*.java) \
#
else
--- a/make/Init.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/make/Init.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -267,7 +267,9 @@
( cd $(TOPDIR) && \
$(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(OUTPUT_SYNC_FLAG) \
-j $(JOBS) -f make/Main.gmk $(USER_MAKE_VARS) \
- $(PARALLEL_TARGETS) )
+ $(PARALLEL_TARGETS) || \
+ ( exitcode=$$? && $(BUILD_LOG_WRAPPER) $(PRINTF) "\nERROR: Build failed for $(TARGET_DESCRIPTION) (exit code $$exitcode) \n" && \
+ $(PRINTF) "Hint: If caused by a warning, try configure --disable-warnings-as-errors \n\n" && exit $$exitcode ) )
$(call CleanupSmartJavac)
$(call StopGlobalTimer)
$(call ReportBuildTimes)
--- a/make/Javadoc.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/make/Javadoc.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -1141,7 +1141,7 @@
NASHORNAPI_HEADER := <strong>Nashorn API</strong>
NASHORNAPI_BOTTOM := $(call CommonBottom,$(NASHORNAPI_FIRST_COPYRIGHT_YEAR))
NASHORNAPI_GROUPNAME := Packages
-NASHORNAPI_REGEXP := jdk.nashorn.api.scripting.*
+NASHORNAPI_REGEXP := jdk.nashorn.api.*
# NASHORNAPI_PKGS is located in NON_CORE_PKGS.gmk
NASHORNAPI_INDEX_HTML = $(NASHORNAPI_DOCDIR)/index.html
--- a/make/common/NON_CORE_PKGS.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/make/common/NON_CORE_PKGS.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,8 @@
com.sun.source.util \
jdk
-NASHORNAPI_PKGS = jdk.nashorn.api.scripting
+NASHORNAPI_PKGS = jdk.nashorn.api.scripting \
+ jdk.nashorn.api.tree
SMARTCARDIO_PKGS = javax.smartcardio
--- a/make/common/NativeCompilation.gmk Wed Jul 05 20:32:49 2017 +0200
+++ b/make/common/NativeCompilation.gmk Wed Jul 05 20:33:55 2017 +0200
@@ -487,6 +487,21 @@
$1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)))
endif
+ # Check if warnings should be considered errors.
+ # Pick first binary and toolchain specific, then binary specific, then general setting.
+ ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)),)
+ ifeq ($$($1_WARNINGS_AS_ERRORS),)
+ $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS)
+ else
+ $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS)
+ endif
+ endif
+
+ ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), true)
+ $1_EXTRA_CFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+ $1_EXTRA_CXXFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+ endif
+
ifeq (NONE, $$($1_OPTIMIZATION))
$1_EXTRA_CFLAGS += $(C_O_FLAG_NONE)
$1_EXTRA_CXXFLAGS += $(CXX_O_FLAG_NONE)
--- a/modules.xml Wed Jul 05 20:32:49 2017 +0200
+++ b/modules.xml Wed Jul 05 20:33:55 2017 +0200
@@ -616,7 +616,6 @@
<depend>java.prefs</depend>
<depend re-exports="true">java.xml</depend>
<depend re-exports="true">java.datatransfer</depend>
- <depend>jdk.charsets</depend>
<export>
<name>java.applet</name>
</export>
@@ -1502,10 +1501,6 @@
<module>
<name>jdk.charsets</name>
<depend>java.base</depend>
- <export>
- <name>sun.nio.cs.ext</name>
- <to>java.desktop</to>
- </export>
</module>
<module>
<name>jdk.compiler</name>
--- a/nashorn/.hgtags Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/.hgtags Wed Jul 05 20:33:55 2017 +0200
@@ -297,3 +297,4 @@
89937bee80bd28826de8cf60aa63a21edab63f79 jdk9-b61
1b5604bc81a6161b1c3c9dd654cd1399474ae9ee jdk9-b62
bc8e67bec2f92772c4a67e20e66a4f216207f0af jdk9-b63
+00df6e4fc75a83bdd958f9ef86d80e008c9ba967 jdk9-b64
--- a/nashorn/make/build.xml Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/make/build.xml Wed Jul 05 20:33:55 2017 +0200
@@ -188,7 +188,7 @@
<mkdir dir="${fxshell.classes.dir}"/>
<javac srcdir="${fxshell.dir}"
destdir="${fxshell.classes.dir}"
- classpath="${dist.jar}:${javac.classpath}"
+ classpath="${dist.jar}${path.separator}${javac.classpath}"
debug="${javac.debug}"
encoding="${javac.encoding}"
includeantruntime="false">
--- a/nashorn/make/project.properties Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/make/project.properties Wed Jul 05 20:33:55 2017 +0200
@@ -105,8 +105,8 @@
javac.classpath=\
${build.classes.dir}
javac.test.classpath=\
- ${build.classes.dir}:\
- ${build.test.classes.dir}:\
+ ${build.classes.dir}${path.separator}\
+ ${build.test.classes.dir}${path.separator}\
${file.reference.testng.jar}
meta.inf.dir=${src.dir}/META-INF
@@ -259,8 +259,8 @@
testjfx-test-sys-prop.test.fork.jvm.options=${run.test.jvmargs.main} -Xmx${run.test.xmx} -cp ${testjfx.run.test.classpath}
run.test.classpath=\
- ${file.reference.testng.jar}:\
- ${nashorn.internal.tests.jar}:\
+ ${file.reference.testng.jar}${path.separator}\
+ ${nashorn.internal.tests.jar}${path.separator}\
${nashorn.api.tests.jar}
src.dir=src/jdk.scripting.nashorn/share/classes
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArray.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArray.java Wed Jul 05 20:33:55 2017 +0200
@@ -1228,31 +1228,41 @@
final List<Object> list = Arrays.asList(array);
final Object cmpThis = cmp == null || cmp.isStrict() ? ScriptRuntime.UNDEFINED : Global.instance();
- Collections.sort(list, new Comparator<Object>() {
- private final MethodHandle call_cmp = getCALL_CMP();
- @Override
- public int compare(final Object x, final Object y) {
- if (x == ScriptRuntime.UNDEFINED && y == ScriptRuntime.UNDEFINED) {
- return 0;
- } else if (x == ScriptRuntime.UNDEFINED) {
- return 1;
- } else if (y == ScriptRuntime.UNDEFINED) {
- return -1;
- }
+ try {
+ Collections.sort(list, new Comparator<Object>() {
+ private final MethodHandle call_cmp = getCALL_CMP();
+ @Override
+ public int compare(final Object x, final Object y) {
+ if (x == ScriptRuntime.UNDEFINED && y == ScriptRuntime.UNDEFINED) {
+ return 0;
+ } else if (x == ScriptRuntime.UNDEFINED) {
+ return 1;
+ } else if (y == ScriptRuntime.UNDEFINED) {
+ return -1;
+ }
- if (cmp != null) {
- try {
- return (int)Math.signum((double)call_cmp.invokeExact(cmp, cmpThis, x, y));
- } catch (final RuntimeException | Error e) {
- throw e;
- } catch (final Throwable t) {
- throw new RuntimeException(t);
+ if (cmp != null) {
+ try {
+ return (int)Math.signum((double)call_cmp.invokeExact(cmp, cmpThis, x, y));
+ } catch (final RuntimeException | Error e) {
+ throw e;
+ } catch (final Throwable t) {
+ throw new RuntimeException(t);
+ }
}
- }
- return JSType.toString(x).compareTo(JSType.toString(y));
- }
- });
+ return JSType.toString(x).compareTo(JSType.toString(y));
+ }
+ });
+ } catch (final IllegalArgumentException iae) {
+ // Collections.sort throws IllegalArgumentException when
+ // Comparison method violates its general contract
+
+ // See ECMA spec 15.4.4.11 Array.prototype.sort (comparefn).
+ // If "comparefn" is not undefined and is not a consistent
+ // comparison function for the elements of this array, the
+ // behaviour of sort is implementation-defined.
+ }
return list.toArray(new Object[array.length]);
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeArrayBuffer.java Wed Jul 05 20:33:55 2017 +0200
@@ -28,6 +28,7 @@
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import java.nio.ByteBuffer;
+
import jdk.nashorn.internal.objects.annotations.Attribute;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Function;
@@ -226,10 +227,10 @@
}
ByteBuffer getBuffer(final int offset) {
- return nb.duplicate().position(offset);
+ return (ByteBuffer)nb.duplicate().position(offset);
}
ByteBuffer getBuffer(final int offset, final int length) {
- return getBuffer(offset).limit(length);
+ return (ByteBuffer)getBuffer(offset).limit(length);
}
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat32Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Float32ArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
private Float32ArrayData(final FloatBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((FloatBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeFloat64Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Float64ArrayData.class, "setElem", void.class, int.class, double.class).methodHandle();
private Float64ArrayData(final DoubleBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((DoubleBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt16Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int16ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Int16ArrayData(final ShortBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((ShortBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt32Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int32ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Int32ArrayData(final IntBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((IntBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeInt8Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -80,7 +80,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Int8ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Int8ArrayData(final ByteBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint16Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint16ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Uint16ArrayData(final CharBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((CharBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint32Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -82,7 +82,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint32ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Uint32ArrayData(final IntBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((IntBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8Array.java Wed Jul 05 20:33:55 2017 +0200
@@ -81,7 +81,7 @@
private static final MethodHandle SET_ELEM = specialCall(MethodHandles.lookup(), Uint8ArrayData.class, "setElem", void.class, int.class, int.class).methodHandle();
private Uint8ArrayData(final ByteBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java Wed Jul 05 20:33:55 2017 +0200
@@ -85,7 +85,7 @@
private static final MethodHandle CLAMP_LONG = staticCall(MethodHandles.lookup(), Uint8ClampedArrayData.class, "clampLong", long.class, long.class).methodHandle();
private Uint8ClampedArrayData(final ByteBuffer nb, final int start, final int end) {
- super(nb.position(start).limit(end).slice(), end - start);
+ super(((ByteBuffer)nb.position(start).limit(end)).slice(), end - start);
}
@Override
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Context.java Wed Jul 05 20:33:55 2017 +0200
@@ -1239,6 +1239,10 @@
}
if (storedScript == null) {
+ if (env._dest_dir != null) {
+ source.dump(env._dest_dir);
+ }
+
functionNode = new Parser(env, source, errMan, strict, getLogger(Parser.class)).parse();
if (errMan.hasErrors()) {
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptEnvironment.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptEnvironment.java Wed Jul 05 20:33:55 2017 +0200
@@ -73,7 +73,7 @@
/** Generate line number table in class files */
public final boolean _debug_lines;
- /** Package to which generated class files are added */
+ /** Directory in which source files and generated class files are dumped */
public final String _dest_dir;
/** Display stack trace upon error, default is false */
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/Source.java Wed Jul 05 20:33:55 2017 +0200
@@ -28,9 +28,11 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOError;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PrintWriter;
import java.io.Reader;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
@@ -44,6 +46,7 @@
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Base64;
import java.util.Objects;
@@ -989,4 +992,39 @@
public DebugLogger getLogger() {
return initLogger(Context.getContextTrusted());
}
+
+ private File dumpFile(final String dir) {
+ final URL u = getURL();
+ final StringBuilder buf = new StringBuilder();
+ // make it unique by prefixing current date & time
+ buf.append(LocalDateTime.now().toString());
+ buf.append('_');
+ if (u != null) {
+ // make it a safe file name
+ buf.append(u.toString()
+ .replace('/', '_')
+ .replace('\\', '_'));
+ } else {
+ buf.append(getName());
+ }
+
+ return new File(dir, buf.toString());
+ }
+
+ void dump(final String dir) {
+ final File file = dumpFile(dir);
+ try (final FileOutputStream fos = new FileOutputStream(file)) {
+ final PrintWriter pw = new PrintWriter(fos);
+ pw.print(data.toString());
+ pw.flush();
+ } catch (final IOException ioExp) {
+ debug("Skipping source dump for " +
+ name +
+ ": " +
+ ECMAErrors.getMessage(
+ "io.error.cant.write",
+ dir.toString() +
+ " : " + ioExp.toString()));
+ }
+ }
}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Messages.properties Wed Jul 05 20:33:55 2017 +0200
@@ -121,7 +121,7 @@
type.error.cannot.get.default.number=Cannot get default number value
type.error.cant.apply.with.to.null=Cannot apply "with" to null
type.error.cant.apply.with.to.undefined=Cannot apply "with" to undefined
-type.error.cant.apply.with.to.non.scriptobject=Cannot apply "with" to non script object
+type.error.cant.apply.with.to.non.scriptobject=Cannot apply "with" to non script object. Consider using "with(Object.bindProperties('{'}, nonScriptObject))".
type.error.in.with.non.object=Right hand side of "in" cannot be non-Object, found {0}
type.error.prototype.not.an.object="prototype" of {0} is not an Object, it is {1}
type.error.cant.load.script=Cannot load script from {0}
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/resources/Options.properties Wed Jul 05 20:33:55 2017 +0200
@@ -114,7 +114,7 @@
short_name="-d", \
is_undocumented=true, \
params="<path>", \
- desc="specify a destination directory to dump class files.", \
+ desc="specify a destination directory to dump source and class files.", \
type=String \
}
--- a/nashorn/test/script/basic/8024180/with_java_object.js.EXPECTED Wed Jul 05 20:32:49 2017 +0200
+++ b/nashorn/test/script/basic/8024180/with_java_object.js.EXPECTED Wed Jul 05 20:33:55 2017 +0200
@@ -1,1 +1,1 @@
-TypeError: Cannot apply "with" to non script object
+TypeError: Cannot apply "with" to non script object. Consider using "with(Object.bindProperties({}, nonScriptObject))".
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/nashorn/test/script/basic/JDK-8080182.js Wed Jul 05 20:33:55 2017 +0200
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * JDK-8080182: Array.prototype.sort throws IAE on inconsistent comparison
+ *
+ * @test
+ * @run
+ */
+
+function Random() {
+ this.toString = function() {
+ return (Math.random() * 100).toString();
+ }
+}
+
+for (var i = 0; i < 100; ++i) {
+ var arr = [];
+
+ for (var j = 0; j < 64; ++j) {
+ arr[j] = new Random();
+ }
+
+ // no IllegalArgumentException expected!
+ arr.sort();
+}