summaryrefslogtreecommitdiffstats
path: root/unicode
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /unicode
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'unicode')
-rw-r--r--unicode/.gitignore7
-rw-r--r--unicode/Makefile.am169
-rw-r--r--unicode/README49
-rw-r--r--unicode/cjkcompat.pl649
-rw-r--r--unicode/configure.in83
-rw-r--r--unicode/eastasianwidth.h42
-rw-r--r--unicode/enttest.c55
-rw-r--r--unicode/graphemebreaktab.h5985
-rw-r--r--unicode/graphemetest.c24
-rw-r--r--unicode/linebreaktab.h9071
-rw-r--r--unicode/linebreaktab_internal.h49
-rw-r--r--unicode/linebreaktest.C201
-rw-r--r--unicode/mkcommon.pm192
-rw-r--r--unicode/mkeastasianwidth.pl52
-rw-r--r--unicode/mkgraphemebreak.pl60
-rw-r--r--unicode/mkhtmlent.pl69
-rw-r--r--unicode/mklinebreak.pl86
-rw-r--r--unicode/mkultcase.pl116
-rw-r--r--unicode/mkwordbreak.pl52
-rw-r--r--unicode/unicode.c1643
-rw-r--r--unicode/unicode.h1692
-rw-r--r--unicode/unicode_graphemebreak.c95
-rw-r--r--unicode/unicode_htmlent.c55
-rw-r--r--unicode/unicode_htmlent.h511
-rw-r--r--unicode/unicode_linebreak.c632
-rw-r--r--unicode/unicode_tablookup.c49
-rw-r--r--unicode/unicode_ultcase.c57
-rw-r--r--unicode/unicode_ultcasetab.c663
-rw-r--r--unicode/unicode_wcwidth.c71
-rw-r--r--unicode/unicode_wordbreak.c448
-rw-r--r--unicode/unicodebuf.c127
-rw-r--r--unicode/unicodecpp.C474
-rw-r--r--unicode/unicodefilter.pl31
-rw-r--r--unicode/unicodetest.c206
-rw-r--r--unicode/update.sh23
-rw-r--r--unicode/wordbreaktab.h5083
-rw-r--r--unicode/wordbreaktab_internal.h25
-rw-r--r--unicode/wordbreaktest.C145
38 files changed, 29041 insertions, 0 deletions
diff --git a/unicode/.gitignore b/unicode/.gitignore
new file mode 100644
index 0000000..e34a996
--- /dev/null
+++ b/unicode/.gitignore
@@ -0,0 +1,7 @@
+/enttest
+/graphemetest
+/linebreaktest
+/unicode_config.h
+/unicode_config.h.in
+/unicodetest
+/wordbreaktest
diff --git a/unicode/Makefile.am b/unicode/Makefile.am
new file mode 100644
index 0000000..3d80d00
--- /dev/null
+++ b/unicode/Makefile.am
@@ -0,0 +1,169 @@
+#
+# Copyright 2000-2011 Double Precision, Inc. See COPYING for
+# distribution information.
+
+
+noinst_SCRIPTS=update.sh \
+ mkultcase.pl unicodefilter.pl \
+ mkeastasianwidth.pl \
+ mkgraphemebreak.pl mklinebreak.pl mkwordbreak.pl mkcommon.pm \
+ mkhtmlent.pl
+
+noinst_PROGRAMS=unicodetest graphemetest linebreaktest wordbreaktest \
+ enttest
+
+update-www:
+ @$(MAKE) update-www-unicode
+ @$(MAKE) update-www-eastasia
+ @$(MAKE) update-www-grapheme
+ @$(MAKE) update-www-linebreak
+ @$(MAKE) update-www-wordbreak
+ @$(MAKE) update-www-htmlent
+
+update-www-unicode:
+ @SHELL@ $(srcdir)/update.sh UnicodeData.txt http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
+
+update-www-eastasia:
+ @SHELL@ $(srcdir)/update.sh Unihan-3.2.0.txt.gz http://www.unicode.org/Public/3.2-Update/Unihan-3.2.0.txt.gz
+ @SHELL@ $(srcdir)/update.sh EastAsianWidth.txt http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt
+
+update-www-grapheme:
+ @SHELL@ $(srcdir)/update.sh GraphemeBreakProperty.txt http://www.unicode.org/Public/UNIDATA/auxiliary/GraphemeBreakProperty.txt
+
+update-www-linebreak:
+ @SHELL@ $(srcdir)/update.sh LineBreak.txt http://www.unicode.org/Public/UNIDATA/LineBreak.txt
+ @SHELL@ $(srcdir)/update.sh LineBreakTest.txt http://www.unicode.org/Public/UNIDATA/auxiliary/LineBreakTest.txt
+
+update-www-wordbreak:
+ @SHELL@ $(srcdir)/update.sh WordBreakProperty.txt http://www.unicode.org/Public/UNIDATA/auxiliary/WordBreakProperty.txt
+ @SHELL@ $(srcdir)/update.sh WordBreakTest.txt http://www.unicode.org/Public/UNIDATA/auxiliary/WordBreakTest.txt
+
+update-www-htmlent:
+ @SHELL@ $(srcdir)/update.sh xhtml-lat1.ent http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
+ @SHELL@ $(srcdir)/update.sh xhtml-symbol.ent http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent
+ @SHELL@ $(srcdir)/update.sh xhtml-special.ent http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent
+
+noinst_LTLIBRARIES=libunicode.la
+
+libunicode_la_SOURCES=unicode.h unicode.c unicodebuf.c \
+ unicodecpp.C \
+ unicode_ultcase.c \
+ unicode_ultcasetab.c \
+ unicode_wcwidth.c eastasianwidth.h \
+ unicode_tablookup.c \
+ unicode_graphemebreak.c graphemebreaktab.h \
+ unicode_linebreak.c linebreaktab.h \
+ unicode_htmlent.c unicode_htmlent.h \
+ linebreaktab_internal.h \
+ unicode_wordbreak.c wordbreaktab.h \
+ wordbreaktab_internal.h
+
+EXTRA_DIST=$(noinst_SCRIPTS)
+
+if UPDATE_UNICODE
+
+unicode_ultcasetab.c: UnicodeData.txt mkultcase.pl
+ @PERL@ $(srcdir)/mkultcase.pl >unicode_ultcasetab.c
+
+eastasianwidth.h: EastAsianWidth.txt mkeastasianwidth.pl
+ @PERL@ $(srcdir)/mkeastasianwidth.pl >eastasianwidth.h
+
+graphemebreaktab.h: GraphemeBreakProperty.txt mkgraphemebreak.pl mkcommon.pm
+ @PERL@ $(srcdir)/mkgraphemebreak.pl >graphemebreaktab.h.tmp
+ mv graphemebreaktab.h.tmp graphemebreaktab.h
+
+linebreaktab.h: LineBreak.txt UnicodeData.txt mklinebreak.pl mkcommon.pm
+ @PERL@ $(srcdir)/mklinebreak.pl >linebreaktab.h.tmp
+ mv linebreaktab.h.tmp linebreaktab.h
+
+wordbreaktab.h: WordBreakProperty.txt mkwordbreak.pl mkcommon.pm
+ @PERL@ $(srcdir)/mkwordbreak.pl >wordbreaktab.h.tmp
+ mv wordbreaktab.h.tmp wordbreaktab.h
+
+unicode_htmlent.h: xhtml-lat1.ent xhtml-special.ent xhtml-symbol.ent mkhtmlent.pl
+ @PERL@ $(srcdir)/mkhtmlent.pl >unicode_htmlent.h.tmp
+ mv unicode_htmlent.h.tmp unicode_htmlent.h
+endif
+
+unicodetest_SOURCES=unicodetest.c
+unicodetest_DEPENDENCIES=libunicode.la
+unicodetest_LDADD=libunicode.la
+unicodetest_LDFLAGS=-static
+
+graphemetest_SOURCES=graphemetest.c
+graphemetest_DEPENDENCIES=libunicode.la
+graphemetest_LDADD=libunicode.la
+graphemetest_LDFLAGS=-static
+
+linebreaktest_SOURCES=linebreaktest.C
+linebreaktest_DEPENDENCIES=libunicode.la
+linebreaktest_LDADD=libunicode.la
+linebreaktest_LDFLAGS=-static
+
+wordbreaktest_SOURCES=wordbreaktest.C
+wordbreaktest_DEPENDENCIES=libunicode.la
+wordbreaktest_LDADD=libunicode.la
+wordbreaktest_LDFLAGS=-static
+
+enttest_SOURCES=enttest.c
+enttest_DEPENDENCIES=libunicode.la
+enttest_LDADD=libunicode.la
+enttest_LDFLAGS=-static
+
+check-am: unicodetest
+ ./unicodetest
+ ./enttest
+ test -f ./LineBreakTest.txt || exit 0; ./linebreaktest
+ test "`./unicodetest foo`" = "foo"
+ test "`./unicodetest 'foo&bar.~'`" = "foo&-bar.~"
+ test "`./unicodetest 'foobаr'`" = "foob&BDA-r"
+ test "`./unicodetest 'foobааr'`" = "foob&BDAEMA-r"
+ test "`./unicodetest 'foobаааr'`" = "foob&BDAEMAQw-r"
+ test "`./unicodetest 'foobааааr'`" = "foob&BDAEMAQwBDA-r"
+ test "`./unicodetest 'foobаааааr'`" = "foob&BDAEMAQwBDAEMA-r"
+ test "`./unicodetest 'foobааааааr'`" = "foob&BDAEMAQwBDAEMAQw-r"
+ test "`./unicodetest 'foobаaаr'`" = "foob&BDA-a&BDA-r"
+ test "`./unicodetest 'foobааaааr'`" = "foob&BDAEMA-a&BDAEMA-r"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; n="`echo $$n | cut -c1-1023`"; test "`./unicodetest $$n`" = "$$n"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; test "`./unicodetest $$n`" = "$$n"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; test "`./unicodetest a$$n`" = "a$$n"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; n="`echo $$n | cut -c1-1023`"; test "`./unicodetest $$n'&'`" = "$$n""&-"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; test "`./unicodetest $$n'&'`" = "$$n""&-"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; test "`./unicodetest $$n'a&'`" = "$$n""a&-"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; test "`./unicodetest $$n'a&a'`" = "$$n""a&-a"
+ n="aaaaaaaa"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n$$n$$n"; n="$$n$$n"; n="`echo $$n | cut -c1-1023`"; test "`./unicodetest $$n'а'`" = "$$n""&BDA-"
+ test "`./unicodetest --smap foo`" = "foo"
+ test "`./unicodetest --smap 'foo&bar'`" = 'foo&-bar'
+ test "`./unicodetest --smap 'foo.bar'`" = 'foo&AC4-bar'
+ test "`./unicodetest --totitle 'tÄst'`" = 'Täst'
+ test "`./graphemetest 0x0d 0x0a`" = "0"
+ test "`./graphemetest 0x0d 0x41`" = "1"
+ test "`./graphemetest 0x41 0x0d`" = "1"
+ test "`./graphemetest 0x0a 0x41`" = "1"
+ test "`./graphemetest 0x41 0x0a`" = "1"
+ test "`./graphemetest 0x09 0x41`" = "1"
+ test "`./graphemetest 0x41 0x09`" = "1"
+ test "`./graphemetest 0x1100 0x1101`" = "0"
+ test "`./graphemetest 0x1100 0x1160`" = "0"
+ test "`./graphemetest 0xAC00 0x1160`" = "0"
+ test "`./graphemetest 0xAC02 0xD7FB`" = "0"
+ test "`./graphemetest 0xD7FB 0xD7FB`" = "0"
+ test "`./graphemetest 0x0041 0x1101`" = "1"
+ test "`./graphemetest 0x0041 0x1160`" = "1"
+ test "`./graphemetest 0x0041 0x1160`" = "1"
+ test "`./graphemetest 0x0041 0xD7FB`" = "1"
+ test "`./graphemetest 0x0041 0xD7FB`" = "1"
+ test "`./graphemetest 0x1100 0x0041`" = "1"
+ test "`./graphemetest 0x1100 0x0041`" = "1"
+ test "`./graphemetest 0xAC00 0x0041`" = "1"
+ test "`./graphemetest 0xAC02 0x0041`" = "1"
+ test "`./graphemetest 0xD7FB 0x0041`" = "1"
+ test "`./graphemetest 0x0041 0x036F`" = "0"
+ test "`./graphemetest 0x0041 0x0903`" = "0"
+ test "`./graphemetest 0x0041 0xAABB`" = "1"
+ test "`./graphemetest 0x036F 0x0041`" = "1"
+ test "`./graphemetest 0x0903 0x0041`" = "1"
+ test "`./graphemetest 0xAABB 0x0041`" = "0"
+ test "`./graphemetest 0x0041 0x0041`" = "1"
+
+
diff --git a/unicode/README b/unicode/README
new file mode 100644
index 0000000..3112508
--- /dev/null
+++ b/unicode/README
@@ -0,0 +1,49 @@
+
+HOW TO ADD A NEW CHARACTER SET MAPPING.
+
+ * Create a struct unicode_info structure. This structure defines the
+ official character set name, as well as pointers to conversion functions.
+
+ * Add the name of the character set, and the name of your structure to
+ unicode/charsetlist.txt. Multiple entries in unicode/charsetlist.txt can
+ be used to define aliases for the same character set. Example - "IBM869"
+ and "CP869" both specify the same character set, they both point to the
+ unicode_IBM_869 object, which is defined in ibm869.c
+
+ There's an automatically generated source file, charsetlist.c, which is
+ generated by a script from charsetlist.txt. That's how character sets end up
+ being linked into the code, and how individual character sets can be
+ selectively included or excluded.
+
+ The struct unicode_info structure contains pointers to the following
+ functions:
+
+ + Convert text in this character set to unicode.
+
+ + Convert unicode to text in this character set.
+
+ + Convert text in this character set to uppercase.
+
+ + Convert text in this character set to lowercase.
+
+ + Convert text in this character set to titlecase.
+
+ If the character set allows for convenient conversion to
+ upper/lower/titlecase, the conversion code should be coded directly.
+ Otherwise, the library has a set of convenient functions that go against
+ the unicode master table. Text in any character set can
+ upper/lower/titlecased by converting it to unicode, running it through
+ unicode_uc/unicode_lc/unicode_tc, then converting unicode back to the
+ original character set. See utf8_chset.c for an example.
+
+ Note that unicode_uc/unicode_lc/unicode_tc carries a heavy penalty, and
+ should be avoided. unicode_[ult]c() adds about 26Kb of data tables.
+
+ Finally, all this code has to be added to libunicode.a. It can simply be
+ added to libunicode_a_SOURCES.
+
+ If, after doing all that, run make to build libunicode.a and the
+ unicode-info program. Run unicode-info. If the character set is listed by
+ unicode-info, you should be all set, provided that the conversion functions
+ actually work as advertised.
+
diff --git a/unicode/cjkcompat.pl b/unicode/cjkcompat.pl
new file mode 100644
index 0000000..642a75e
--- /dev/null
+++ b/unicode/cjkcompat.pl
@@ -0,0 +1,649 @@
+##
+## Maps for compatibility ideographs.
+##
+
+# Some standards have separated Uniocde maps for same ideographs
+# by each specific reasons. Those separations are not meaningful
+# for other standards. So they must be unified.
+# cf. Unicode Standard.
+
+## CJK Compatibility Ideographs (U+F900 - U+FAFF)
+
+# Pronounciation variants from KS X 1001:1998
+%compat_ksx1001 = (
+ # 42-25 ga
+ 0xF903 => 0x8CC8, # 45-47 go
+ # 43-29 gang
+ 0xFA09 => 0x964D, # 90-02 hang
+ # 49-34 gi
+ 0xF900 => 0x8C48, # 43-48 gae
+ # 44-58 gyeong
+ 0xF901 => 0x66F4, # 43-54 gaeng
+ # 83-19 ca
+ 0xF902 => 0x8ECA, # 43-71 geo
+ # 44-24 gyeon
+ 0xFA0A => 0x898B, # 90-70 hyeon
+ # 44-88 gye
+ 0xF909 => 0x5951, # 48-48 geul
+ # 92-33 hwal
+ 0xF904 => 0x6ED1, # 45-72 gol
+ # 45-90 goj
+ 0xF905 => 0x4E32, # 46-13 gwan
+ # 46-09 gwag
+ 0xFA0B => 0x5ED3, # 92-09 hwag
+ # 47-03 gu
+ 0xF906 => 0x53E5, # 47-91 gwi
+ # 47-47 gu
+ 0xF907 => 0x9F9C, # 48-02 gwi
+ 0xF908 => 0x9F9C, # 48-24 gyun
+ # 49-49 gim
+ 0xF90A => 0x91D1, # 48-61 geum
+ # 52-90 ra
+ 0xF90B => 0x5587, # 49-52 na
+ # 50-15 nae
+ 0xF90C => 0x5948, # 49-53 na
+ # 52-91 ra
+ 0xF90D => 0x61F6, # 49-56 na
+ # 49-57 na
+ 0xF95B => 0x62CF, # 52-92 ra
+ # 52-93 ra
+ 0xF90E => 0x7669, # 49-59 na
+ # 52-94 ra
+ 0xF90F => 0x7F85, # 49-60 na
+ # 53-01 ra
+ 0xF910 => 0x863F, # 49-61 na
+ # 53-02 ra
+ 0xF911 => 0x87BA, # 49-62 na
+ # 53-03 ra
+ 0xF912 => 0x88F8, # 49-63 na
+ # 53-04 ra
+ 0xF913 => 0x908F, # 49-64 na
+ # 68-37 ag
+ 0xF914 => 0x6A02, # 49-66 nag
+ 0xF95C => 0x6A02, # 53-05 rag
+ 0xF9BF => 0x6A02, # 72-89 yo
+ # 53-06 rag
+ 0xF915 => 0x6D1B, # 49-67 nag
+ # 53-07 rag
+ 0xF916 => 0x70D9, # 49-68 nag
+ # 53-08 rag
+ 0xF917 => 0x73DE, # 49-69 nag
+ # 53-10 rag
+ 0xF918 => 0x843D, # 49-70 nag
+ # 49-71 nag
+ 0xF95D => 0x8AFE, # 53-11 rag
+ # 53-12 rag
+ 0xF919 => 0x916A, # 49-72 nag
+ # 53-13 rag
+ 0xF91A => 0x99F1, # 49-73 nag
+ # 53-15 ran
+ 0xF91B => 0x4E82, # 49-74 nan
+ # 53-16 ran
+ 0xF91C => 0x5375, # 49-75 nan
+ # 53-17 ran
+ 0xF91D => 0x6B04, # 49-77 nan
+ # 53-20 ran
+ 0xF91E => 0x721B, # 49-79 nan
+ # 53-21 ran
+ 0xF91F => 0x862D, # 49-80 nan
+ # 53-22 ran
+ 0xF920 => 0x9E1E, # 49-82 nan
+ # 53-25 ram
+ 0xF921 => 0x5D50, # 49-86 nam
+ # 53-29 ram
+ 0xF922 => 0x6FEB, # 49-90 nam
+ # 53-32 ram
+ 0xF923 => 0x85CD, # 49-92 nam
+ # 53-33 ram
+ 0xF924 => 0x8964, # 49-93 nam
+ # 53-35 rab
+ 0xF925 => 0x62C9, # 49-94 nab
+ # 53-36 rab
+ 0xF926 => 0x81D8, # 50-02 nab
+ # 53-37 rab
+ 0xF927 => 0x881F, # 50-03 nab
+ # 53-38 rang
+ 0xF928 => 0x5ECA, # 50-07 nang
+ # 53-39 rang
+ 0xF929 => 0x6717, # 50-08 nang
+ # 53-40 rang
+ 0xF92A => 0x6D6A, # 50-09 nang
+ # 53-41 rang
+ 0xF92B => 0x72FC, # 50-10 nang
+ # 53-45 rang
+ 0xF92C => 0x90DE, # 50-11 nang
+ # 53-46 rae
+ 0xF92D => 0x4F86, # 50-13 nae
+ # 53-50 raeng
+ 0xF92E => 0x51B7, # 50-18 naeng
+ # 50-19 nyeo
+ 0xF981 => 0x5973, # 69-92 yeo
+ # 50-20 nyeon
+ 0xF98E => 0x5E74, # 70-36 yeon
+ # 50-21 nyeon
+ 0xF991 => 0x649A, # 70-42 yeon
+ # 50-22 nyeon
+ 0xF995 => 0x79CA, # 70-60 yeon
+ # 50-23 nyeom
+ 0xF9A3 => 0x5FF5, # 70-86 yeom
+ # 50-26 nyeom
+ 0xF9A4 => 0x637B, # 70-87 yeom
+ # 50-27 nyeong
+ 0xF95F => 0x5BE7, # 54-24 ryeong
+ 0xF9AA => 0x5BE7, # 71-12 yeong
+ # 54-44 ro
+ 0xF92F => 0x52DE, # 50-30 no
+ # 50-33 no
+ 0xF960 => 0x6012, # 54-45 ro
+ # 54-47 ro
+ 0xF930 => 0x64C4, # 50-34 no
+ # 54-48 ro
+ 0xF931 => 0x6AD3, # 50-35 no
+ # 54-51 ro
+ 0xF932 => 0x7210, # 50-36 no
+ # 54-52 ro
+ 0xF933 => 0x76E7, # 50-38 no
+ # 54-53 ro
+ 0xF934 => 0x8001, # 50-39 no
+ # 54-54 ro
+ 0xF935 => 0x8606, # 50-40 no
+ # 54-55 ro
+ 0xF936 => 0x865C, # 50-41 no
+ # 54-56 ro
+ 0xF937 => 0x8DEF, # 50-42 no
+ # 54-58 ro
+ 0xF938 => 0x9732, # 50-43 no
+ # 54-59 ro
+ 0xF939 => 0x9B6F, # 50-45 no
+ # 54-60 ro
+ 0xF93A => 0x9DFA, # 50-46 no
+ # 54-62 rog
+ 0xF93B => 0x788C, # 50-47 nog
+ # 54-63 rog
+ 0xF93C => 0x797F, # 50-48 nog
+ # 54-64 rog
+ 0xF93D => 0x7DA0, # 50-49 nog
+ # 54-65 rog
+ 0xF93E => 0x83C9, # 50-50 nog
+ # 54-66 rog
+ 0xF93F => 0x9304, # 50-51 nog
+ # 54-67 rog
+ 0xF940 => 0x9E7F, # 50-52 nog
+ # 54-69 ron
+ 0xF941 => 0x8AD6, # 50-53 non
+ # 54-70 rong
+ 0xF942 => 0x58DF, # 50-54 nong
+ # 54-71 rong
+ 0xF943 => 0x5F04, # 50-55 nong
+ # 54-75 rong
+ 0xF944 => 0x7C60, # 50-57 nong
+ # 54-76 rong
+ 0xF945 => 0x807E, # 50-58 nong
+ # 54-79 roe
+ 0xF946 => 0x7262, # 50-62 noe
+ # 54-80 roe
+ 0xF947 => 0x78CA, # 50-63 noe
+ # 54-81 roe
+ 0xF948 => 0x8CC2, # 50-65 noe
+ # 54-84 roe
+ 0xF949 => 0x96F7, # 50-66 noe
+ # 50-67 nyo
+ 0xF9BD => 0x5C3F, # 72-81 yo
+ # 55-04 ru
+ 0xF94A => 0x58D8, # 50-68 nu
+ # 55-06 ru
+ 0xF94B => 0x5C62, # 50-69 nu
+ # 55-07 ru
+ 0xF94C => 0x6A13, # 50-70 nu
+ # 55-08 ru
+ 0xF94D => 0x6DDA, # 50-71 nu
+ # 55-09 ru
+ 0xF94E => 0x6F0F, # 50-72 nu
+ # 55-11 ru
+ 0xF94F => 0x7D2F, # 50-73 nu
+ # 55-12 ru
+ 0xF950 => 0x7E37, # 50-74 nu
+ # 55-16 ru
+ 0xF951 => 0x964B, # 50-75 nu
+ # 50-78 nyu
+ 0xF9C8 => 0x677B, # 74-84 yu
+ # 50-79 nyu
+ 0xF9CF => 0x7D10, # 75-10 yu
+ # 55-45 reug
+ 0xF952 => 0x52D2, # 50-80 neug
+ # 55-46 reug
+ 0xF953 => 0x808B, # 50-81 neug
+ # 55-47 reum
+ 0xF954 => 0x51DC, # 50-82 neum
+ # 55-48 reung
+ 0xF955 => 0x51CC, # 50-83 neung
+ # 55-50 reung
+ 0xF956 => 0x7A1C, # 50-84 neung
+ # 55-51 reung
+ 0xF957 => 0x7DBE, # 50-85 neung
+ # 55-52 reung
+ 0xF958 => 0x83F1, # 50-87 neung
+ # 55-53 reung
+ 0xF959 => 0x9675, # 50-88 neung
+ # 50-90 ni
+ 0xF9E3 => 0x6CE5, # 76-18 i
+ # 50-91 nig
+ 0xF9EB => 0x533F, # 76-41 ig
+ # 50-92 nig
+ 0xF9EC => 0x6EBA, # 76-42 ig
+ # 50-94 da
+ 0xF9FE => 0x8336, # 83-17 ca
+ # 51-01 dan
+ 0xF95E => 0x4E39, # 53-14 ran
+ # 51-56 dang
+ 0xFA03 => 0x7CD6, # 87-24 tang
+ # 51-75 daeg
+ 0xFA04 => 0x5B85, # 87-40 taeg
+ # 51-88 do
+ 0xFA01 => 0x5EA6, # 86-84 tag
+ # 52-33 dog
+ 0xF95A => 0x8B80, # 52-70 du
+ # 52-55 dong
+ 0xFA05 => 0x6D1E, # 87-51 tong
+ # 53-51 ryag
+ 0xF975 => 0x63A0, # 69-17 yag
+ # 53-52 ryag
+ 0xF976 => 0x7565, # 69-18 yag
+ # 53-53 ryang
+ 0xF977 => 0x4EAE, # 69-25 yang
+ # 53-55 ryang
+ 0xF978 => 0x5169, # 69-27 yang
+ # 53-56 ryang
+ 0xF979 => 0x51C9, # 69-28 yang
+ # 53-57 ryang
+ 0xF97A => 0x6881, # 69-36 yang
+ # 53-61 ryang
+ 0xF97B => 0x7CE7, # 69-46 yang
+ # 53-62 ryang
+ 0xF97C => 0x826F, # 69-48 yang
+ # 53-63 ryang
+ 0xF97D => 0x8AD2, # 69-50 yang
+ # 53-65 ryang
+ 0xF97E => 0x91CF, # 69-54 yang
+ # 53-68 ryeo
+ 0xF97F => 0x52F5, # 69-90 yeo
+ # 53-69 ryeo
+ 0xF980 => 0x5442, # 69-91 yeo
+ # 53-70 ryeo
+ 0xF982 => 0x5EEC, # 69-94 yeo
+ # 53-73 ryeo
+ 0xF983 => 0x65C5, # 70-01 yeo
+ # 53-75 ryeo
+ 0xF984 => 0x6FFE, # 70-04 yeo
+ # 53-76 ryeo
+ 0xF985 => 0x792A, # 70-07 yeo
+ # 53-79 ryeo
+ 0xF986 => 0x95AD, # 70-13 yeo
+ # 53-81 ryeo
+ 0xF987 => 0x9A6A, # 70-15 yeo
+ # 53-82 ryeo
+ 0xF988 => 0x9E97, # 70-16 yeo
+ # 53-83 ryeo
+ 0xF989 => 0x9ECE, # 70-17 yeo
+ # 53-84 ryeog
+ 0xF98A => 0x529B, # 70-19 yeog
+ # 53-85 ryeog
+ 0xF98B => 0x66C6, # 70-23 yeog
+ # 53-86 ryeog
+ 0xF98C => 0x6B77, # 70-24 yeog
+ # 53-89 ryeog
+ 0xF98D => 0x8F62, # 70-28 yeog
+ # 53-91 ryeon
+ 0xF98F => 0x6190, # 70-38 yeon
+ # 53-92 ryeon
+ 0xF990 => 0x6200, # 70-39 yeon
+ # 53-94 ryeon
+ 0xF992 => 0x6F23, # 70-50 yeon
+ # 54-01 ryeon
+ 0xF993 => 0x7149, # 70-54 yeon
+ # 54-02 ryeon
+ 0xF994 => 0x7489, # 70-57 yeon
+ # 54-03 ryeon
+ 0xF996 => 0x7DF4, # 70-63 yeon
+ # 54-04 ryeon
+ 0xF997 => 0x806F, # 70-65 yeon
+ # 54-05 ryeon
+ 0xF999 => 0x84EE, # 70-69 yeon
+ # 54-06 ryeon
+ 0xF998 => 0x8F26, # 70-68 yeon
+ # 54-07 ryeon
+ 0xF99A => 0x9023, # 70-70 yeon
+ # 54-08 ryeon
+ 0xF99B => 0x934A, # 70-72 yeon
+ # 54-10 ryeol
+ 0xF99C => 0x5217, # 70-74 yeol
+ # 54-11 ryeol
+ 0xF99D => 0x52A3, # 70-75 yeol
+ # 54-13 ryeol
+ 0xF99F => 0x70C8, # 70-79 yeol
+ # 54-14 ryeol
+ 0xF9A0 => 0x88C2, # 70-81 yeol
+ # 54-15 ryeom
+ 0xF9A2 => 0x5EC9, # 70-85 yeom
+ # 54-17 ryeom
+ 0xF9A5 => 0x6BAE, # 70-89 yeom
+ # 54-19 ryeom
+ 0xF9A6 => 0x7C3E, # 71-01 yeom
+ # 54-20 ryeob
+ 0xF9A7 => 0x7375, # 71-06 yeob
+ # 54-21 ryeong
+ 0xF9A8 => 0x4EE4, # 71-09 yeong
+ # 54-23 ryeong
+ 0xF9A9 => 0x56F9, # 71-10 yeong
+ # 54-26 ryeong
+ 0xF9AB => 0x5DBA, # 71-13 yeong
+ # 54-27 ryeong
+ 0xF9AC => 0x601C, # 71-16 yeong
+ # 54-28 ryeong
+ 0xF9AD => 0x73B2, # 71-31 yeong
+ # 54-30 ryeong
+ 0xF9AF => 0x7F9A, # 71-38 yeong
+ # 54-32 ryeong
+ 0xF9B0 => 0x8046, # 71-39 yeong
+ # 54-34 ryeong
+ 0xF9B1 => 0x9234, # 71-43 yeong
+ # 54-35 ryeong
+ 0xF9B2 => 0x96F6, # 71-45 yeong
+ # 54-36 ryeong
+ 0xF9B3 => 0x9748, # 71-47 yeong
+ # 54-37 ryeong
+ 0xF9B4 => 0x9818, # 71-48 yeong
+ # 54-39 rye
+ 0xF9B5 => 0x4F8B, # 71-51 ye
+ # 54-41 rye
+ 0xF9B6 => 0x79AE, # 71-63 ye
+ # 54-42 rye
+ 0xF9B7 => 0x91B4, # 71-68 ye
+ # 54-43 rye
+ 0xF9B8 => 0x96B7, # 71-70 ye
+ # 54-85 ryo
+ 0xF9BA => 0x4E86, # 72-71 yo
+ # 54-86 ryo
+ 0xF9BB => 0x50DA, # 72-72 yo
+ # 54-87 ryo
+ 0xF9BC => 0x5BEE, # 72-80 yo
+ # 54-89 ryo
+ 0xF9BE => 0x6599, # 72-87 yo
+ # 54-90 ryo
+ 0xF9C0 => 0x71CE, # 72-91 yo
+ # 54-91 ryo
+ 0xF9C1 => 0x7642, # 72-94 yo
+ # 54-94 ryo
+ 0xF9C2 => 0x84FC, # 73-07 yo
+ # 55-01 ryo
+ 0xF9C3 => 0x907C, # 73-12 yo
+ # 55-03 ryong
+ 0xF9C4 => 0x9F8D, # 73-44 yong
+ # 55-17 ryu
+ 0xF9C7 => 0x5289, # 74-69 yu
+ # 55-19 ryu
+ 0xF9C9 => 0x67F3, # 74-87 yu
+ # 55-21 ryu
+ 0xF9CA => 0x6D41, # 74-92 yu
+ # 55-22 ryu
+ 0xF9CB => 0x6E9C, # 74-94 yu
+ # 55-24 ryu
+ 0xF9CC => 0x7409, # 75-04 yu
+ # 55-26 ryu
+ 0xF9CD => 0x7559, # 75-07 yu
+ # 55-28 ryu
+ 0xF9CE => 0x786B, # 75-09 yu
+ # 55-30 ryu
+ 0xF9D0 => 0x985E, # 75-26 yu
+ # 55-31 ryug
+ 0xF9D1 => 0x516D, # 75-27 yug
+ # 55-32 ryug
+ 0xF9D2 => 0x622E, # 75-29 yug
+ # 55-33 ryug
+ 0xF9D3 => 0x9678, # 75-33 yug
+ # 55-35 ryun
+ 0xF9D4 => 0x502B, # 75-34 yun
+ # 55-36 ryun
+ 0xF9D5 => 0x5D19, # 75-38 yun
+ # 55-37 ryun
+ 0xF9D6 => 0x6DEA, # 75-39 yun
+ # 55-39 ryun
+ 0xF9D7 => 0x8F2A, # 75-44 yun
+ # 55-40 ryul
+ 0xF9D8 => 0x5F8B, # 75-47 yul
+ # 55-41 ryul
+ 0xF9D9 => 0x6144, # 75-48 yul
+ # 55-42 ryul
+ 0xF9DA => 0x6817, # 75-49 yul
+ # 65-67 sol
+ 0xF961 => 0x7387, # 55-43 ryul
+ 0xF9DB => 0x7387, # 75-50 yul
+ # 55-44 ryung
+ 0xF9DC => 0x9686, # 75-56 yung
+ # 55-55 ri
+ 0xF9DD => 0x5229, # 76-06 i
+ # 55-57 ri
+ 0xF9DE => 0x540F, # 76-07 i
+ # 55-59 ri
+ 0xF9DF => 0x5C65, # 76-10 i
+ # 55-61 ri
+ 0xF9E1 => 0x674E, # 76-16 i
+ # 55-62 ri
+ 0xF9E2 => 0x68A8, # 76-17 i
+ # 55-66 ri
+ 0xF9E4 => 0x7406, # 76-21 i
+ # 76-22 i
+ 0xF962 => 0x7570, # 55-68 ri
+ # 55-69 ri
+ 0xF9E5 => 0x75E2, # 76-24 i
+ # 55-71 ri
+ 0xF9E6 => 0x7F79, # 76-26 i
+ # 55-74 ri
+ 0xF9E7 => 0x88CF, # 76-32 i
+ # 55-75 ri
+ 0xF9E8 => 0x88E1, # 76-33 i
+ # 55-76 ri
+ 0xF9E9 => 0x91CC, # 76-37 i
+ # 55-78 ri
+ 0xF9EA => 0x96E2, # 76-38 i
+ # 55-80 rin
+ 0xF9ED => 0x541D, # 76-53 in
+ # 55-82 rin
+ 0xF9EE => 0x71D0, # 76-61 in
+ # 55-83 rin
+ 0xF9EF => 0x7498, # 76-62 in
+ # 55-84 rin
+ 0xF9F0 => 0x85FA, # 76-65 in
+ # 55-86 rin
+ 0xF9F1 => 0x96A3, # 76-68 in
+ # 55-87 rin
+ 0xF9F2 => 0x9C57, # 76-71 in
+ # 55-88 rin
+ 0xF9F3 => 0x9E9F, # 76-72 in
+ # 55-89 rim
+ 0xF9F4 => 0x6797, # 76-87 im
+ # 55-90 rim
+ 0xF9F5 => 0x6DCB, # 76-88 im
+ # 55-92 rim
+ 0xF9F6 => 0x81E8, # 76-90 im
+ # 56-01 rib
+ 0xF9F7 => 0x7ACB, # 77-01 ib
+ # 56-02 rib
+ 0xF9F8 => 0x7B20, # 77-02 ib
+ # 56-03 rib
+ 0xF9F9 => 0x7C92, # 77-03 ib
+ # 58-82 ban
+ 0xF964 => 0x78FB, # 59-68 beon
+ # 61-33 bug
+ 0xF963 => 0x5317, # 59-37 bae
+ # 88-21 pyeon
+ 0xF965 => 0x4FBF, # 60-05 byeon
+ # 60-54 bog
+ 0xF966 => 0x5FA9, # 61-05 bu
+ # 60-63 bog
+ 0xFA07 => 0x8F3B, # 88-80 pog
+ # 60-84 bu
+ 0xF967 => 0x4E0D, # 61-53 bul
+ # 89-18 pil
+ 0xF968 => 0x6CCC, # 61-84 bi
+ # 66-06 su
+ 0xF969 => 0x6578, # 62-92 sag
+ # 63-67 saeg
+ 0xF96A => 0x7D22, # 62-94 sag
+ # 63-15 sal
+ 0xF970 => 0x6BBA, # 65-77 swae
+ # 83-49 cam
+ 0xF96B => 0x53C3, # 63-19 sam
+ # 63-50 sang
+ 0xF9FA => 0x72C0, # 77-78 jang
+ # 63-61 sae
+ 0xF96C => 0x585E, # 63-65 saeg
+ # 64-93 seong
+ 0xF96D => 0x7701, # 63-72 saeng
+ # 64-67 seol
+ 0xF96F => 0x8AAA, # 65-13 se
+ 0xF9A1 => 0x8AAA, # 70-82 yeol
+ # 71-08 yeob
+ 0xF96E => 0x8449, # 64-81 seob
+ # 67-06 seub
+ 0xF973 => 0x62FE, # 68-09 sib
+ # 67-59 sig
+ 0xF9FC => 0x8B58, # 82-29 ji
+ # 82-67 jin
+ 0xF971 => 0x8FB0, # 67-85 sin
+ # 86-56 cim
+ 0xF972 => 0x6C88, # 68-01 sim
+ # 68-07 sib
+ 0xF9FD => 0x4EC0, # 82-90 jib
+ # 68-34 ag
+ 0xF9B9 => 0x60E1, # 71-87 o
+ # 69-20 yag
+ 0xF974 => 0x82E5, # 69-14 ya
+ # 70-22 yeog
+ 0xF9E0 => 0x6613, # 76-15 i
+ # 76-54 in
+ 0xF99E => 0x54BD, # 70-76 yeol
+ # 91-09 hyeong
+ 0xF9AE => 0x7469, # 71-33 yeong
+ # 72-54 wan
+ 0xF9C6 => 0x962E, # 74-33 weon
+ # 93-27 hun
+ 0xF9C5 => 0x6688, # 73-87 un
+ # 77-09 ja
+ 0xF9FF => 0x523A, # 84-07 ceog
+ # 77-19 ja
+ 0xF9FB => 0x7099, # 78-59 jeog
+ # 79-23 jeol
+ 0xFA00 => 0x5207, # 84-78 ce
+ # 84-12 ceog
+ 0xFA02 => 0x62D3, # 86-86 tag
+ # 88-76 pog
+ 0xFA06 => 0x66B4, # 88-59 po
+ # 90-28 haeng
+ 0xFA08 => 0x884C, # 90-01 hang
+);
+
+# Duplicates from Big 5
+%compat_big5 = (
+ 0xFA0C => 0x5140,
+ 0xFA0D => 0x55C0,
+);
+
+# The IBM 32 compatibility ideograph
+%compat_ibm32 = (
+ 0xFA10 => 0x585A,
+ 0xFA12 => 0x6674,
+ 0xFA15 => 0x51DE,
+ 0xFA16 => 0x732A,
+ 0xFA17 => 0x76CA,
+ 0xFA18 => 0x793C,
+ 0xFA19 => 0x795E,
+ 0xFA1A => 0x7965,
+ 0xFA1B => 0x798F,
+ 0xFA1C => 0x9756,
+ 0xFA1D => 0x7CBE,
+ 0xFA1E => 0x7FBD,
+ 0xFA20 => 0x8612,
+ 0xFA22 => 0x8AF8,
+ 0xFA25 => 0x9038,
+ 0xFA26 => 0x90FD,
+ 0xFA2A => 0x98EF,
+ 0xFA2B => 0x98FC,
+ 0xFA2C => 0x9928,
+ 0xFA2D => 0x9DB4,
+
+);
+
+# JIS X 0213 compatibility additions
+%compat_jisx0213 = (
+ 0xFA30 => 0x4FAE,
+ 0xFA31 => 0x50E7,
+ 0xFA32 => 0x514D,
+ 0xFA33 => 0x52C9,
+ 0xFA34 => 0x52E4,
+ 0xFA35 => 0x5351,
+ 0xFA36 => 0x559D,
+ 0xFA37 => 0x5606,
+ 0xFA38 => 0x5668,
+ 0xFA39 => 0x5840,
+ 0xFA3A => 0x58A8,
+ 0xFA3B => 0x5C64,
+ 0xFA3C => 0x5C6E,
+ 0xFA3D => 0x6094,
+ 0xFA3E => 0x6168,
+ 0xFA3F => 0x618E,
+ 0xFA40 => 0x61F2,
+ 0xFA41 => 0x654F,
+ 0xFA42 => 0x65E2,
+ 0xFA43 => 0x6691,
+ 0xFA44 => 0x6885,
+ 0xFA45 => 0x6D77,
+ 0xFA46 => 0x6E1A,
+ 0xFA47 => 0x6F22,
+ 0xFA48 => 0x716E,
+ 0xFA49 => 0x722B,
+ 0xFA4A => 0x7422,
+ 0xFA4B => 0x7891,
+ 0xFA4C => 0x793E,
+ 0xFA4D => 0x7949,
+ 0xFA4E => 0x7948,
+ 0xFA4F => 0x7950,
+ 0xFA50 => 0x7956,
+ 0xFA51 => 0x795D,
+ 0xFA52 => 0x798D,
+ 0xFA53 => 0x798E,
+ 0xFA54 => 0x7A40,
+ 0xFA55 => 0x7A81,
+ 0xFA56 => 0x7BC0,
+ 0xFA57 => 0x7DF4,
+ 0xFA58 => 0x7E09,
+ 0xFA59 => 0x7E41,
+ 0xFA5A => 0x7F72,
+ 0xFA5B => 0x8005,
+ 0xFA5C => 0x81ED,
+ 0xFA5D => 0x8279,
+ 0xFA5E => 0x8279,
+ 0xFA5F => 0x8457,
+ 0xFA60 => 0x8910,
+ 0xFA61 => 0x8996,
+ 0xFA62 => 0x8B01,
+ 0xFA63 => 0x8B39,
+ 0xFA64 => 0x8CD3,
+ 0xFA65 => 0x8D08,
+ 0xFA66 => 0x8FB6,
+ 0xFA67 => 0x9038,
+ 0xFA68 => 0x96E3,
+ 0xFA69 => 0x97FF,
+ 0xFA6A => 0x983B,
+);
+
+## CJK Compatibility Ideographs Supplement (U+2F800 - U+2FA1F)
+
+# Duplicate characters from CNS 11643-1992
+%compat_cns11643 = (
+ # By now we don't support CNS 11643.
+);
+
+
+1;
+
diff --git a/unicode/configure.in b/unicode/configure.in
new file mode 100644
index 0000000..a8adc78
--- /dev/null
+++ b/unicode/configure.in
@@ -0,0 +1,83 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(unicode, 0.10, [courier-maildrop@lists.sourceforge.net])
+
+>confdefs.h # Kill PACKAGE_ macros
+
+AC_CONFIG_SRCDIR(unicodecpp.C)
+AC_CONFIG_AUX_DIR(../..)
+
+LPATH="$PATH:/usr/local/bin"
+
+AM_CONFIG_HEADER(unicode_config.h)
+AM_INIT_AUTOMAKE([foreign no-define])
+dnl Checks for programs.
+
+AC_PROG_MAKE_SET
+AM_PROG_LIBTOOL
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_CC
+AC_PROG_CXX
+AC_PATH_PROGS(PERL, perl5 perl, perl, $LPATH)
+
+if test "$PERL" = "perl"
+then
+ AC_MSG_ERROR(Perl not found.)
+fi
+
+dnl Checks for libraries.
+
+dnl Checks for header files.
+
+AC_CHECK_HEADERS(stddef.h wchar.h locale.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+
+dnl Checks for library functions.
+
+AC_CHECK_FUNCS(setlocale)
+
+AM_CONDITIONAL(UPDATE_UNICODE, test -f ${srcdir}/UnicodeData.txt)
+
+AC_SYS_LARGEFILE
+
+AC_C_BIGENDIAN
+
+AC_MSG_CHECKING([whether libcharset is used])
+AC_ARG_WITH(libcharset,
+ [ --with-libcharset Use the libcharset library],
+ unicode_with_libcharset=$withval,
+ unicode_with_libcharset=no)
+AC_MSG_RESULT($unicode_with_libcharset)
+if test "$unicode_with_libcharset" = "yes"; then
+ AC_CHECK_LIB(charset,locale_charset)
+ if test "$ac_cv_lib_charset_locale_charset" = "yes"; then
+ AC_CHECK_HEADERS(localcharset.h libcharset.h)
+ else
+ AC_MSG_ERROR([libcharset was not found. Install libcharset package.])
+ fi
+ AC_DEFINE_UNQUOTED(UNICODE_USE_LIBCHARSET, 1,
+ [ Set this to 1 to use libcharset library. ])
+else
+ AM_LANGINFO_CODESET
+fi
+
+save_LIBS="$LIBS"
+
+LIBS="$LIBS -liconv"
+
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
+#include <iconv.h>
+],[
+
+iconv_open("","");
+])] ,[ : ], [LIBS="$save_LIBS"])
+
+if test "$GCC" = "yes"
+then
+ CFLAGS="$CFLAGS -Wall -fexceptions"
+fi
+CFLAGS="-I.. -I$srcdir/.. $CFLAGS"
+CXXFLAGS="-I.. -I$srcdir/.. $CXXFLAGS"
+AC_OUTPUT(Makefile)
diff --git a/unicode/eastasianwidth.h b/unicode/eastasianwidth.h
new file mode 100644
index 0000000..586e7ac
--- /dev/null
+++ b/unicode/eastasianwidth.h
@@ -0,0 +1,42 @@
+static const unicode_char unicode_wcwidth_tab[][2]={
+{0x1100, 0x115f},
+{0x11a3, 0x11a7},
+{0x11fa, 0x11ff},
+{0x2329, 0x232a},
+{0x2e80, 0x2e99},
+{0x2e9b, 0x2ef3},
+{0x2f00, 0x2fd5},
+{0x2ff0, 0x2ffb},
+{0x3000, 0x303e},
+{0x3041, 0x3096},
+{0x3099, 0x30ff},
+{0x3105, 0x312d},
+{0x3131, 0x318e},
+{0x3190, 0x31ba},
+{0x31c0, 0x31e3},
+{0x31f0, 0x321e},
+{0x3220, 0x3247},
+{0x3250, 0x32fe},
+{0x3300, 0x4dbf},
+{0x4e00, 0xa48c},
+{0xa490, 0xa4c6},
+{0xa960, 0xa97c},
+{0xac00, 0xd7a3},
+{0xd7b0, 0xd7c6},
+{0xd7cb, 0xd7fb},
+{0xf900, 0xfaff},
+{0xfe10, 0xfe19},
+{0xfe30, 0xfe52},
+{0xfe54, 0xfe66},
+{0xfe68, 0xfe6b},
+{0xff01, 0xff60},
+{0xffe0, 0xffe6},
+{0x1b000, 0x1b001},
+{0x1f200, 0x1f202},
+{0x1f210, 0x1f23a},
+{0x1f240, 0x1f248},
+{0x1f250, 0x1f251},
+{0x20000, 0x2f73f},
+{0x2b740, 0x2fffd},
+{0x30000, 0x3fffd}
+};
diff --git a/unicode/enttest.c b/unicode/enttest.c
new file mode 100644
index 0000000..cf64390
--- /dev/null
+++ b/unicode/enttest.c
@@ -0,0 +1,55 @@
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+struct i {
+ size_t n_start;
+ size_t n_size;
+ unicode_char v;
+};
+
+#include "unicode_htmlent.h"
+
+static void testsuite()
+{
+ size_t j;
+
+ for (j=0; j<sizeof(ii)/sizeof(ii[0]); ++j)
+ {
+ char buf[60];
+
+ memcpy(buf, n + ii[j].n_start, ii[j].n_size);
+ buf[ii[j].n_size]=0;
+
+ if (unicode_html40ent_lookup(buf) != ii[j].v)
+ {
+ fprintf(stderr, "Did not find %s\n", buf);
+ exit(1);
+ }
+
+ strcat(buf, "X");
+
+ if (unicode_html40ent_lookup(buf) == ii[j].v)
+ {
+ fprintf(stderr, "Found %s?\n", buf);
+ exit(1);
+ }
+
+ buf[strlen(buf)-2]=0;
+
+ if (unicode_html40ent_lookup(buf) == ii[j].v)
+ {
+ fprintf(stderr, "Found %s?\n", buf);
+ exit(1);
+ }
+ }
+}
+
+int main(int argc, char **argv)
+{
+ testsuite();
+ return 0;
+}
diff --git a/unicode/graphemebreaktab.h b/unicode/graphemebreaktab.h
new file mode 100644
index 0000000..767c8f7
--- /dev/null
+++ b/unicode/graphemebreaktab.h
@@ -0,0 +1,5985 @@
+static const uint8_t unicode_rangetab[][2]={
+ {0x0000 & 0xFF, 0x0009 & 0xFF},
+ {0x000a & 0xFF, 0x000a & 0xFF},
+ {0x000b & 0xFF, 0x000c & 0xFF},
+ {0x000d & 0xFF, 0x000d & 0xFF},
+ {0x000e & 0xFF, 0x001f & 0xFF},
+ {0x007f & 0xFF, 0x009f & 0xFF},
+ {0x00ad & 0xFF, 0x00ad & 0xFF},
+ {0x0300 & 0xFF, 0x036f & 0xFF},
+ {0x0483 & 0xFF, 0x0489 & 0xFF},
+ {0x0591 & 0xFF, 0x05bd & 0xFF},
+ {0x05bf & 0xFF, 0x05bf & 0xFF},
+ {0x05c1 & 0xFF, 0x05c2 & 0xFF},
+ {0x05c4 & 0xFF, 0x05c5 & 0xFF},
+ {0x05c7 & 0xFF, 0x05c7 & 0xFF},
+ {0x0600 & 0xFF, 0x0603 & 0xFF},
+ {0x0610 & 0xFF, 0x061a & 0xFF},
+ {0x064b & 0xFF, 0x065f & 0xFF},
+ {0x0670 & 0xFF, 0x0670 & 0xFF},
+ {0x06d6 & 0xFF, 0x06dc & 0xFF},
+ {0x06dd & 0xFF, 0x06dd & 0xFF},
+ {0x06df & 0xFF, 0x06e4 & 0xFF},
+ {0x06e7 & 0xFF, 0x06e8 & 0xFF},
+ {0x06ea & 0xFF, 0x06ed & 0xFF},
+ {0x070f & 0xFF, 0x070f & 0xFF},
+ {0x0711 & 0xFF, 0x0711 & 0xFF},
+ {0x0730 & 0xFF, 0x074a & 0xFF},
+ {0x07a6 & 0xFF, 0x07b0 & 0xFF},
+ {0x07eb & 0xFF, 0x07f3 & 0xFF},
+ {0x0816 & 0xFF, 0x0819 & 0xFF},
+ {0x081b & 0xFF, 0x0823 & 0xFF},
+ {0x0825 & 0xFF, 0x0827 & 0xFF},
+ {0x0829 & 0xFF, 0x082d & 0xFF},
+ {0x0859 & 0xFF, 0x085b & 0xFF},
+ {0x0900 & 0xFF, 0x0902 & 0xFF},
+ {0x0903 & 0xFF, 0x0903 & 0xFF},
+ {0x093a & 0xFF, 0x093a & 0xFF},
+ {0x093b & 0xFF, 0x093b & 0xFF},
+ {0x093c & 0xFF, 0x093c & 0xFF},
+ {0x093e & 0xFF, 0x0940 & 0xFF},
+ {0x0941 & 0xFF, 0x0948 & 0xFF},
+ {0x0949 & 0xFF, 0x094c & 0xFF},
+ {0x094d & 0xFF, 0x094d & 0xFF},
+ {0x094e & 0xFF, 0x094f & 0xFF},
+ {0x0951 & 0xFF, 0x0957 & 0xFF},
+ {0x0962 & 0xFF, 0x0963 & 0xFF},
+ {0x0981 & 0xFF, 0x0981 & 0xFF},
+ {0x0982 & 0xFF, 0x0983 & 0xFF},
+ {0x09bc & 0xFF, 0x09bc & 0xFF},
+ {0x09be & 0xFF, 0x09be & 0xFF},
+ {0x09bf & 0xFF, 0x09c0 & 0xFF},
+ {0x09c1 & 0xFF, 0x09c4 & 0xFF},
+ {0x09c7 & 0xFF, 0x09c8 & 0xFF},
+ {0x09cb & 0xFF, 0x09cc & 0xFF},
+ {0x09cd & 0xFF, 0x09cd & 0xFF},
+ {0x09d7 & 0xFF, 0x09d7 & 0xFF},
+ {0x09e2 & 0xFF, 0x09e3 & 0xFF},
+ {0x0a01 & 0xFF, 0x0a02 & 0xFF},
+ {0x0a03 & 0xFF, 0x0a03 & 0xFF},
+ {0x0a3c & 0xFF, 0x0a3c & 0xFF},
+ {0x0a3e & 0xFF, 0x0a40 & 0xFF},
+ {0x0a41 & 0xFF, 0x0a42 & 0xFF},
+ {0x0a47 & 0xFF, 0x0a48 & 0xFF},
+ {0x0a4b & 0xFF, 0x0a4d & 0xFF},
+ {0x0a51 & 0xFF, 0x0a51 & 0xFF},
+ {0x0a70 & 0xFF, 0x0a71 & 0xFF},
+ {0x0a75 & 0xFF, 0x0a75 & 0xFF},
+ {0x0a81 & 0xFF, 0x0a82 & 0xFF},
+ {0x0a83 & 0xFF, 0x0a83 & 0xFF},
+ {0x0abc & 0xFF, 0x0abc & 0xFF},
+ {0x0abe & 0xFF, 0x0ac0 & 0xFF},
+ {0x0ac1 & 0xFF, 0x0ac5 & 0xFF},
+ {0x0ac7 & 0xFF, 0x0ac8 & 0xFF},
+ {0x0ac9 & 0xFF, 0x0ac9 & 0xFF},
+ {0x0acb & 0xFF, 0x0acc & 0xFF},
+ {0x0acd & 0xFF, 0x0acd & 0xFF},
+ {0x0ae2 & 0xFF, 0x0ae3 & 0xFF},
+ {0x0b01 & 0xFF, 0x0b01 & 0xFF},
+ {0x0b02 & 0xFF, 0x0b03 & 0xFF},
+ {0x0b3c & 0xFF, 0x0b3c & 0xFF},
+ {0x0b3e & 0xFF, 0x0b3f & 0xFF},
+ {0x0b40 & 0xFF, 0x0b40 & 0xFF},
+ {0x0b41 & 0xFF, 0x0b44 & 0xFF},
+ {0x0b47 & 0xFF, 0x0b48 & 0xFF},
+ {0x0b4b & 0xFF, 0x0b4c & 0xFF},
+ {0x0b4d & 0xFF, 0x0b4d & 0xFF},
+ {0x0b56 & 0xFF, 0x0b57 & 0xFF},
+ {0x0b62 & 0xFF, 0x0b63 & 0xFF},
+ {0x0b82 & 0xFF, 0x0b82 & 0xFF},
+ {0x0bbe & 0xFF, 0x0bbe & 0xFF},
+ {0x0bbf & 0xFF, 0x0bbf & 0xFF},
+ {0x0bc0 & 0xFF, 0x0bc0 & 0xFF},
+ {0x0bc1 & 0xFF, 0x0bc2 & 0xFF},
+ {0x0bc6 & 0xFF, 0x0bc8 & 0xFF},
+ {0x0bca & 0xFF, 0x0bcc & 0xFF},
+ {0x0bcd & 0xFF, 0x0bcd & 0xFF},
+ {0x0bd7 & 0xFF, 0x0bd7 & 0xFF},
+ {0x0c01 & 0xFF, 0x0c03 & 0xFF},
+ {0x0c3e & 0xFF, 0x0c40 & 0xFF},
+ {0x0c41 & 0xFF, 0x0c44 & 0xFF},
+ {0x0c46 & 0xFF, 0x0c48 & 0xFF},
+ {0x0c4a & 0xFF, 0x0c4d & 0xFF},
+ {0x0c55 & 0xFF, 0x0c56 & 0xFF},
+ {0x0c62 & 0xFF, 0x0c63 & 0xFF},
+ {0x0c82 & 0xFF, 0x0c83 & 0xFF},
+ {0x0cbc & 0xFF, 0x0cbc & 0xFF},
+ {0x0cbe & 0xFF, 0x0cbe & 0xFF},
+ {0x0cbf & 0xFF, 0x0cbf & 0xFF},
+ {0x0cc0 & 0xFF, 0x0cc1 & 0xFF},
+ {0x0cc2 & 0xFF, 0x0cc2 & 0xFF},
+ {0x0cc3 & 0xFF, 0x0cc4 & 0xFF},
+ {0x0cc6 & 0xFF, 0x0cc6 & 0xFF},
+ {0x0cc7 & 0xFF, 0x0cc8 & 0xFF},
+ {0x0cca & 0xFF, 0x0ccb & 0xFF},
+ {0x0ccc & 0xFF, 0x0ccd & 0xFF},
+ {0x0cd5 & 0xFF, 0x0cd6 & 0xFF},
+ {0x0ce2 & 0xFF, 0x0ce3 & 0xFF},
+ {0x0d02 & 0xFF, 0x0d03 & 0xFF},
+ {0x0d3e & 0xFF, 0x0d3e & 0xFF},
+ {0x0d3f & 0xFF, 0x0d40 & 0xFF},
+ {0x0d41 & 0xFF, 0x0d44 & 0xFF},
+ {0x0d46 & 0xFF, 0x0d48 & 0xFF},
+ {0x0d4a & 0xFF, 0x0d4c & 0xFF},
+ {0x0d4d & 0xFF, 0x0d4d & 0xFF},
+ {0x0d57 & 0xFF, 0x0d57 & 0xFF},
+ {0x0d62 & 0xFF, 0x0d63 & 0xFF},
+ {0x0d82 & 0xFF, 0x0d83 & 0xFF},
+ {0x0dca & 0xFF, 0x0dca & 0xFF},
+ {0x0dcf & 0xFF, 0x0dcf & 0xFF},
+ {0x0dd0 & 0xFF, 0x0dd1 & 0xFF},
+ {0x0dd2 & 0xFF, 0x0dd4 & 0xFF},
+ {0x0dd6 & 0xFF, 0x0dd6 & 0xFF},
+ {0x0dd8 & 0xFF, 0x0dde & 0xFF},
+ {0x0ddf & 0xFF, 0x0ddf & 0xFF},
+ {0x0df2 & 0xFF, 0x0df3 & 0xFF},
+ {0x0e30 & 0xFF, 0x0e30 & 0xFF},
+ {0x0e31 & 0xFF, 0x0e31 & 0xFF},
+ {0x0e32 & 0xFF, 0x0e33 & 0xFF},
+ {0x0e34 & 0xFF, 0x0e3a & 0xFF},
+ {0x0e40 & 0xFF, 0x0e44 & 0xFF},
+ {0x0e45 & 0xFF, 0x0e45 & 0xFF},
+ {0x0e47 & 0xFF, 0x0e4e & 0xFF},
+ {0x0eb0 & 0xFF, 0x0eb0 & 0xFF},
+ {0x0eb1 & 0xFF, 0x0eb1 & 0xFF},
+ {0x0eb2 & 0xFF, 0x0eb3 & 0xFF},
+ {0x0eb4 & 0xFF, 0x0eb9 & 0xFF},
+ {0x0ebb & 0xFF, 0x0ebc & 0xFF},
+ {0x0ec0 & 0xFF, 0x0ec4 & 0xFF},
+ {0x0ec8 & 0xFF, 0x0ecd & 0xFF},
+ {0x0f18 & 0xFF, 0x0f19 & 0xFF},
+ {0x0f35 & 0xFF, 0x0f35 & 0xFF},
+ {0x0f37 & 0xFF, 0x0f37 & 0xFF},
+ {0x0f39 & 0xFF, 0x0f39 & 0xFF},
+ {0x0f3e & 0xFF, 0x0f3f & 0xFF},
+ {0x0f71 & 0xFF, 0x0f7e & 0xFF},
+ {0x0f7f & 0xFF, 0x0f7f & 0xFF},
+ {0x0f80 & 0xFF, 0x0f84 & 0xFF},
+ {0x0f86 & 0xFF, 0x0f87 & 0xFF},
+ {0x0f8d & 0xFF, 0x0f97 & 0xFF},
+ {0x0f99 & 0xFF, 0x0fbc & 0xFF},
+ {0x0fc6 & 0xFF, 0x0fc6 & 0xFF},
+ {0x102b & 0xFF, 0x102c & 0xFF},
+ {0x102d & 0xFF, 0x1030 & 0xFF},
+ {0x1031 & 0xFF, 0x1031 & 0xFF},
+ {0x1032 & 0xFF, 0x1037 & 0xFF},
+ {0x1038 & 0xFF, 0x1038 & 0xFF},
+ {0x1039 & 0xFF, 0x103a & 0xFF},
+ {0x103b & 0xFF, 0x103c & 0xFF},
+ {0x103d & 0xFF, 0x103e & 0xFF},
+ {0x1056 & 0xFF, 0x1057 & 0xFF},
+ {0x1058 & 0xFF, 0x1059 & 0xFF},
+ {0x105e & 0xFF, 0x1060 & 0xFF},
+ {0x1062 & 0xFF, 0x1064 & 0xFF},
+ {0x1067 & 0xFF, 0x106d & 0xFF},
+ {0x1071 & 0xFF, 0x1074 & 0xFF},
+ {0x1082 & 0xFF, 0x1082 & 0xFF},
+ {0x1083 & 0xFF, 0x1084 & 0xFF},
+ {0x1085 & 0xFF, 0x1086 & 0xFF},
+ {0x1087 & 0xFF, 0x108c & 0xFF},
+ {0x108d & 0xFF, 0x108d & 0xFF},
+ {0x108f & 0xFF, 0x108f & 0xFF},
+ {0x109a & 0xFF, 0x109c & 0xFF},
+ {0x109d & 0xFF, 0x109d & 0xFF},
+ {0x1100 & 0xFF, 0x115f & 0xFF},
+ {0x1160 & 0xFF, 0x11a7 & 0xFF},
+ {0x11a8 & 0xFF, 0x11ff & 0xFF},
+ {0x135d & 0xFF, 0x135f & 0xFF},
+ {0x1712 & 0xFF, 0x1714 & 0xFF},
+ {0x1732 & 0xFF, 0x1734 & 0xFF},
+ {0x1752 & 0xFF, 0x1753 & 0xFF},
+ {0x1772 & 0xFF, 0x1773 & 0xFF},
+ {0x17b4 & 0xFF, 0x17b5 & 0xFF},
+ {0x17b6 & 0xFF, 0x17b6 & 0xFF},
+ {0x17b7 & 0xFF, 0x17bd & 0xFF},
+ {0x17be & 0xFF, 0x17c5 & 0xFF},
+ {0x17c6 & 0xFF, 0x17c6 & 0xFF},
+ {0x17c7 & 0xFF, 0x17c8 & 0xFF},
+ {0x17c9 & 0xFF, 0x17d3 & 0xFF},
+ {0x17dd & 0xFF, 0x17dd & 0xFF},
+ {0x180b & 0xFF, 0x180d & 0xFF},
+ {0x18a9 & 0xFF, 0x18a9 & 0xFF},
+ {0x1920 & 0xFF, 0x1922 & 0xFF},
+ {0x1923 & 0xFF, 0x1926 & 0xFF},
+ {0x1927 & 0xFF, 0x1928 & 0xFF},
+ {0x1929 & 0xFF, 0x192b & 0xFF},
+ {0x1930 & 0xFF, 0x1931 & 0xFF},
+ {0x1932 & 0xFF, 0x1932 & 0xFF},
+ {0x1933 & 0xFF, 0x1938 & 0xFF},
+ {0x1939 & 0xFF, 0x193b & 0xFF},
+ {0x19b0 & 0xFF, 0x19c0 & 0xFF},
+ {0x19c8 & 0xFF, 0x19c9 & 0xFF},
+ {0x1a17 & 0xFF, 0x1a18 & 0xFF},
+ {0x1a19 & 0xFF, 0x1a1b & 0xFF},
+ {0x1a55 & 0xFF, 0x1a55 & 0xFF},
+ {0x1a56 & 0xFF, 0x1a56 & 0xFF},
+ {0x1a57 & 0xFF, 0x1a57 & 0xFF},
+ {0x1a58 & 0xFF, 0x1a5e & 0xFF},
+ {0x1a60 & 0xFF, 0x1a60 & 0xFF},
+ {0x1a61 & 0xFF, 0x1a61 & 0xFF},
+ {0x1a62 & 0xFF, 0x1a62 & 0xFF},
+ {0x1a63 & 0xFF, 0x1a64 & 0xFF},
+ {0x1a65 & 0xFF, 0x1a6c & 0xFF},
+ {0x1a6d & 0xFF, 0x1a72 & 0xFF},
+ {0x1a73 & 0xFF, 0x1a7c & 0xFF},
+ {0x1a7f & 0xFF, 0x1a7f & 0xFF},
+ {0x1b00 & 0xFF, 0x1b03 & 0xFF},
+ {0x1b04 & 0xFF, 0x1b04 & 0xFF},
+ {0x1b34 & 0xFF, 0x1b34 & 0xFF},
+ {0x1b35 & 0xFF, 0x1b35 & 0xFF},
+ {0x1b36 & 0xFF, 0x1b3a & 0xFF},
+ {0x1b3b & 0xFF, 0x1b3b & 0xFF},
+ {0x1b3c & 0xFF, 0x1b3c & 0xFF},
+ {0x1b3d & 0xFF, 0x1b41 & 0xFF},
+ {0x1b42 & 0xFF, 0x1b42 & 0xFF},
+ {0x1b43 & 0xFF, 0x1b44 & 0xFF},
+ {0x1b6b & 0xFF, 0x1b73 & 0xFF},
+ {0x1b80 & 0xFF, 0x1b81 & 0xFF},
+ {0x1b82 & 0xFF, 0x1b82 & 0xFF},
+ {0x1ba1 & 0xFF, 0x1ba1 & 0xFF},
+ {0x1ba2 & 0xFF, 0x1ba5 & 0xFF},
+ {0x1ba6 & 0xFF, 0x1ba7 & 0xFF},
+ {0x1ba8 & 0xFF, 0x1ba9 & 0xFF},
+ {0x1baa & 0xFF, 0x1baa & 0xFF},
+ {0x1be6 & 0xFF, 0x1be6 & 0xFF},
+ {0x1be7 & 0xFF, 0x1be7 & 0xFF},
+ {0x1be8 & 0xFF, 0x1be9 & 0xFF},
+ {0x1bea & 0xFF, 0x1bec & 0xFF},
+ {0x1bed & 0xFF, 0x1bed & 0xFF},
+ {0x1bee & 0xFF, 0x1bee & 0xFF},
+ {0x1bef & 0xFF, 0x1bf1 & 0xFF},
+ {0x1bf2 & 0xFF, 0x1bf3 & 0xFF},
+ {0x1c24 & 0xFF, 0x1c2b & 0xFF},
+ {0x1c2c & 0xFF, 0x1c33 & 0xFF},
+ {0x1c34 & 0xFF, 0x1c35 & 0xFF},
+ {0x1c36 & 0xFF, 0x1c37 & 0xFF},
+ {0x1cd0 & 0xFF, 0x1cd2 & 0xFF},
+ {0x1cd4 & 0xFF, 0x1ce0 & 0xFF},
+ {0x1ce1 & 0xFF, 0x1ce1 & 0xFF},
+ {0x1ce2 & 0xFF, 0x1ce8 & 0xFF},
+ {0x1ced & 0xFF, 0x1ced & 0xFF},
+ {0x1cf2 & 0xFF, 0x1cf2 & 0xFF},
+ {0x1dc0 & 0xFF, 0x1de6 & 0xFF},
+ {0x1dfc & 0xFF, 0x1dff & 0xFF},
+ {0x200b & 0xFF, 0x200b & 0xFF},
+ {0x200c & 0xFF, 0x200d & 0xFF},
+ {0x200e & 0xFF, 0x200f & 0xFF},
+ {0x2028 & 0xFF, 0x202e & 0xFF},
+ {0x2060 & 0xFF, 0x2064 & 0xFF},
+ {0x206a & 0xFF, 0x206f & 0xFF},
+ {0x20d0 & 0xFF, 0x20f0 & 0xFF},
+ {0x2cef & 0xFF, 0x2cf1 & 0xFF},
+ {0x2d7f & 0xFF, 0x2d7f & 0xFF},
+ {0x2de0 & 0xFF, 0x2dff & 0xFF},
+ {0x302a & 0xFF, 0x302f & 0xFF},
+ {0x3099 & 0xFF, 0x309a & 0xFF},
+ {0xa66f & 0xFF, 0xa672 & 0xFF},
+ {0xa67c & 0xFF, 0xa67d & 0xFF},
+ {0xa6f0 & 0xFF, 0xa6f1 & 0xFF},
+ {0xa802 & 0xFF, 0xa802 & 0xFF},
+ {0xa806 & 0xFF, 0xa806 & 0xFF},
+ {0xa80b & 0xFF, 0xa80b & 0xFF},
+ {0xa823 & 0xFF, 0xa824 & 0xFF},
+ {0xa825 & 0xFF, 0xa826 & 0xFF},
+ {0xa827 & 0xFF, 0xa827 & 0xFF},
+ {0xa880 & 0xFF, 0xa881 & 0xFF},
+ {0xa8b4 & 0xFF, 0xa8c3 & 0xFF},
+ {0xa8c4 & 0xFF, 0xa8c4 & 0xFF},
+ {0xa8e0 & 0xFF, 0xa8f1 & 0xFF},
+ {0xa926 & 0xFF, 0xa92d & 0xFF},
+ {0xa947 & 0xFF, 0xa951 & 0xFF},
+ {0xa952 & 0xFF, 0xa953 & 0xFF},
+ {0xa960 & 0xFF, 0xa97c & 0xFF},
+ {0xa980 & 0xFF, 0xa982 & 0xFF},
+ {0xa983 & 0xFF, 0xa983 & 0xFF},
+ {0xa9b3 & 0xFF, 0xa9b3 & 0xFF},
+ {0xa9b4 & 0xFF, 0xa9b5 & 0xFF},
+ {0xa9b6 & 0xFF, 0xa9b9 & 0xFF},
+ {0xa9ba & 0xFF, 0xa9bb & 0xFF},
+ {0xa9bc & 0xFF, 0xa9bc & 0xFF},
+ {0xa9bd & 0xFF, 0xa9c0 & 0xFF},
+ {0xaa29 & 0xFF, 0xaa2e & 0xFF},
+ {0xaa2f & 0xFF, 0xaa30 & 0xFF},
+ {0xaa31 & 0xFF, 0xaa32 & 0xFF},
+ {0xaa33 & 0xFF, 0xaa34 & 0xFF},
+ {0xaa35 & 0xFF, 0xaa36 & 0xFF},
+ {0xaa43 & 0xFF, 0xaa43 & 0xFF},
+ {0xaa4c & 0xFF, 0xaa4c & 0xFF},
+ {0xaa4d & 0xFF, 0xaa4d & 0xFF},
+ {0xaa7b & 0xFF, 0xaa7b & 0xFF},
+ {0xaab0 & 0xFF, 0xaab0 & 0xFF},
+ {0xaab2 & 0xFF, 0xaab4 & 0xFF},
+ {0xaab5 & 0xFF, 0xaab6 & 0xFF},
+ {0xaab7 & 0xFF, 0xaab8 & 0xFF},
+ {0xaab9 & 0xFF, 0xaab9 & 0xFF},
+ {0xaabb & 0xFF, 0xaabc & 0xFF},
+ {0xaabe & 0xFF, 0xaabf & 0xFF},
+ {0xaac1 & 0xFF, 0xaac1 & 0xFF},
+ {0xabe3 & 0xFF, 0xabe4 & 0xFF},
+ {0xabe5 & 0xFF, 0xabe5 & 0xFF},
+ {0xabe6 & 0xFF, 0xabe7 & 0xFF},
+ {0xabe8 & 0xFF, 0xabe8 & 0xFF},
+ {0xabe9 & 0xFF, 0xabea & 0xFF},
+ {0xabec & 0xFF, 0xabec & 0xFF},
+ {0xabed & 0xFF, 0xabed & 0xFF},
+ {0xac00 & 0xFF, 0xac00 & 0xFF},
+ {0xac01 & 0xFF, 0xac1b & 0xFF},
+ {0xac1c & 0xFF, 0xac1c & 0xFF},
+ {0xac1d & 0xFF, 0xac37 & 0xFF},
+ {0xac38 & 0xFF, 0xac38 & 0xFF},
+ {0xac39 & 0xFF, 0xac53 & 0xFF},
+ {0xac54 & 0xFF, 0xac54 & 0xFF},
+ {0xac55 & 0xFF, 0xac6f & 0xFF},
+ {0xac70 & 0xFF, 0xac70 & 0xFF},
+ {0xac71 & 0xFF, 0xac8b & 0xFF},
+ {0xac8c & 0xFF, 0xac8c & 0xFF},
+ {0xac8d & 0xFF, 0xaca7 & 0xFF},
+ {0xaca8 & 0xFF, 0xaca8 & 0xFF},
+ {0xaca9 & 0xFF, 0xacc3 & 0xFF},
+ {0xacc4 & 0xFF, 0xacc4 & 0xFF},
+ {0xacc5 & 0xFF, 0xacdf & 0xFF},
+ {0xace0 & 0xFF, 0xace0 & 0xFF},
+ {0xace1 & 0xFF, 0xacfb & 0xFF},
+ {0xacfc & 0xFF, 0xacfc & 0xFF},
+ {0xacfd & 0xFF, 0xacff & 0xFF},
+ {0xad00 & 0xFF, 0xad17 & 0xFF},
+ {0xad18 & 0xFF, 0xad18 & 0xFF},
+ {0xad19 & 0xFF, 0xad33 & 0xFF},
+ {0xad34 & 0xFF, 0xad34 & 0xFF},
+ {0xad35 & 0xFF, 0xad4f & 0xFF},
+ {0xad50 & 0xFF, 0xad50 & 0xFF},
+ {0xad51 & 0xFF, 0xad6b & 0xFF},
+ {0xad6c & 0xFF, 0xad6c & 0xFF},
+ {0xad6d & 0xFF, 0xad87 & 0xFF},
+ {0xad88 & 0xFF, 0xad88 & 0xFF},
+ {0xad89 & 0xFF, 0xada3 & 0xFF},
+ {0xada4 & 0xFF, 0xada4 & 0xFF},
+ {0xada5 & 0xFF, 0xadbf & 0xFF},
+ {0xadc0 & 0xFF, 0xadc0 & 0xFF},
+ {0xadc1 & 0xFF, 0xaddb & 0xFF},
+ {0xaddc & 0xFF, 0xaddc & 0xFF},
+ {0xaddd & 0xFF, 0xadf7 & 0xFF},
+ {0xadf8 & 0xFF, 0xadf8 & 0xFF},
+ {0xadf9 & 0xFF, 0xadff & 0xFF},
+ {0xae00 & 0xFF, 0xae13 & 0xFF},
+ {0xae14 & 0xFF, 0xae14 & 0xFF},
+ {0xae15 & 0xFF, 0xae2f & 0xFF},
+ {0xae30 & 0xFF, 0xae30 & 0xFF},
+ {0xae31 & 0xFF, 0xae4b & 0xFF},
+ {0xae4c & 0xFF, 0xae4c & 0xFF},
+ {0xae4d & 0xFF, 0xae67 & 0xFF},
+ {0xae68 & 0xFF, 0xae68 & 0xFF},
+ {0xae69 & 0xFF, 0xae83 & 0xFF},
+ {0xae84 & 0xFF, 0xae84 & 0xFF},
+ {0xae85 & 0xFF, 0xae9f & 0xFF},
+ {0xaea0 & 0xFF, 0xaea0 & 0xFF},
+ {0xaea1 & 0xFF, 0xaebb & 0xFF},
+ {0xaebc & 0xFF, 0xaebc & 0xFF},
+ {0xaebd & 0xFF, 0xaed7 & 0xFF},
+ {0xaed8 & 0xFF, 0xaed8 & 0xFF},
+ {0xaed9 & 0xFF, 0xaef3 & 0xFF},
+ {0xaef4 & 0xFF, 0xaef4 & 0xFF},
+ {0xaef5 & 0xFF, 0xaeff & 0xFF},
+ {0xaf00 & 0xFF, 0xaf0f & 0xFF},
+ {0xaf10 & 0xFF, 0xaf10 & 0xFF},
+ {0xaf11 & 0xFF, 0xaf2b & 0xFF},
+ {0xaf2c & 0xFF, 0xaf2c & 0xFF},
+ {0xaf2d & 0xFF, 0xaf47 & 0xFF},
+ {0xaf48 & 0xFF, 0xaf48 & 0xFF},
+ {0xaf49 & 0xFF, 0xaf63 & 0xFF},
+ {0xaf64 & 0xFF, 0xaf64 & 0xFF},
+ {0xaf65 & 0xFF, 0xaf7f & 0xFF},
+ {0xaf80 & 0xFF, 0xaf80 & 0xFF},
+ {0xaf81 & 0xFF, 0xaf9b & 0xFF},
+ {0xaf9c & 0xFF, 0xaf9c & 0xFF},
+ {0xaf9d & 0xFF, 0xafb7 & 0xFF},
+ {0xafb8 & 0xFF, 0xafb8 & 0xFF},
+ {0xafb9 & 0xFF, 0xafd3 & 0xFF},
+ {0xafd4 & 0xFF, 0xafd4 & 0xFF},
+ {0xafd5 & 0xFF, 0xafef & 0xFF},
+ {0xaff0 & 0xFF, 0xaff0 & 0xFF},
+ {0xaff1 & 0xFF, 0xafff & 0xFF},
+ {0xb000 & 0xFF, 0xb00b & 0xFF},
+ {0xb00c & 0xFF, 0xb00c & 0xFF},
+ {0xb00d & 0xFF, 0xb027 & 0xFF},
+ {0xb028 & 0xFF, 0xb028 & 0xFF},
+ {0xb029 & 0xFF, 0xb043 & 0xFF},
+ {0xb044 & 0xFF, 0xb044 & 0xFF},
+ {0xb045 & 0xFF, 0xb05f & 0xFF},
+ {0xb060 & 0xFF, 0xb060 & 0xFF},
+ {0xb061 & 0xFF, 0xb07b & 0xFF},
+ {0xb07c & 0xFF, 0xb07c & 0xFF},
+ {0xb07d & 0xFF, 0xb097 & 0xFF},
+ {0xb098 & 0xFF, 0xb098 & 0xFF},
+ {0xb099 & 0xFF, 0xb0b3 & 0xFF},
+ {0xb0b4 & 0xFF, 0xb0b4 & 0xFF},
+ {0xb0b5 & 0xFF, 0xb0cf & 0xFF},
+ {0xb0d0 & 0xFF, 0xb0d0 & 0xFF},
+ {0xb0d1 & 0xFF, 0xb0eb & 0xFF},
+ {0xb0ec & 0xFF, 0xb0ec & 0xFF},
+ {0xb0ed & 0xFF, 0xb0ff & 0xFF},
+ {0xb100 & 0xFF, 0xb107 & 0xFF},
+ {0xb108 & 0xFF, 0xb108 & 0xFF},
+ {0xb109 & 0xFF, 0xb123 & 0xFF},
+ {0xb124 & 0xFF, 0xb124 & 0xFF},
+ {0xb125 & 0xFF, 0xb13f & 0xFF},
+ {0xb140 & 0xFF, 0xb140 & 0xFF},
+ {0xb141 & 0xFF, 0xb15b & 0xFF},
+ {0xb15c & 0xFF, 0xb15c & 0xFF},
+ {0xb15d & 0xFF, 0xb177 & 0xFF},
+ {0xb178 & 0xFF, 0xb178 & 0xFF},
+ {0xb179 & 0xFF, 0xb193 & 0xFF},
+ {0xb194 & 0xFF, 0xb194 & 0xFF},
+ {0xb195 & 0xFF, 0xb1af & 0xFF},
+ {0xb1b0 & 0xFF, 0xb1b0 & 0xFF},
+ {0xb1b1 & 0xFF, 0xb1cb & 0xFF},
+ {0xb1cc & 0xFF, 0xb1cc & 0xFF},
+ {0xb1cd & 0xFF, 0xb1e7 & 0xFF},
+ {0xb1e8 & 0xFF, 0xb1e8 & 0xFF},
+ {0xb1e9 & 0xFF, 0xb1ff & 0xFF},
+ {0xb200 & 0xFF, 0xb203 & 0xFF},
+ {0xb204 & 0xFF, 0xb204 & 0xFF},
+ {0xb205 & 0xFF, 0xb21f & 0xFF},
+ {0xb220 & 0xFF, 0xb220 & 0xFF},
+ {0xb221 & 0xFF, 0xb23b & 0xFF},
+ {0xb23c & 0xFF, 0xb23c & 0xFF},
+ {0xb23d & 0xFF, 0xb257 & 0xFF},
+ {0xb258 & 0xFF, 0xb258 & 0xFF},
+ {0xb259 & 0xFF, 0xb273 & 0xFF},
+ {0xb274 & 0xFF, 0xb274 & 0xFF},
+ {0xb275 & 0xFF, 0xb28f & 0xFF},
+ {0xb290 & 0xFF, 0xb290 & 0xFF},
+ {0xb291 & 0xFF, 0xb2ab & 0xFF},
+ {0xb2ac & 0xFF, 0xb2ac & 0xFF},
+ {0xb2ad & 0xFF, 0xb2c7 & 0xFF},
+ {0xb2c8 & 0xFF, 0xb2c8 & 0xFF},
+ {0xb2c9 & 0xFF, 0xb2e3 & 0xFF},
+ {0xb2e4 & 0xFF, 0xb2e4 & 0xFF},
+ {0xb2e5 & 0xFF, 0xb2ff & 0xFF},
+ {0xb300 & 0xFF, 0xb300 & 0xFF},
+ {0xb301 & 0xFF, 0xb31b & 0xFF},
+ {0xb31c & 0xFF, 0xb31c & 0xFF},
+ {0xb31d & 0xFF, 0xb337 & 0xFF},
+ {0xb338 & 0xFF, 0xb338 & 0xFF},
+ {0xb339 & 0xFF, 0xb353 & 0xFF},
+ {0xb354 & 0xFF, 0xb354 & 0xFF},
+ {0xb355 & 0xFF, 0xb36f & 0xFF},
+ {0xb370 & 0xFF, 0xb370 & 0xFF},
+ {0xb371 & 0xFF, 0xb38b & 0xFF},
+ {0xb38c & 0xFF, 0xb38c & 0xFF},
+ {0xb38d & 0xFF, 0xb3a7 & 0xFF},
+ {0xb3a8 & 0xFF, 0xb3a8 & 0xFF},
+ {0xb3a9 & 0xFF, 0xb3c3 & 0xFF},
+ {0xb3c4 & 0xFF, 0xb3c4 & 0xFF},
+ {0xb3c5 & 0xFF, 0xb3df & 0xFF},
+ {0xb3e0 & 0xFF, 0xb3e0 & 0xFF},
+ {0xb3e1 & 0xFF, 0xb3fb & 0xFF},
+ {0xb3fc & 0xFF, 0xb3fc & 0xFF},
+ {0xb3fd & 0xFF, 0xb3ff & 0xFF},
+ {0xb400 & 0xFF, 0xb417 & 0xFF},
+ {0xb418 & 0xFF, 0xb418 & 0xFF},
+ {0xb419 & 0xFF, 0xb433 & 0xFF},
+ {0xb434 & 0xFF, 0xb434 & 0xFF},
+ {0xb435 & 0xFF, 0xb44f & 0xFF},
+ {0xb450 & 0xFF, 0xb450 & 0xFF},
+ {0xb451 & 0xFF, 0xb46b & 0xFF},
+ {0xb46c & 0xFF, 0xb46c & 0xFF},
+ {0xb46d & 0xFF, 0xb487 & 0xFF},
+ {0xb488 & 0xFF, 0xb488 & 0xFF},
+ {0xb489 & 0xFF, 0xb4a3 & 0xFF},
+ {0xb4a4 & 0xFF, 0xb4a4 & 0xFF},
+ {0xb4a5 & 0xFF, 0xb4bf & 0xFF},
+ {0xb4c0 & 0xFF, 0xb4c0 & 0xFF},
+ {0xb4c1 & 0xFF, 0xb4db & 0xFF},
+ {0xb4dc & 0xFF, 0xb4dc & 0xFF},
+ {0xb4dd & 0xFF, 0xb4f7 & 0xFF},
+ {0xb4f8 & 0xFF, 0xb4f8 & 0xFF},
+ {0xb4f9 & 0xFF, 0xb4ff & 0xFF},
+ {0xb500 & 0xFF, 0xb513 & 0xFF},
+ {0xb514 & 0xFF, 0xb514 & 0xFF},
+ {0xb515 & 0xFF, 0xb52f & 0xFF},
+ {0xb530 & 0xFF, 0xb530 & 0xFF},
+ {0xb531 & 0xFF, 0xb54b & 0xFF},
+ {0xb54c & 0xFF, 0xb54c & 0xFF},
+ {0xb54d & 0xFF, 0xb567 & 0xFF},
+ {0xb568 & 0xFF, 0xb568 & 0xFF},
+ {0xb569 & 0xFF, 0xb583 & 0xFF},
+ {0xb584 & 0xFF, 0xb584 & 0xFF},
+ {0xb585 & 0xFF, 0xb59f & 0xFF},
+ {0xb5a0 & 0xFF, 0xb5a0 & 0xFF},
+ {0xb5a1 & 0xFF, 0xb5bb & 0xFF},
+ {0xb5bc & 0xFF, 0xb5bc & 0xFF},
+ {0xb5bd & 0xFF, 0xb5d7 & 0xFF},
+ {0xb5d8 & 0xFF, 0xb5d8 & 0xFF},
+ {0xb5d9 & 0xFF, 0xb5f3 & 0xFF},
+ {0xb5f4 & 0xFF, 0xb5f4 & 0xFF},
+ {0xb5f5 & 0xFF, 0xb5ff & 0xFF},
+ {0xb600 & 0xFF, 0xb60f & 0xFF},
+ {0xb610 & 0xFF, 0xb610 & 0xFF},
+ {0xb611 & 0xFF, 0xb62b & 0xFF},
+ {0xb62c & 0xFF, 0xb62c & 0xFF},
+ {0xb62d & 0xFF, 0xb647 & 0xFF},
+ {0xb648 & 0xFF, 0xb648 & 0xFF},
+ {0xb649 & 0xFF, 0xb663 & 0xFF},
+ {0xb664 & 0xFF, 0xb664 & 0xFF},
+ {0xb665 & 0xFF, 0xb67f & 0xFF},
+ {0xb680 & 0xFF, 0xb680 & 0xFF},
+ {0xb681 & 0xFF, 0xb69b & 0xFF},
+ {0xb69c & 0xFF, 0xb69c & 0xFF},
+ {0xb69d & 0xFF, 0xb6b7 & 0xFF},
+ {0xb6b8 & 0xFF, 0xb6b8 & 0xFF},
+ {0xb6b9 & 0xFF, 0xb6d3 & 0xFF},
+ {0xb6d4 & 0xFF, 0xb6d4 & 0xFF},
+ {0xb6d5 & 0xFF, 0xb6ef & 0xFF},
+ {0xb6f0 & 0xFF, 0xb6f0 & 0xFF},
+ {0xb6f1 & 0xFF, 0xb6ff & 0xFF},
+ {0xb700 & 0xFF, 0xb70b & 0xFF},
+ {0xb70c & 0xFF, 0xb70c & 0xFF},
+ {0xb70d & 0xFF, 0xb727 & 0xFF},
+ {0xb728 & 0xFF, 0xb728 & 0xFF},
+ {0xb729 & 0xFF, 0xb743 & 0xFF},
+ {0xb744 & 0xFF, 0xb744 & 0xFF},
+ {0xb745 & 0xFF, 0xb75f & 0xFF},
+ {0xb760 & 0xFF, 0xb760 & 0xFF},
+ {0xb761 & 0xFF, 0xb77b & 0xFF},
+ {0xb77c & 0xFF, 0xb77c & 0xFF},
+ {0xb77d & 0xFF, 0xb797 & 0xFF},
+ {0xb798 & 0xFF, 0xb798 & 0xFF},
+ {0xb799 & 0xFF, 0xb7b3 & 0xFF},
+ {0xb7b4 & 0xFF, 0xb7b4 & 0xFF},
+ {0xb7b5 & 0xFF, 0xb7cf & 0xFF},
+ {0xb7d0 & 0xFF, 0xb7d0 & 0xFF},
+ {0xb7d1 & 0xFF, 0xb7eb & 0xFF},
+ {0xb7ec & 0xFF, 0xb7ec & 0xFF},
+ {0xb7ed & 0xFF, 0xb7ff & 0xFF},
+ {0xb800 & 0xFF, 0xb807 & 0xFF},
+ {0xb808 & 0xFF, 0xb808 & 0xFF},
+ {0xb809 & 0xFF, 0xb823 & 0xFF},
+ {0xb824 & 0xFF, 0xb824 & 0xFF},
+ {0xb825 & 0xFF, 0xb83f & 0xFF},
+ {0xb840 & 0xFF, 0xb840 & 0xFF},
+ {0xb841 & 0xFF, 0xb85b & 0xFF},
+ {0xb85c & 0xFF, 0xb85c & 0xFF},
+ {0xb85d & 0xFF, 0xb877 & 0xFF},
+ {0xb878 & 0xFF, 0xb878 & 0xFF},
+ {0xb879 & 0xFF, 0xb893 & 0xFF},
+ {0xb894 & 0xFF, 0xb894 & 0xFF},
+ {0xb895 & 0xFF, 0xb8af & 0xFF},
+ {0xb8b0 & 0xFF, 0xb8b0 & 0xFF},
+ {0xb8b1 & 0xFF, 0xb8cb & 0xFF},
+ {0xb8cc & 0xFF, 0xb8cc & 0xFF},
+ {0xb8cd & 0xFF, 0xb8e7 & 0xFF},
+ {0xb8e8 & 0xFF, 0xb8e8 & 0xFF},
+ {0xb8e9 & 0xFF, 0xb8ff & 0xFF},
+ {0xb900 & 0xFF, 0xb903 & 0xFF},
+ {0xb904 & 0xFF, 0xb904 & 0xFF},
+ {0xb905 & 0xFF, 0xb91f & 0xFF},
+ {0xb920 & 0xFF, 0xb920 & 0xFF},
+ {0xb921 & 0xFF, 0xb93b & 0xFF},
+ {0xb93c & 0xFF, 0xb93c & 0xFF},
+ {0xb93d & 0xFF, 0xb957 & 0xFF},
+ {0xb958 & 0xFF, 0xb958 & 0xFF},
+ {0xb959 & 0xFF, 0xb973 & 0xFF},
+ {0xb974 & 0xFF, 0xb974 & 0xFF},
+ {0xb975 & 0xFF, 0xb98f & 0xFF},
+ {0xb990 & 0xFF, 0xb990 & 0xFF},
+ {0xb991 & 0xFF, 0xb9ab & 0xFF},
+ {0xb9ac & 0xFF, 0xb9ac & 0xFF},
+ {0xb9ad & 0xFF, 0xb9c7 & 0xFF},
+ {0xb9c8 & 0xFF, 0xb9c8 & 0xFF},
+ {0xb9c9 & 0xFF, 0xb9e3 & 0xFF},
+ {0xb9e4 & 0xFF, 0xb9e4 & 0xFF},
+ {0xb9e5 & 0xFF, 0xb9ff & 0xFF},
+ {0xba00 & 0xFF, 0xba00 & 0xFF},
+ {0xba01 & 0xFF, 0xba1b & 0xFF},
+ {0xba1c & 0xFF, 0xba1c & 0xFF},
+ {0xba1d & 0xFF, 0xba37 & 0xFF},
+ {0xba38 & 0xFF, 0xba38 & 0xFF},
+ {0xba39 & 0xFF, 0xba53 & 0xFF},
+ {0xba54 & 0xFF, 0xba54 & 0xFF},
+ {0xba55 & 0xFF, 0xba6f & 0xFF},
+ {0xba70 & 0xFF, 0xba70 & 0xFF},
+ {0xba71 & 0xFF, 0xba8b & 0xFF},
+ {0xba8c & 0xFF, 0xba8c & 0xFF},
+ {0xba8d & 0xFF, 0xbaa7 & 0xFF},
+ {0xbaa8 & 0xFF, 0xbaa8 & 0xFF},
+ {0xbaa9 & 0xFF, 0xbac3 & 0xFF},
+ {0xbac4 & 0xFF, 0xbac4 & 0xFF},
+ {0xbac5 & 0xFF, 0xbadf & 0xFF},
+ {0xbae0 & 0xFF, 0xbae0 & 0xFF},
+ {0xbae1 & 0xFF, 0xbafb & 0xFF},
+ {0xbafc & 0xFF, 0xbafc & 0xFF},
+ {0xbafd & 0xFF, 0xbaff & 0xFF},
+ {0xbb00 & 0xFF, 0xbb17 & 0xFF},
+ {0xbb18 & 0xFF, 0xbb18 & 0xFF},
+ {0xbb19 & 0xFF, 0xbb33 & 0xFF},
+ {0xbb34 & 0xFF, 0xbb34 & 0xFF},
+ {0xbb35 & 0xFF, 0xbb4f & 0xFF},
+ {0xbb50 & 0xFF, 0xbb50 & 0xFF},
+ {0xbb51 & 0xFF, 0xbb6b & 0xFF},
+ {0xbb6c & 0xFF, 0xbb6c & 0xFF},
+ {0xbb6d & 0xFF, 0xbb87 & 0xFF},
+ {0xbb88 & 0xFF, 0xbb88 & 0xFF},
+ {0xbb89 & 0xFF, 0xbba3 & 0xFF},
+ {0xbba4 & 0xFF, 0xbba4 & 0xFF},
+ {0xbba5 & 0xFF, 0xbbbf & 0xFF},
+ {0xbbc0 & 0xFF, 0xbbc0 & 0xFF},
+ {0xbbc1 & 0xFF, 0xbbdb & 0xFF},
+ {0xbbdc & 0xFF, 0xbbdc & 0xFF},
+ {0xbbdd & 0xFF, 0xbbf7 & 0xFF},
+ {0xbbf8 & 0xFF, 0xbbf8 & 0xFF},
+ {0xbbf9 & 0xFF, 0xbbff & 0xFF},
+ {0xbc00 & 0xFF, 0xbc13 & 0xFF},
+ {0xbc14 & 0xFF, 0xbc14 & 0xFF},
+ {0xbc15 & 0xFF, 0xbc2f & 0xFF},
+ {0xbc30 & 0xFF, 0xbc30 & 0xFF},
+ {0xbc31 & 0xFF, 0xbc4b & 0xFF},
+ {0xbc4c & 0xFF, 0xbc4c & 0xFF},
+ {0xbc4d & 0xFF, 0xbc67 & 0xFF},
+ {0xbc68 & 0xFF, 0xbc68 & 0xFF},
+ {0xbc69 & 0xFF, 0xbc83 & 0xFF},
+ {0xbc84 & 0xFF, 0xbc84 & 0xFF},
+ {0xbc85 & 0xFF, 0xbc9f & 0xFF},
+ {0xbca0 & 0xFF, 0xbca0 & 0xFF},
+ {0xbca1 & 0xFF, 0xbcbb & 0xFF},
+ {0xbcbc & 0xFF, 0xbcbc & 0xFF},
+ {0xbcbd & 0xFF, 0xbcd7 & 0xFF},
+ {0xbcd8 & 0xFF, 0xbcd8 & 0xFF},
+ {0xbcd9 & 0xFF, 0xbcf3 & 0xFF},
+ {0xbcf4 & 0xFF, 0xbcf4 & 0xFF},
+ {0xbcf5 & 0xFF, 0xbcff & 0xFF},
+ {0xbd00 & 0xFF, 0xbd0f & 0xFF},
+ {0xbd10 & 0xFF, 0xbd10 & 0xFF},
+ {0xbd11 & 0xFF, 0xbd2b & 0xFF},
+ {0xbd2c & 0xFF, 0xbd2c & 0xFF},
+ {0xbd2d & 0xFF, 0xbd47 & 0xFF},
+ {0xbd48 & 0xFF, 0xbd48 & 0xFF},
+ {0xbd49 & 0xFF, 0xbd63 & 0xFF},
+ {0xbd64 & 0xFF, 0xbd64 & 0xFF},
+ {0xbd65 & 0xFF, 0xbd7f & 0xFF},
+ {0xbd80 & 0xFF, 0xbd80 & 0xFF},
+ {0xbd81 & 0xFF, 0xbd9b & 0xFF},
+ {0xbd9c & 0xFF, 0xbd9c & 0xFF},
+ {0xbd9d & 0xFF, 0xbdb7 & 0xFF},
+ {0xbdb8 & 0xFF, 0xbdb8 & 0xFF},
+ {0xbdb9 & 0xFF, 0xbdd3 & 0xFF},
+ {0xbdd4 & 0xFF, 0xbdd4 & 0xFF},
+ {0xbdd5 & 0xFF, 0xbdef & 0xFF},
+ {0xbdf0 & 0xFF, 0xbdf0 & 0xFF},
+ {0xbdf1 & 0xFF, 0xbdff & 0xFF},
+ {0xbe00 & 0xFF, 0xbe0b & 0xFF},
+ {0xbe0c & 0xFF, 0xbe0c & 0xFF},
+ {0xbe0d & 0xFF, 0xbe27 & 0xFF},
+ {0xbe28 & 0xFF, 0xbe28 & 0xFF},
+ {0xbe29 & 0xFF, 0xbe43 & 0xFF},
+ {0xbe44 & 0xFF, 0xbe44 & 0xFF},
+ {0xbe45 & 0xFF, 0xbe5f & 0xFF},
+ {0xbe60 & 0xFF, 0xbe60 & 0xFF},
+ {0xbe61 & 0xFF, 0xbe7b & 0xFF},
+ {0xbe7c & 0xFF, 0xbe7c & 0xFF},
+ {0xbe7d & 0xFF, 0xbe97 & 0xFF},
+ {0xbe98 & 0xFF, 0xbe98 & 0xFF},
+ {0xbe99 & 0xFF, 0xbeb3 & 0xFF},
+ {0xbeb4 & 0xFF, 0xbeb4 & 0xFF},
+ {0xbeb5 & 0xFF, 0xbecf & 0xFF},
+ {0xbed0 & 0xFF, 0xbed0 & 0xFF},
+ {0xbed1 & 0xFF, 0xbeeb & 0xFF},
+ {0xbeec & 0xFF, 0xbeec & 0xFF},
+ {0xbeed & 0xFF, 0xbeff & 0xFF},
+ {0xbf00 & 0xFF, 0xbf07 & 0xFF},
+ {0xbf08 & 0xFF, 0xbf08 & 0xFF},
+ {0xbf09 & 0xFF, 0xbf23 & 0xFF},
+ {0xbf24 & 0xFF, 0xbf24 & 0xFF},
+ {0xbf25 & 0xFF, 0xbf3f & 0xFF},
+ {0xbf40 & 0xFF, 0xbf40 & 0xFF},
+ {0xbf41 & 0xFF, 0xbf5b & 0xFF},
+ {0xbf5c & 0xFF, 0xbf5c & 0xFF},
+ {0xbf5d & 0xFF, 0xbf77 & 0xFF},
+ {0xbf78 & 0xFF, 0xbf78 & 0xFF},
+ {0xbf79 & 0xFF, 0xbf93 & 0xFF},
+ {0xbf94 & 0xFF, 0xbf94 & 0xFF},
+ {0xbf95 & 0xFF, 0xbfaf & 0xFF},
+ {0xbfb0 & 0xFF, 0xbfb0 & 0xFF},
+ {0xbfb1 & 0xFF, 0xbfcb & 0xFF},
+ {0xbfcc & 0xFF, 0xbfcc & 0xFF},
+ {0xbfcd & 0xFF, 0xbfe7 & 0xFF},
+ {0xbfe8 & 0xFF, 0xbfe8 & 0xFF},
+ {0xbfe9 & 0xFF, 0xbfff & 0xFF},
+ {0xc000 & 0xFF, 0xc003 & 0xFF},
+ {0xc004 & 0xFF, 0xc004 & 0xFF},
+ {0xc005 & 0xFF, 0xc01f & 0xFF},
+ {0xc020 & 0xFF, 0xc020 & 0xFF},
+ {0xc021 & 0xFF, 0xc03b & 0xFF},
+ {0xc03c & 0xFF, 0xc03c & 0xFF},
+ {0xc03d & 0xFF, 0xc057 & 0xFF},
+ {0xc058 & 0xFF, 0xc058 & 0xFF},
+ {0xc059 & 0xFF, 0xc073 & 0xFF},
+ {0xc074 & 0xFF, 0xc074 & 0xFF},
+ {0xc075 & 0xFF, 0xc08f & 0xFF},
+ {0xc090 & 0xFF, 0xc090 & 0xFF},
+ {0xc091 & 0xFF, 0xc0ab & 0xFF},
+ {0xc0ac & 0xFF, 0xc0ac & 0xFF},
+ {0xc0ad & 0xFF, 0xc0c7 & 0xFF},
+ {0xc0c8 & 0xFF, 0xc0c8 & 0xFF},
+ {0xc0c9 & 0xFF, 0xc0e3 & 0xFF},
+ {0xc0e4 & 0xFF, 0xc0e4 & 0xFF},
+ {0xc0e5 & 0xFF, 0xc0ff & 0xFF},
+ {0xc100 & 0xFF, 0xc100 & 0xFF},
+ {0xc101 & 0xFF, 0xc11b & 0xFF},
+ {0xc11c & 0xFF, 0xc11c & 0xFF},
+ {0xc11d & 0xFF, 0xc137 & 0xFF},
+ {0xc138 & 0xFF, 0xc138 & 0xFF},
+ {0xc139 & 0xFF, 0xc153 & 0xFF},
+ {0xc154 & 0xFF, 0xc154 & 0xFF},
+ {0xc155 & 0xFF, 0xc16f & 0xFF},
+ {0xc170 & 0xFF, 0xc170 & 0xFF},
+ {0xc171 & 0xFF, 0xc18b & 0xFF},
+ {0xc18c & 0xFF, 0xc18c & 0xFF},
+ {0xc18d & 0xFF, 0xc1a7 & 0xFF},
+ {0xc1a8 & 0xFF, 0xc1a8 & 0xFF},
+ {0xc1a9 & 0xFF, 0xc1c3 & 0xFF},
+ {0xc1c4 & 0xFF, 0xc1c4 & 0xFF},
+ {0xc1c5 & 0xFF, 0xc1df & 0xFF},
+ {0xc1e0 & 0xFF, 0xc1e0 & 0xFF},
+ {0xc1e1 & 0xFF, 0xc1fb & 0xFF},
+ {0xc1fc & 0xFF, 0xc1fc & 0xFF},
+ {0xc1fd & 0xFF, 0xc1ff & 0xFF},
+ {0xc200 & 0xFF, 0xc217 & 0xFF},
+ {0xc218 & 0xFF, 0xc218 & 0xFF},
+ {0xc219 & 0xFF, 0xc233 & 0xFF},
+ {0xc234 & 0xFF, 0xc234 & 0xFF},
+ {0xc235 & 0xFF, 0xc24f & 0xFF},
+ {0xc250 & 0xFF, 0xc250 & 0xFF},
+ {0xc251 & 0xFF, 0xc26b & 0xFF},
+ {0xc26c & 0xFF, 0xc26c & 0xFF},
+ {0xc26d & 0xFF, 0xc287 & 0xFF},
+ {0xc288 & 0xFF, 0xc288 & 0xFF},
+ {0xc289 & 0xFF, 0xc2a3 & 0xFF},
+ {0xc2a4 & 0xFF, 0xc2a4 & 0xFF},
+ {0xc2a5 & 0xFF, 0xc2bf & 0xFF},
+ {0xc2c0 & 0xFF, 0xc2c0 & 0xFF},
+ {0xc2c1 & 0xFF, 0xc2db & 0xFF},
+ {0xc2dc & 0xFF, 0xc2dc & 0xFF},
+ {0xc2dd & 0xFF, 0xc2f7 & 0xFF},
+ {0xc2f8 & 0xFF, 0xc2f8 & 0xFF},
+ {0xc2f9 & 0xFF, 0xc2ff & 0xFF},
+ {0xc300 & 0xFF, 0xc313 & 0xFF},
+ {0xc314 & 0xFF, 0xc314 & 0xFF},
+ {0xc315 & 0xFF, 0xc32f & 0xFF},
+ {0xc330 & 0xFF, 0xc330 & 0xFF},
+ {0xc331 & 0xFF, 0xc34b & 0xFF},
+ {0xc34c & 0xFF, 0xc34c & 0xFF},
+ {0xc34d & 0xFF, 0xc367 & 0xFF},
+ {0xc368 & 0xFF, 0xc368 & 0xFF},
+ {0xc369 & 0xFF, 0xc383 & 0xFF},
+ {0xc384 & 0xFF, 0xc384 & 0xFF},
+ {0xc385 & 0xFF, 0xc39f & 0xFF},
+ {0xc3a0 & 0xFF, 0xc3a0 & 0xFF},
+ {0xc3a1 & 0xFF, 0xc3bb & 0xFF},
+ {0xc3bc & 0xFF, 0xc3bc & 0xFF},
+ {0xc3bd & 0xFF, 0xc3d7 & 0xFF},
+ {0xc3d8 & 0xFF, 0xc3d8 & 0xFF},
+ {0xc3d9 & 0xFF, 0xc3f3 & 0xFF},
+ {0xc3f4 & 0xFF, 0xc3f4 & 0xFF},
+ {0xc3f5 & 0xFF, 0xc3ff & 0xFF},
+ {0xc400 & 0xFF, 0xc40f & 0xFF},
+ {0xc410 & 0xFF, 0xc410 & 0xFF},
+ {0xc411 & 0xFF, 0xc42b & 0xFF},
+ {0xc42c & 0xFF, 0xc42c & 0xFF},
+ {0xc42d & 0xFF, 0xc447 & 0xFF},
+ {0xc448 & 0xFF, 0xc448 & 0xFF},
+ {0xc449 & 0xFF, 0xc463 & 0xFF},
+ {0xc464 & 0xFF, 0xc464 & 0xFF},
+ {0xc465 & 0xFF, 0xc47f & 0xFF},
+ {0xc480 & 0xFF, 0xc480 & 0xFF},
+ {0xc481 & 0xFF, 0xc49b & 0xFF},
+ {0xc49c & 0xFF, 0xc49c & 0xFF},
+ {0xc49d & 0xFF, 0xc4b7 & 0xFF},
+ {0xc4b8 & 0xFF, 0xc4b8 & 0xFF},
+ {0xc4b9 & 0xFF, 0xc4d3 & 0xFF},
+ {0xc4d4 & 0xFF, 0xc4d4 & 0xFF},
+ {0xc4d5 & 0xFF, 0xc4ef & 0xFF},
+ {0xc4f0 & 0xFF, 0xc4f0 & 0xFF},
+ {0xc4f1 & 0xFF, 0xc4ff & 0xFF},
+ {0xc500 & 0xFF, 0xc50b & 0xFF},
+ {0xc50c & 0xFF, 0xc50c & 0xFF},
+ {0xc50d & 0xFF, 0xc527 & 0xFF},
+ {0xc528 & 0xFF, 0xc528 & 0xFF},
+ {0xc529 & 0xFF, 0xc543 & 0xFF},
+ {0xc544 & 0xFF, 0xc544 & 0xFF},
+ {0xc545 & 0xFF, 0xc55f & 0xFF},
+ {0xc560 & 0xFF, 0xc560 & 0xFF},
+ {0xc561 & 0xFF, 0xc57b & 0xFF},
+ {0xc57c & 0xFF, 0xc57c & 0xFF},
+ {0xc57d & 0xFF, 0xc597 & 0xFF},
+ {0xc598 & 0xFF, 0xc598 & 0xFF},
+ {0xc599 & 0xFF, 0xc5b3 & 0xFF},
+ {0xc5b4 & 0xFF, 0xc5b4 & 0xFF},
+ {0xc5b5 & 0xFF, 0xc5cf & 0xFF},
+ {0xc5d0 & 0xFF, 0xc5d0 & 0xFF},
+ {0xc5d1 & 0xFF, 0xc5eb & 0xFF},
+ {0xc5ec & 0xFF, 0xc5ec & 0xFF},
+ {0xc5ed & 0xFF, 0xc5ff & 0xFF},
+ {0xc600 & 0xFF, 0xc607 & 0xFF},
+ {0xc608 & 0xFF, 0xc608 & 0xFF},
+ {0xc609 & 0xFF, 0xc623 & 0xFF},
+ {0xc624 & 0xFF, 0xc624 & 0xFF},
+ {0xc625 & 0xFF, 0xc63f & 0xFF},
+ {0xc640 & 0xFF, 0xc640 & 0xFF},
+ {0xc641 & 0xFF, 0xc65b & 0xFF},
+ {0xc65c & 0xFF, 0xc65c & 0xFF},
+ {0xc65d & 0xFF, 0xc677 & 0xFF},
+ {0xc678 & 0xFF, 0xc678 & 0xFF},
+ {0xc679 & 0xFF, 0xc693 & 0xFF},
+ {0xc694 & 0xFF, 0xc694 & 0xFF},
+ {0xc695 & 0xFF, 0xc6af & 0xFF},
+ {0xc6b0 & 0xFF, 0xc6b0 & 0xFF},
+ {0xc6b1 & 0xFF, 0xc6cb & 0xFF},
+ {0xc6cc & 0xFF, 0xc6cc & 0xFF},
+ {0xc6cd & 0xFF, 0xc6e7 & 0xFF},
+ {0xc6e8 & 0xFF, 0xc6e8 & 0xFF},
+ {0xc6e9 & 0xFF, 0xc6ff & 0xFF},
+ {0xc700 & 0xFF, 0xc703 & 0xFF},
+ {0xc704 & 0xFF, 0xc704 & 0xFF},
+ {0xc705 & 0xFF, 0xc71f & 0xFF},
+ {0xc720 & 0xFF, 0xc720 & 0xFF},
+ {0xc721 & 0xFF, 0xc73b & 0xFF},
+ {0xc73c & 0xFF, 0xc73c & 0xFF},
+ {0xc73d & 0xFF, 0xc757 & 0xFF},
+ {0xc758 & 0xFF, 0xc758 & 0xFF},
+ {0xc759 & 0xFF, 0xc773 & 0xFF},
+ {0xc774 & 0xFF, 0xc774 & 0xFF},
+ {0xc775 & 0xFF, 0xc78f & 0xFF},
+ {0xc790 & 0xFF, 0xc790 & 0xFF},
+ {0xc791 & 0xFF, 0xc7ab & 0xFF},
+ {0xc7ac & 0xFF, 0xc7ac & 0xFF},
+ {0xc7ad & 0xFF, 0xc7c7 & 0xFF},
+ {0xc7c8 & 0xFF, 0xc7c8 & 0xFF},
+ {0xc7c9 & 0xFF, 0xc7e3 & 0xFF},
+ {0xc7e4 & 0xFF, 0xc7e4 & 0xFF},
+ {0xc7e5 & 0xFF, 0xc7ff & 0xFF},
+ {0xc800 & 0xFF, 0xc800 & 0xFF},
+ {0xc801 & 0xFF, 0xc81b & 0xFF},
+ {0xc81c & 0xFF, 0xc81c & 0xFF},
+ {0xc81d & 0xFF, 0xc837 & 0xFF},
+ {0xc838 & 0xFF, 0xc838 & 0xFF},
+ {0xc839 & 0xFF, 0xc853 & 0xFF},
+ {0xc854 & 0xFF, 0xc854 & 0xFF},
+ {0xc855 & 0xFF, 0xc86f & 0xFF},
+ {0xc870 & 0xFF, 0xc870 & 0xFF},
+ {0xc871 & 0xFF, 0xc88b & 0xFF},
+ {0xc88c & 0xFF, 0xc88c & 0xFF},
+ {0xc88d & 0xFF, 0xc8a7 & 0xFF},
+ {0xc8a8 & 0xFF, 0xc8a8 & 0xFF},
+ {0xc8a9 & 0xFF, 0xc8c3 & 0xFF},
+ {0xc8c4 & 0xFF, 0xc8c4 & 0xFF},
+ {0xc8c5 & 0xFF, 0xc8df & 0xFF},
+ {0xc8e0 & 0xFF, 0xc8e0 & 0xFF},
+ {0xc8e1 & 0xFF, 0xc8fb & 0xFF},
+ {0xc8fc & 0xFF, 0xc8fc & 0xFF},
+ {0xc8fd & 0xFF, 0xc8ff & 0xFF},
+ {0xc900 & 0xFF, 0xc917 & 0xFF},
+ {0xc918 & 0xFF, 0xc918 & 0xFF},
+ {0xc919 & 0xFF, 0xc933 & 0xFF},
+ {0xc934 & 0xFF, 0xc934 & 0xFF},
+ {0xc935 & 0xFF, 0xc94f & 0xFF},
+ {0xc950 & 0xFF, 0xc950 & 0xFF},
+ {0xc951 & 0xFF, 0xc96b & 0xFF},
+ {0xc96c & 0xFF, 0xc96c & 0xFF},
+ {0xc96d & 0xFF, 0xc987 & 0xFF},
+ {0xc988 & 0xFF, 0xc988 & 0xFF},
+ {0xc989 & 0xFF, 0xc9a3 & 0xFF},
+ {0xc9a4 & 0xFF, 0xc9a4 & 0xFF},
+ {0xc9a5 & 0xFF, 0xc9bf & 0xFF},
+ {0xc9c0 & 0xFF, 0xc9c0 & 0xFF},
+ {0xc9c1 & 0xFF, 0xc9db & 0xFF},
+ {0xc9dc & 0xFF, 0xc9dc & 0xFF},
+ {0xc9dd & 0xFF, 0xc9f7 & 0xFF},
+ {0xc9f8 & 0xFF, 0xc9f8 & 0xFF},
+ {0xc9f9 & 0xFF, 0xc9ff & 0xFF},
+ {0xca00 & 0xFF, 0xca13 & 0xFF},
+ {0xca14 & 0xFF, 0xca14 & 0xFF},
+ {0xca15 & 0xFF, 0xca2f & 0xFF},
+ {0xca30 & 0xFF, 0xca30 & 0xFF},
+ {0xca31 & 0xFF, 0xca4b & 0xFF},
+ {0xca4c & 0xFF, 0xca4c & 0xFF},
+ {0xca4d & 0xFF, 0xca67 & 0xFF},
+ {0xca68 & 0xFF, 0xca68 & 0xFF},
+ {0xca69 & 0xFF, 0xca83 & 0xFF},
+ {0xca84 & 0xFF, 0xca84 & 0xFF},
+ {0xca85 & 0xFF, 0xca9f & 0xFF},
+ {0xcaa0 & 0xFF, 0xcaa0 & 0xFF},
+ {0xcaa1 & 0xFF, 0xcabb & 0xFF},
+ {0xcabc & 0xFF, 0xcabc & 0xFF},
+ {0xcabd & 0xFF, 0xcad7 & 0xFF},
+ {0xcad8 & 0xFF, 0xcad8 & 0xFF},
+ {0xcad9 & 0xFF, 0xcaf3 & 0xFF},
+ {0xcaf4 & 0xFF, 0xcaf4 & 0xFF},
+ {0xcaf5 & 0xFF, 0xcaff & 0xFF},
+ {0xcb00 & 0xFF, 0xcb0f & 0xFF},
+ {0xcb10 & 0xFF, 0xcb10 & 0xFF},
+ {0xcb11 & 0xFF, 0xcb2b & 0xFF},
+ {0xcb2c & 0xFF, 0xcb2c & 0xFF},
+ {0xcb2d & 0xFF, 0xcb47 & 0xFF},
+ {0xcb48 & 0xFF, 0xcb48 & 0xFF},
+ {0xcb49 & 0xFF, 0xcb63 & 0xFF},
+ {0xcb64 & 0xFF, 0xcb64 & 0xFF},
+ {0xcb65 & 0xFF, 0xcb7f & 0xFF},
+ {0xcb80 & 0xFF, 0xcb80 & 0xFF},
+ {0xcb81 & 0xFF, 0xcb9b & 0xFF},
+ {0xcb9c & 0xFF, 0xcb9c & 0xFF},
+ {0xcb9d & 0xFF, 0xcbb7 & 0xFF},
+ {0xcbb8 & 0xFF, 0xcbb8 & 0xFF},
+ {0xcbb9 & 0xFF, 0xcbd3 & 0xFF},
+ {0xcbd4 & 0xFF, 0xcbd4 & 0xFF},
+ {0xcbd5 & 0xFF, 0xcbef & 0xFF},
+ {0xcbf0 & 0xFF, 0xcbf0 & 0xFF},
+ {0xcbf1 & 0xFF, 0xcbff & 0xFF},
+ {0xcc00 & 0xFF, 0xcc0b & 0xFF},
+ {0xcc0c & 0xFF, 0xcc0c & 0xFF},
+ {0xcc0d & 0xFF, 0xcc27 & 0xFF},
+ {0xcc28 & 0xFF, 0xcc28 & 0xFF},
+ {0xcc29 & 0xFF, 0xcc43 & 0xFF},
+ {0xcc44 & 0xFF, 0xcc44 & 0xFF},
+ {0xcc45 & 0xFF, 0xcc5f & 0xFF},
+ {0xcc60 & 0xFF, 0xcc60 & 0xFF},
+ {0xcc61 & 0xFF, 0xcc7b & 0xFF},
+ {0xcc7c & 0xFF, 0xcc7c & 0xFF},
+ {0xcc7d & 0xFF, 0xcc97 & 0xFF},
+ {0xcc98 & 0xFF, 0xcc98 & 0xFF},
+ {0xcc99 & 0xFF, 0xccb3 & 0xFF},
+ {0xccb4 & 0xFF, 0xccb4 & 0xFF},
+ {0xccb5 & 0xFF, 0xcccf & 0xFF},
+ {0xccd0 & 0xFF, 0xccd0 & 0xFF},
+ {0xccd1 & 0xFF, 0xcceb & 0xFF},
+ {0xccec & 0xFF, 0xccec & 0xFF},
+ {0xcced & 0xFF, 0xccff & 0xFF},
+ {0xcd00 & 0xFF, 0xcd07 & 0xFF},
+ {0xcd08 & 0xFF, 0xcd08 & 0xFF},
+ {0xcd09 & 0xFF, 0xcd23 & 0xFF},
+ {0xcd24 & 0xFF, 0xcd24 & 0xFF},
+ {0xcd25 & 0xFF, 0xcd3f & 0xFF},
+ {0xcd40 & 0xFF, 0xcd40 & 0xFF},
+ {0xcd41 & 0xFF, 0xcd5b & 0xFF},
+ {0xcd5c & 0xFF, 0xcd5c & 0xFF},
+ {0xcd5d & 0xFF, 0xcd77 & 0xFF},
+ {0xcd78 & 0xFF, 0xcd78 & 0xFF},
+ {0xcd79 & 0xFF, 0xcd93 & 0xFF},
+ {0xcd94 & 0xFF, 0xcd94 & 0xFF},
+ {0xcd95 & 0xFF, 0xcdaf & 0xFF},
+ {0xcdb0 & 0xFF, 0xcdb0 & 0xFF},
+ {0xcdb1 & 0xFF, 0xcdcb & 0xFF},
+ {0xcdcc & 0xFF, 0xcdcc & 0xFF},
+ {0xcdcd & 0xFF, 0xcde7 & 0xFF},
+ {0xcde8 & 0xFF, 0xcde8 & 0xFF},
+ {0xcde9 & 0xFF, 0xcdff & 0xFF},
+ {0xce00 & 0xFF, 0xce03 & 0xFF},
+ {0xce04 & 0xFF, 0xce04 & 0xFF},
+ {0xce05 & 0xFF, 0xce1f & 0xFF},
+ {0xce20 & 0xFF, 0xce20 & 0xFF},
+ {0xce21 & 0xFF, 0xce3b & 0xFF},
+ {0xce3c & 0xFF, 0xce3c & 0xFF},
+ {0xce3d & 0xFF, 0xce57 & 0xFF},
+ {0xce58 & 0xFF, 0xce58 & 0xFF},
+ {0xce59 & 0xFF, 0xce73 & 0xFF},
+ {0xce74 & 0xFF, 0xce74 & 0xFF},
+ {0xce75 & 0xFF, 0xce8f & 0xFF},
+ {0xce90 & 0xFF, 0xce90 & 0xFF},
+ {0xce91 & 0xFF, 0xceab & 0xFF},
+ {0xceac & 0xFF, 0xceac & 0xFF},
+ {0xcead & 0xFF, 0xcec7 & 0xFF},
+ {0xcec8 & 0xFF, 0xcec8 & 0xFF},
+ {0xcec9 & 0xFF, 0xcee3 & 0xFF},
+ {0xcee4 & 0xFF, 0xcee4 & 0xFF},
+ {0xcee5 & 0xFF, 0xceff & 0xFF},
+ {0xcf00 & 0xFF, 0xcf00 & 0xFF},
+ {0xcf01 & 0xFF, 0xcf1b & 0xFF},
+ {0xcf1c & 0xFF, 0xcf1c & 0xFF},
+ {0xcf1d & 0xFF, 0xcf37 & 0xFF},
+ {0xcf38 & 0xFF, 0xcf38 & 0xFF},
+ {0xcf39 & 0xFF, 0xcf53 & 0xFF},
+ {0xcf54 & 0xFF, 0xcf54 & 0xFF},
+ {0xcf55 & 0xFF, 0xcf6f & 0xFF},
+ {0xcf70 & 0xFF, 0xcf70 & 0xFF},
+ {0xcf71 & 0xFF, 0xcf8b & 0xFF},
+ {0xcf8c & 0xFF, 0xcf8c & 0xFF},
+ {0xcf8d & 0xFF, 0xcfa7 & 0xFF},
+ {0xcfa8 & 0xFF, 0xcfa8 & 0xFF},
+ {0xcfa9 & 0xFF, 0xcfc3 & 0xFF},
+ {0xcfc4 & 0xFF, 0xcfc4 & 0xFF},
+ {0xcfc5 & 0xFF, 0xcfdf & 0xFF},
+ {0xcfe0 & 0xFF, 0xcfe0 & 0xFF},
+ {0xcfe1 & 0xFF, 0xcffb & 0xFF},
+ {0xcffc & 0xFF, 0xcffc & 0xFF},
+ {0xcffd & 0xFF, 0xcfff & 0xFF},
+ {0xd000 & 0xFF, 0xd017 & 0xFF},
+ {0xd018 & 0xFF, 0xd018 & 0xFF},
+ {0xd019 & 0xFF, 0xd033 & 0xFF},
+ {0xd034 & 0xFF, 0xd034 & 0xFF},
+ {0xd035 & 0xFF, 0xd04f & 0xFF},
+ {0xd050 & 0xFF, 0xd050 & 0xFF},
+ {0xd051 & 0xFF, 0xd06b & 0xFF},
+ {0xd06c & 0xFF, 0xd06c & 0xFF},
+ {0xd06d & 0xFF, 0xd087 & 0xFF},
+ {0xd088 & 0xFF, 0xd088 & 0xFF},
+ {0xd089 & 0xFF, 0xd0a3 & 0xFF},
+ {0xd0a4 & 0xFF, 0xd0a4 & 0xFF},
+ {0xd0a5 & 0xFF, 0xd0bf & 0xFF},
+ {0xd0c0 & 0xFF, 0xd0c0 & 0xFF},
+ {0xd0c1 & 0xFF, 0xd0db & 0xFF},
+ {0xd0dc & 0xFF, 0xd0dc & 0xFF},
+ {0xd0dd & 0xFF, 0xd0f7 & 0xFF},
+ {0xd0f8 & 0xFF, 0xd0f8 & 0xFF},
+ {0xd0f9 & 0xFF, 0xd0ff & 0xFF},
+ {0xd100 & 0xFF, 0xd113 & 0xFF},
+ {0xd114 & 0xFF, 0xd114 & 0xFF},
+ {0xd115 & 0xFF, 0xd12f & 0xFF},
+ {0xd130 & 0xFF, 0xd130 & 0xFF},
+ {0xd131 & 0xFF, 0xd14b & 0xFF},
+ {0xd14c & 0xFF, 0xd14c & 0xFF},
+ {0xd14d & 0xFF, 0xd167 & 0xFF},
+ {0xd168 & 0xFF, 0xd168 & 0xFF},
+ {0xd169 & 0xFF, 0xd183 & 0xFF},
+ {0xd184 & 0xFF, 0xd184 & 0xFF},
+ {0xd185 & 0xFF, 0xd19f & 0xFF},
+ {0xd1a0 & 0xFF, 0xd1a0 & 0xFF},
+ {0xd1a1 & 0xFF, 0xd1bb & 0xFF},
+ {0xd1bc & 0xFF, 0xd1bc & 0xFF},
+ {0xd1bd & 0xFF, 0xd1d7 & 0xFF},
+ {0xd1d8 & 0xFF, 0xd1d8 & 0xFF},
+ {0xd1d9 & 0xFF, 0xd1f3 & 0xFF},
+ {0xd1f4 & 0xFF, 0xd1f4 & 0xFF},
+ {0xd1f5 & 0xFF, 0xd1ff & 0xFF},
+ {0xd200 & 0xFF, 0xd20f & 0xFF},
+ {0xd210 & 0xFF, 0xd210 & 0xFF},
+ {0xd211 & 0xFF, 0xd22b & 0xFF},
+ {0xd22c & 0xFF, 0xd22c & 0xFF},
+ {0xd22d & 0xFF, 0xd247 & 0xFF},
+ {0xd248 & 0xFF, 0xd248 & 0xFF},
+ {0xd249 & 0xFF, 0xd263 & 0xFF},
+ {0xd264 & 0xFF, 0xd264 & 0xFF},
+ {0xd265 & 0xFF, 0xd27f & 0xFF},
+ {0xd280 & 0xFF, 0xd280 & 0xFF},
+ {0xd281 & 0xFF, 0xd29b & 0xFF},
+ {0xd29c & 0xFF, 0xd29c & 0xFF},
+ {0xd29d & 0xFF, 0xd2b7 & 0xFF},
+ {0xd2b8 & 0xFF, 0xd2b8 & 0xFF},
+ {0xd2b9 & 0xFF, 0xd2d3 & 0xFF},
+ {0xd2d4 & 0xFF, 0xd2d4 & 0xFF},
+ {0xd2d5 & 0xFF, 0xd2ef & 0xFF},
+ {0xd2f0 & 0xFF, 0xd2f0 & 0xFF},
+ {0xd2f1 & 0xFF, 0xd2ff & 0xFF},
+ {0xd300 & 0xFF, 0xd30b & 0xFF},
+ {0xd30c & 0xFF, 0xd30c & 0xFF},
+ {0xd30d & 0xFF, 0xd327 & 0xFF},
+ {0xd328 & 0xFF, 0xd328 & 0xFF},
+ {0xd329 & 0xFF, 0xd343 & 0xFF},
+ {0xd344 & 0xFF, 0xd344 & 0xFF},
+ {0xd345 & 0xFF, 0xd35f & 0xFF},
+ {0xd360 & 0xFF, 0xd360 & 0xFF},
+ {0xd361 & 0xFF, 0xd37b & 0xFF},
+ {0xd37c & 0xFF, 0xd37c & 0xFF},
+ {0xd37d & 0xFF, 0xd397 & 0xFF},
+ {0xd398 & 0xFF, 0xd398 & 0xFF},
+ {0xd399 & 0xFF, 0xd3b3 & 0xFF},
+ {0xd3b4 & 0xFF, 0xd3b4 & 0xFF},
+ {0xd3b5 & 0xFF, 0xd3cf & 0xFF},
+ {0xd3d0 & 0xFF, 0xd3d0 & 0xFF},
+ {0xd3d1 & 0xFF, 0xd3eb & 0xFF},
+ {0xd3ec & 0xFF, 0xd3ec & 0xFF},
+ {0xd3ed & 0xFF, 0xd3ff & 0xFF},
+ {0xd400 & 0xFF, 0xd407 & 0xFF},
+ {0xd408 & 0xFF, 0xd408 & 0xFF},
+ {0xd409 & 0xFF, 0xd423 & 0xFF},
+ {0xd424 & 0xFF, 0xd424 & 0xFF},
+ {0xd425 & 0xFF, 0xd43f & 0xFF},
+ {0xd440 & 0xFF, 0xd440 & 0xFF},
+ {0xd441 & 0xFF, 0xd45b & 0xFF},
+ {0xd45c & 0xFF, 0xd45c & 0xFF},
+ {0xd45d & 0xFF, 0xd477 & 0xFF},
+ {0xd478 & 0xFF, 0xd478 & 0xFF},
+ {0xd479 & 0xFF, 0xd493 & 0xFF},
+ {0xd494 & 0xFF, 0xd494 & 0xFF},
+ {0xd495 & 0xFF, 0xd4af & 0xFF},
+ {0xd4b0 & 0xFF, 0xd4b0 & 0xFF},
+ {0xd4b1 & 0xFF, 0xd4cb & 0xFF},
+ {0xd4cc & 0xFF, 0xd4cc & 0xFF},
+ {0xd4cd & 0xFF, 0xd4e7 & 0xFF},
+ {0xd4e8 & 0xFF, 0xd4e8 & 0xFF},
+ {0xd4e9 & 0xFF, 0xd4ff & 0xFF},
+ {0xd500 & 0xFF, 0xd503 & 0xFF},
+ {0xd504 & 0xFF, 0xd504 & 0xFF},
+ {0xd505 & 0xFF, 0xd51f & 0xFF},
+ {0xd520 & 0xFF, 0xd520 & 0xFF},
+ {0xd521 & 0xFF, 0xd53b & 0xFF},
+ {0xd53c & 0xFF, 0xd53c & 0xFF},
+ {0xd53d & 0xFF, 0xd557 & 0xFF},
+ {0xd558 & 0xFF, 0xd558 & 0xFF},
+ {0xd559 & 0xFF, 0xd573 & 0xFF},
+ {0xd574 & 0xFF, 0xd574 & 0xFF},
+ {0xd575 & 0xFF, 0xd58f & 0xFF},
+ {0xd590 & 0xFF, 0xd590 & 0xFF},
+ {0xd591 & 0xFF, 0xd5ab & 0xFF},
+ {0xd5ac & 0xFF, 0xd5ac & 0xFF},
+ {0xd5ad & 0xFF, 0xd5c7 & 0xFF},
+ {0xd5c8 & 0xFF, 0xd5c8 & 0xFF},
+ {0xd5c9 & 0xFF, 0xd5e3 & 0xFF},
+ {0xd5e4 & 0xFF, 0xd5e4 & 0xFF},
+ {0xd5e5 & 0xFF, 0xd5ff & 0xFF},
+ {0xd600 & 0xFF, 0xd600 & 0xFF},
+ {0xd601 & 0xFF, 0xd61b & 0xFF},
+ {0xd61c & 0xFF, 0xd61c & 0xFF},
+ {0xd61d & 0xFF, 0xd637 & 0xFF},
+ {0xd638 & 0xFF, 0xd638 & 0xFF},
+ {0xd639 & 0xFF, 0xd653 & 0xFF},
+ {0xd654 & 0xFF, 0xd654 & 0xFF},
+ {0xd655 & 0xFF, 0xd66f & 0xFF},
+ {0xd670 & 0xFF, 0xd670 & 0xFF},
+ {0xd671 & 0xFF, 0xd68b & 0xFF},
+ {0xd68c & 0xFF, 0xd68c & 0xFF},
+ {0xd68d & 0xFF, 0xd6a7 & 0xFF},
+ {0xd6a8 & 0xFF, 0xd6a8 & 0xFF},
+ {0xd6a9 & 0xFF, 0xd6c3 & 0xFF},
+ {0xd6c4 & 0xFF, 0xd6c4 & 0xFF},
+ {0xd6c5 & 0xFF, 0xd6df & 0xFF},
+ {0xd6e0 & 0xFF, 0xd6e0 & 0xFF},
+ {0xd6e1 & 0xFF, 0xd6fb & 0xFF},
+ {0xd6fc & 0xFF, 0xd6fc & 0xFF},
+ {0xd6fd & 0xFF, 0xd6ff & 0xFF},
+ {0xd700 & 0xFF, 0xd717 & 0xFF},
+ {0xd718 & 0xFF, 0xd718 & 0xFF},
+ {0xd719 & 0xFF, 0xd733 & 0xFF},
+ {0xd734 & 0xFF, 0xd734 & 0xFF},
+ {0xd735 & 0xFF, 0xd74f & 0xFF},
+ {0xd750 & 0xFF, 0xd750 & 0xFF},
+ {0xd751 & 0xFF, 0xd76b & 0xFF},
+ {0xd76c & 0xFF, 0xd76c & 0xFF},
+ {0xd76d & 0xFF, 0xd787 & 0xFF},
+ {0xd788 & 0xFF, 0xd788 & 0xFF},
+ {0xd789 & 0xFF, 0xd7a3 & 0xFF},
+ {0xd7b0 & 0xFF, 0xd7c6 & 0xFF},
+ {0xd7cb & 0xFF, 0xd7fb & 0xFF},
+ {0xfb1e & 0xFF, 0xfb1e & 0xFF},
+ {0xfe00 & 0xFF, 0xfe0f & 0xFF},
+ {0xfe20 & 0xFF, 0xfe26 & 0xFF},
+ {0xfeff & 0xFF, 0xfeff & 0xFF},
+ {0xff9e & 0xFF, 0xff9f & 0xFF},
+ {0xfff9 & 0xFF, 0xfffb & 0xFF},
+ {0x101fd & 0xFF, 0x101fd & 0xFF},
+ {0x10a01 & 0xFF, 0x10a03 & 0xFF},
+ {0x10a05 & 0xFF, 0x10a06 & 0xFF},
+ {0x10a0c & 0xFF, 0x10a0f & 0xFF},
+ {0x10a38 & 0xFF, 0x10a3a & 0xFF},
+ {0x10a3f & 0xFF, 0x10a3f & 0xFF},
+ {0x11000 & 0xFF, 0x11000 & 0xFF},
+ {0x11001 & 0xFF, 0x11001 & 0xFF},
+ {0x11002 & 0xFF, 0x11002 & 0xFF},
+ {0x11038 & 0xFF, 0x11046 & 0xFF},
+ {0x11080 & 0xFF, 0x11081 & 0xFF},
+ {0x11082 & 0xFF, 0x11082 & 0xFF},
+ {0x110b0 & 0xFF, 0x110b2 & 0xFF},
+ {0x110b3 & 0xFF, 0x110b6 & 0xFF},
+ {0x110b7 & 0xFF, 0x110b8 & 0xFF},
+ {0x110b9 & 0xFF, 0x110ba & 0xFF},
+ {0x110bd & 0xFF, 0x110bd & 0xFF},
+ {0x1d165 & 0xFF, 0x1d165 & 0xFF},
+ {0x1d166 & 0xFF, 0x1d166 & 0xFF},
+ {0x1d167 & 0xFF, 0x1d169 & 0xFF},
+ {0x1d16d & 0xFF, 0x1d16d & 0xFF},
+ {0x1d16e & 0xFF, 0x1d172 & 0xFF},
+ {0x1d173 & 0xFF, 0x1d17a & 0xFF},
+ {0x1d17b & 0xFF, 0x1d182 & 0xFF},
+ {0x1d185 & 0xFF, 0x1d18b & 0xFF},
+ {0x1d1aa & 0xFF, 0x1d1ad & 0xFF},
+ {0x1d242 & 0xFF, 0x1d244 & 0xFF},
+ {0xe0001 & 0xFF, 0xe0001 & 0xFF},
+ {0xe0020 & 0xFF, 0xe007f & 0xFF},
+ {0xe0100 & 0xFF, 0xe01ef & 0xFF}};
+
+static const uint8_t unicode_classtab[]={
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_LF,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_CR,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Prepend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Prepend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_L,
+ UNICODE_GRAPHEMEBREAK_V,
+ UNICODE_GRAPHEMEBREAK_T,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_L,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Prepend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Prepend,
+ UNICODE_GRAPHEMEBREAK_Prepend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_LV,
+ UNICODE_GRAPHEMEBREAK_LVT,
+ UNICODE_GRAPHEMEBREAK_V,
+ UNICODE_GRAPHEMEBREAK_T,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_SpacingMark,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Extend,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Control,
+ UNICODE_GRAPHEMEBREAK_Extend};
+
+static const size_t unicode_indextab[]={
+ 0,
+ 7,
+ 7,
+ 7,
+ 8,
+ 9,
+ 14,
+ 23,
+ 28,
+ 33,
+ 56,
+ 76,
+ 96,
+ 116,
+ 134,
+ 148,
+ 160,
+ 182,
+ 185,
+ 185,
+ 186,
+ 186,
+ 186,
+ 186,
+ 198,
+ 200,
+ 210,
+ 224,
+ 250,
+ 260,
+ 262,
+ 262,
+ 262,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 269,
+ 270,
+ 272,
+ 272,
+ 272,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 274,
+ 277,
+ 277,
+ 287,
+ 299,
+ 316,
+ 323,
+ 343,
+ 362,
+ 381,
+ 400,
+ 419,
+ 438,
+ 457,
+ 477,
+ 496,
+ 515,
+ 534,
+ 553,
+ 572,
+ 591,
+ 611,
+ 630,
+ 649,
+ 668,
+ 687,
+ 706,
+ 725,
+ 745,
+ 764,
+ 783,
+ 802,
+ 821,
+ 840,
+ 859,
+ 879,
+ 898,
+ 917,
+ 936,
+ 955,
+ 974,
+ 993,
+ 1013,
+ 1032,
+ 1051,
+ 1070,
+ 1089,
+ 1108,
+ 1127,
+ 1147,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1160,
+ 1161,
+ 1161,
+ 1161,
+ 1164,
+ 1166,
+ 1166,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1167,
+ 1172,
+ 1172,
+ 1172,
+ 1172,
+ 1172,
+ 1172,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1183,
+ 1192,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1193,
+ 1195,
+ 1196};
+
diff --git a/unicode/graphemetest.c b/unicode/graphemetest.c
new file mode 100644
index 0000000..58bc184
--- /dev/null
+++ b/unicode/graphemetest.c
@@ -0,0 +1,24 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+
+int main(int argc, char **argv)
+{
+ if (argc >= 3)
+ {
+ printf("%d\n",
+ unicode_grapheme_break(strtol(argv[1], NULL, 0),
+ strtol(argv[2], NULL, 0)));
+ }
+ return (0);
+}
diff --git a/unicode/linebreaktab.h b/unicode/linebreaktab.h
new file mode 100644
index 0000000..7c58d30
--- /dev/null
+++ b/unicode/linebreaktab.h
@@ -0,0 +1,9071 @@
+static const uint8_t unicode_rangetab[][2]={
+ {0x0000 & 0xFF, 0x0008 & 0xFF},
+ {0x0009 & 0xFF, 0x0009 & 0xFF},
+ {0x000a & 0xFF, 0x000a & 0xFF},
+ {0x000b & 0xFF, 0x000c & 0xFF},
+ {0x000d & 0xFF, 0x000d & 0xFF},
+ {0x000e & 0xFF, 0x001f & 0xFF},
+ {0x0020 & 0xFF, 0x0020 & 0xFF},
+ {0x0021 & 0xFF, 0x0021 & 0xFF},
+ {0x0022 & 0xFF, 0x0022 & 0xFF},
+ {0x0023 & 0xFF, 0x0023 & 0xFF},
+ {0x0024 & 0xFF, 0x0024 & 0xFF},
+ {0x0025 & 0xFF, 0x0025 & 0xFF},
+ {0x0026 & 0xFF, 0x0026 & 0xFF},
+ {0x0027 & 0xFF, 0x0027 & 0xFF},
+ {0x0028 & 0xFF, 0x0028 & 0xFF},
+ {0x0029 & 0xFF, 0x0029 & 0xFF},
+ {0x002a & 0xFF, 0x002a & 0xFF},
+ {0x002b & 0xFF, 0x002b & 0xFF},
+ {0x002c & 0xFF, 0x002c & 0xFF},
+ {0x002d & 0xFF, 0x002d & 0xFF},
+ {0x002e & 0xFF, 0x002e & 0xFF},
+ {0x002f & 0xFF, 0x002f & 0xFF},
+ {0x0030 & 0xFF, 0x0039 & 0xFF},
+ {0x003a & 0xFF, 0x003b & 0xFF},
+ {0x003c & 0xFF, 0x003e & 0xFF},
+ {0x003f & 0xFF, 0x003f & 0xFF},
+ {0x0040 & 0xFF, 0x005a & 0xFF},
+ {0x005b & 0xFF, 0x005b & 0xFF},
+ {0x005c & 0xFF, 0x005c & 0xFF},
+ {0x005d & 0xFF, 0x005d & 0xFF},
+ {0x005e & 0xFF, 0x007a & 0xFF},
+ {0x007b & 0xFF, 0x007b & 0xFF},
+ {0x007c & 0xFF, 0x007c & 0xFF},
+ {0x007d & 0xFF, 0x007d & 0xFF},
+ {0x007e & 0xFF, 0x007e & 0xFF},
+ {0x007f & 0xFF, 0x0084 & 0xFF},
+ {0x0085 & 0xFF, 0x0085 & 0xFF},
+ {0x0086 & 0xFF, 0x009f & 0xFF},
+ {0x00a0 & 0xFF, 0x00a0 & 0xFF},
+ {0x00a1 & 0xFF, 0x00a1 & 0xFF},
+ {0x00a2 & 0xFF, 0x00a2 & 0xFF},
+ {0x00a3 & 0xFF, 0x00a5 & 0xFF},
+ {0x00a6 & 0xFF, 0x00aa & 0xFF},
+ {0x00ab & 0xFF, 0x00ab & 0xFF},
+ {0x00ac & 0xFF, 0x00ac & 0xFF},
+ {0x00ad & 0xFF, 0x00ad & 0xFF},
+ {0x00ae & 0xFF, 0x00af & 0xFF},
+ {0x00b0 & 0xFF, 0x00b0 & 0xFF},
+ {0x00b1 & 0xFF, 0x00b1 & 0xFF},
+ {0x00b2 & 0xFF, 0x00b3 & 0xFF},
+ {0x00b4 & 0xFF, 0x00b4 & 0xFF},
+ {0x00b5 & 0xFF, 0x00ba & 0xFF},
+ {0x00bb & 0xFF, 0x00bb & 0xFF},
+ {0x00bc & 0xFF, 0x00be & 0xFF},
+ {0x00bf & 0xFF, 0x00bf & 0xFF},
+ {0x00c0 & 0xFF, 0x00ff & 0xFF},
+ {0x0100 & 0xFF, 0x01ff & 0xFF},
+ {0x0200 & 0xFF, 0x02c7 & 0xFF},
+ {0x02c8 & 0xFF, 0x02c8 & 0xFF},
+ {0x02c9 & 0xFF, 0x02cb & 0xFF},
+ {0x02cc & 0xFF, 0x02cc & 0xFF},
+ {0x02cd & 0xFF, 0x02de & 0xFF},
+ {0x02df & 0xFF, 0x02df & 0xFF},
+ {0x02e0 & 0xFF, 0x02ff & 0xFF},
+ {0x0300 & 0xFF, 0x034e & 0xFF},
+ {0x034f & 0xFF, 0x034f & 0xFF},
+ {0x0350 & 0xFF, 0x035b & 0xFF},
+ {0x035c & 0xFF, 0x0362 & 0xFF},
+ {0x0363 & 0xFF, 0x036f & 0xFF},
+ {0x0370 & 0xFF, 0x0377 & 0xFF},
+ {0x037a & 0xFF, 0x037d & 0xFF},
+ {0x037e & 0xFF, 0x037e & 0xFF},
+ {0x0384 & 0xFF, 0x038a & 0xFF},
+ {0x038c & 0xFF, 0x038c & 0xFF},
+ {0x038e & 0xFF, 0x03a1 & 0xFF},
+ {0x03a3 & 0xFF, 0x03ff & 0xFF},
+ {0x0400 & 0xFF, 0x0482 & 0xFF},
+ {0x0483 & 0xFF, 0x0489 & 0xFF},
+ {0x048a & 0xFF, 0x04ff & 0xFF},
+ {0x0500 & 0xFF, 0x0527 & 0xFF},
+ {0x0531 & 0xFF, 0x0556 & 0xFF},
+ {0x0559 & 0xFF, 0x055f & 0xFF},
+ {0x0561 & 0xFF, 0x0587 & 0xFF},
+ {0x0589 & 0xFF, 0x0589 & 0xFF},
+ {0x058a & 0xFF, 0x058a & 0xFF},
+ {0x0591 & 0xFF, 0x05bd & 0xFF},
+ {0x05be & 0xFF, 0x05be & 0xFF},
+ {0x05bf & 0xFF, 0x05bf & 0xFF},
+ {0x05c0 & 0xFF, 0x05c0 & 0xFF},
+ {0x05c1 & 0xFF, 0x05c2 & 0xFF},
+ {0x05c3 & 0xFF, 0x05c3 & 0xFF},
+ {0x05c4 & 0xFF, 0x05c5 & 0xFF},
+ {0x05c6 & 0xFF, 0x05c6 & 0xFF},
+ {0x05c7 & 0xFF, 0x05c7 & 0xFF},
+ {0x05d0 & 0xFF, 0x05ea & 0xFF},
+ {0x05f0 & 0xFF, 0x05f4 & 0xFF},
+ {0x0600 & 0xFF, 0x0603 & 0xFF},
+ {0x0606 & 0xFF, 0x0608 & 0xFF},
+ {0x0609 & 0xFF, 0x060b & 0xFF},
+ {0x060c & 0xFF, 0x060d & 0xFF},
+ {0x060e & 0xFF, 0x060f & 0xFF},
+ {0x0610 & 0xFF, 0x061a & 0xFF},
+ {0x061b & 0xFF, 0x061b & 0xFF},
+ {0x061e & 0xFF, 0x061f & 0xFF},
+ {0x0620 & 0xFF, 0x064a & 0xFF},
+ {0x064b & 0xFF, 0x065f & 0xFF},
+ {0x0660 & 0xFF, 0x0669 & 0xFF},
+ {0x066a & 0xFF, 0x066a & 0xFF},
+ {0x066b & 0xFF, 0x066c & 0xFF},
+ {0x066d & 0xFF, 0x066f & 0xFF},
+ {0x0670 & 0xFF, 0x0670 & 0xFF},
+ {0x0671 & 0xFF, 0x06d3 & 0xFF},
+ {0x06d4 & 0xFF, 0x06d4 & 0xFF},
+ {0x06d5 & 0xFF, 0x06d5 & 0xFF},
+ {0x06d6 & 0xFF, 0x06dc & 0xFF},
+ {0x06dd & 0xFF, 0x06de & 0xFF},
+ {0x06df & 0xFF, 0x06e4 & 0xFF},
+ {0x06e5 & 0xFF, 0x06e6 & 0xFF},
+ {0x06e7 & 0xFF, 0x06e8 & 0xFF},
+ {0x06e9 & 0xFF, 0x06e9 & 0xFF},
+ {0x06ea & 0xFF, 0x06ed & 0xFF},
+ {0x06ee & 0xFF, 0x06ef & 0xFF},
+ {0x06f0 & 0xFF, 0x06f9 & 0xFF},
+ {0x06fa & 0xFF, 0x06ff & 0xFF},
+ {0x0700 & 0xFF, 0x070d & 0xFF},
+ {0x070f & 0xFF, 0x0710 & 0xFF},
+ {0x0711 & 0xFF, 0x0711 & 0xFF},
+ {0x0712 & 0xFF, 0x072f & 0xFF},
+ {0x0730 & 0xFF, 0x074a & 0xFF},
+ {0x074d & 0xFF, 0x07a5 & 0xFF},
+ {0x07a6 & 0xFF, 0x07b0 & 0xFF},
+ {0x07b1 & 0xFF, 0x07b1 & 0xFF},
+ {0x07c0 & 0xFF, 0x07c9 & 0xFF},
+ {0x07ca & 0xFF, 0x07ea & 0xFF},
+ {0x07eb & 0xFF, 0x07f3 & 0xFF},
+ {0x07f4 & 0xFF, 0x07f7 & 0xFF},
+ {0x07f8 & 0xFF, 0x07f8 & 0xFF},
+ {0x07f9 & 0xFF, 0x07f9 & 0xFF},
+ {0x07fa & 0xFF, 0x07fa & 0xFF},
+ {0x0800 & 0xFF, 0x0815 & 0xFF},
+ {0x0816 & 0xFF, 0x0819 & 0xFF},
+ {0x081a & 0xFF, 0x081a & 0xFF},
+ {0x081b & 0xFF, 0x0823 & 0xFF},
+ {0x0824 & 0xFF, 0x0824 & 0xFF},
+ {0x0825 & 0xFF, 0x0827 & 0xFF},
+ {0x0828 & 0xFF, 0x0828 & 0xFF},
+ {0x0829 & 0xFF, 0x082d & 0xFF},
+ {0x0830 & 0xFF, 0x083e & 0xFF},
+ {0x0840 & 0xFF, 0x0858 & 0xFF},
+ {0x0859 & 0xFF, 0x085b & 0xFF},
+ {0x085e & 0xFF, 0x085e & 0xFF},
+ {0x0900 & 0xFF, 0x0903 & 0xFF},
+ {0x0904 & 0xFF, 0x0939 & 0xFF},
+ {0x093a & 0xFF, 0x093c & 0xFF},
+ {0x093d & 0xFF, 0x093d & 0xFF},
+ {0x093e & 0xFF, 0x094f & 0xFF},
+ {0x0950 & 0xFF, 0x0950 & 0xFF},
+ {0x0951 & 0xFF, 0x0957 & 0xFF},
+ {0x0958 & 0xFF, 0x0961 & 0xFF},
+ {0x0962 & 0xFF, 0x0963 & 0xFF},
+ {0x0964 & 0xFF, 0x0965 & 0xFF},
+ {0x0966 & 0xFF, 0x096f & 0xFF},
+ {0x0970 & 0xFF, 0x0977 & 0xFF},
+ {0x0979 & 0xFF, 0x097f & 0xFF},
+ {0x0981 & 0xFF, 0x0983 & 0xFF},
+ {0x0985 & 0xFF, 0x098c & 0xFF},
+ {0x098f & 0xFF, 0x0990 & 0xFF},
+ {0x0993 & 0xFF, 0x09a8 & 0xFF},
+ {0x09aa & 0xFF, 0x09b0 & 0xFF},
+ {0x09b2 & 0xFF, 0x09b2 & 0xFF},
+ {0x09b6 & 0xFF, 0x09b9 & 0xFF},
+ {0x09bc & 0xFF, 0x09bc & 0xFF},
+ {0x09bd & 0xFF, 0x09bd & 0xFF},
+ {0x09be & 0xFF, 0x09c4 & 0xFF},
+ {0x09c7 & 0xFF, 0x09c8 & 0xFF},
+ {0x09cb & 0xFF, 0x09cd & 0xFF},
+ {0x09ce & 0xFF, 0x09ce & 0xFF},
+ {0x09d7 & 0xFF, 0x09d7 & 0xFF},
+ {0x09dc & 0xFF, 0x09dd & 0xFF},
+ {0x09df & 0xFF, 0x09e1 & 0xFF},
+ {0x09e2 & 0xFF, 0x09e3 & 0xFF},
+ {0x09e6 & 0xFF, 0x09ef & 0xFF},
+ {0x09f0 & 0xFF, 0x09f1 & 0xFF},
+ {0x09f2 & 0xFF, 0x09f3 & 0xFF},
+ {0x09f4 & 0xFF, 0x09f8 & 0xFF},
+ {0x09f9 & 0xFF, 0x09f9 & 0xFF},
+ {0x09fa & 0xFF, 0x09fa & 0xFF},
+ {0x09fb & 0xFF, 0x09fb & 0xFF},
+ {0x0a01 & 0xFF, 0x0a03 & 0xFF},
+ {0x0a05 & 0xFF, 0x0a0a & 0xFF},
+ {0x0a0f & 0xFF, 0x0a10 & 0xFF},
+ {0x0a13 & 0xFF, 0x0a28 & 0xFF},
+ {0x0a2a & 0xFF, 0x0a30 & 0xFF},
+ {0x0a32 & 0xFF, 0x0a33 & 0xFF},
+ {0x0a35 & 0xFF, 0x0a36 & 0xFF},
+ {0x0a38 & 0xFF, 0x0a39 & 0xFF},
+ {0x0a3c & 0xFF, 0x0a3c & 0xFF},
+ {0x0a3e & 0xFF, 0x0a42 & 0xFF},
+ {0x0a47 & 0xFF, 0x0a48 & 0xFF},
+ {0x0a4b & 0xFF, 0x0a4d & 0xFF},
+ {0x0a51 & 0xFF, 0x0a51 & 0xFF},
+ {0x0a59 & 0xFF, 0x0a5c & 0xFF},
+ {0x0a5e & 0xFF, 0x0a5e & 0xFF},
+ {0x0a66 & 0xFF, 0x0a6f & 0xFF},
+ {0x0a70 & 0xFF, 0x0a71 & 0xFF},
+ {0x0a72 & 0xFF, 0x0a74 & 0xFF},
+ {0x0a75 & 0xFF, 0x0a75 & 0xFF},
+ {0x0a81 & 0xFF, 0x0a83 & 0xFF},
+ {0x0a85 & 0xFF, 0x0a8d & 0xFF},
+ {0x0a8f & 0xFF, 0x0a91 & 0xFF},
+ {0x0a93 & 0xFF, 0x0aa8 & 0xFF},
+ {0x0aaa & 0xFF, 0x0ab0 & 0xFF},
+ {0x0ab2 & 0xFF, 0x0ab3 & 0xFF},
+ {0x0ab5 & 0xFF, 0x0ab9 & 0xFF},
+ {0x0abc & 0xFF, 0x0abc & 0xFF},
+ {0x0abd & 0xFF, 0x0abd & 0xFF},
+ {0x0abe & 0xFF, 0x0ac5 & 0xFF},
+ {0x0ac7 & 0xFF, 0x0ac9 & 0xFF},
+ {0x0acb & 0xFF, 0x0acd & 0xFF},
+ {0x0ad0 & 0xFF, 0x0ad0 & 0xFF},
+ {0x0ae0 & 0xFF, 0x0ae1 & 0xFF},
+ {0x0ae2 & 0xFF, 0x0ae3 & 0xFF},
+ {0x0ae6 & 0xFF, 0x0aef & 0xFF},
+ {0x0af1 & 0xFF, 0x0af1 & 0xFF},
+ {0x0b01 & 0xFF, 0x0b03 & 0xFF},
+ {0x0b05 & 0xFF, 0x0b0c & 0xFF},
+ {0x0b0f & 0xFF, 0x0b10 & 0xFF},
+ {0x0b13 & 0xFF, 0x0b28 & 0xFF},
+ {0x0b2a & 0xFF, 0x0b30 & 0xFF},
+ {0x0b32 & 0xFF, 0x0b33 & 0xFF},
+ {0x0b35 & 0xFF, 0x0b39 & 0xFF},
+ {0x0b3c & 0xFF, 0x0b3c & 0xFF},
+ {0x0b3d & 0xFF, 0x0b3d & 0xFF},
+ {0x0b3e & 0xFF, 0x0b44 & 0xFF},
+ {0x0b47 & 0xFF, 0x0b48 & 0xFF},
+ {0x0b4b & 0xFF, 0x0b4d & 0xFF},
+ {0x0b56 & 0xFF, 0x0b57 & 0xFF},
+ {0x0b5c & 0xFF, 0x0b5d & 0xFF},
+ {0x0b5f & 0xFF, 0x0b61 & 0xFF},
+ {0x0b62 & 0xFF, 0x0b63 & 0xFF},
+ {0x0b66 & 0xFF, 0x0b6f & 0xFF},
+ {0x0b70 & 0xFF, 0x0b77 & 0xFF},
+ {0x0b82 & 0xFF, 0x0b82 & 0xFF},
+ {0x0b83 & 0xFF, 0x0b83 & 0xFF},
+ {0x0b85 & 0xFF, 0x0b8a & 0xFF},
+ {0x0b8e & 0xFF, 0x0b90 & 0xFF},
+ {0x0b92 & 0xFF, 0x0b95 & 0xFF},
+ {0x0b99 & 0xFF, 0x0b9a & 0xFF},
+ {0x0b9c & 0xFF, 0x0b9c & 0xFF},
+ {0x0b9e & 0xFF, 0x0b9f & 0xFF},
+ {0x0ba3 & 0xFF, 0x0ba4 & 0xFF},
+ {0x0ba8 & 0xFF, 0x0baa & 0xFF},
+ {0x0bae & 0xFF, 0x0bb9 & 0xFF},
+ {0x0bbe & 0xFF, 0x0bc2 & 0xFF},
+ {0x0bc6 & 0xFF, 0x0bc8 & 0xFF},
+ {0x0bca & 0xFF, 0x0bcd & 0xFF},
+ {0x0bd0 & 0xFF, 0x0bd0 & 0xFF},
+ {0x0bd7 & 0xFF, 0x0bd7 & 0xFF},
+ {0x0be6 & 0xFF, 0x0bef & 0xFF},
+ {0x0bf0 & 0xFF, 0x0bf8 & 0xFF},
+ {0x0bf9 & 0xFF, 0x0bf9 & 0xFF},
+ {0x0bfa & 0xFF, 0x0bfa & 0xFF},
+ {0x0c01 & 0xFF, 0x0c03 & 0xFF},
+ {0x0c05 & 0xFF, 0x0c0c & 0xFF},
+ {0x0c0e & 0xFF, 0x0c10 & 0xFF},
+ {0x0c12 & 0xFF, 0x0c28 & 0xFF},
+ {0x0c2a & 0xFF, 0x0c33 & 0xFF},
+ {0x0c35 & 0xFF, 0x0c39 & 0xFF},
+ {0x0c3d & 0xFF, 0x0c3d & 0xFF},
+ {0x0c3e & 0xFF, 0x0c44 & 0xFF},
+ {0x0c46 & 0xFF, 0x0c48 & 0xFF},
+ {0x0c4a & 0xFF, 0x0c4d & 0xFF},
+ {0x0c55 & 0xFF, 0x0c56 & 0xFF},
+ {0x0c58 & 0xFF, 0x0c59 & 0xFF},
+ {0x0c60 & 0xFF, 0x0c61 & 0xFF},
+ {0x0c62 & 0xFF, 0x0c63 & 0xFF},
+ {0x0c66 & 0xFF, 0x0c6f & 0xFF},
+ {0x0c78 & 0xFF, 0x0c7f & 0xFF},
+ {0x0c82 & 0xFF, 0x0c83 & 0xFF},
+ {0x0c85 & 0xFF, 0x0c8c & 0xFF},
+ {0x0c8e & 0xFF, 0x0c90 & 0xFF},
+ {0x0c92 & 0xFF, 0x0ca8 & 0xFF},
+ {0x0caa & 0xFF, 0x0cb3 & 0xFF},
+ {0x0cb5 & 0xFF, 0x0cb9 & 0xFF},
+ {0x0cbc & 0xFF, 0x0cbc & 0xFF},
+ {0x0cbd & 0xFF, 0x0cbd & 0xFF},
+ {0x0cbe & 0xFF, 0x0cc4 & 0xFF},
+ {0x0cc6 & 0xFF, 0x0cc8 & 0xFF},
+ {0x0cca & 0xFF, 0x0ccd & 0xFF},
+ {0x0cd5 & 0xFF, 0x0cd6 & 0xFF},
+ {0x0cde & 0xFF, 0x0cde & 0xFF},
+ {0x0ce0 & 0xFF, 0x0ce1 & 0xFF},
+ {0x0ce2 & 0xFF, 0x0ce3 & 0xFF},
+ {0x0ce6 & 0xFF, 0x0cef & 0xFF},
+ {0x0cf1 & 0xFF, 0x0cf2 & 0xFF},
+ {0x0d02 & 0xFF, 0x0d03 & 0xFF},
+ {0x0d05 & 0xFF, 0x0d0c & 0xFF},
+ {0x0d0e & 0xFF, 0x0d10 & 0xFF},
+ {0x0d12 & 0xFF, 0x0d3a & 0xFF},
+ {0x0d3d & 0xFF, 0x0d3d & 0xFF},
+ {0x0d3e & 0xFF, 0x0d44 & 0xFF},
+ {0x0d46 & 0xFF, 0x0d48 & 0xFF},
+ {0x0d4a & 0xFF, 0x0d4d & 0xFF},
+ {0x0d4e & 0xFF, 0x0d4e & 0xFF},
+ {0x0d57 & 0xFF, 0x0d57 & 0xFF},
+ {0x0d60 & 0xFF, 0x0d61 & 0xFF},
+ {0x0d62 & 0xFF, 0x0d63 & 0xFF},
+ {0x0d66 & 0xFF, 0x0d6f & 0xFF},
+ {0x0d70 & 0xFF, 0x0d75 & 0xFF},
+ {0x0d79 & 0xFF, 0x0d79 & 0xFF},
+ {0x0d7a & 0xFF, 0x0d7f & 0xFF},
+ {0x0d82 & 0xFF, 0x0d83 & 0xFF},
+ {0x0d85 & 0xFF, 0x0d96 & 0xFF},
+ {0x0d9a & 0xFF, 0x0db1 & 0xFF},
+ {0x0db3 & 0xFF, 0x0dbb & 0xFF},
+ {0x0dbd & 0xFF, 0x0dbd & 0xFF},
+ {0x0dc0 & 0xFF, 0x0dc6 & 0xFF},
+ {0x0dca & 0xFF, 0x0dca & 0xFF},
+ {0x0dcf & 0xFF, 0x0dd4 & 0xFF},
+ {0x0dd6 & 0xFF, 0x0dd6 & 0xFF},
+ {0x0dd8 & 0xFF, 0x0ddf & 0xFF},
+ {0x0df2 & 0xFF, 0x0df3 & 0xFF},
+ {0x0df4 & 0xFF, 0x0df4 & 0xFF},
+ {0x0e01 & 0xFF, 0x0e30 & 0xFF},
+ {0x0e31 & 0xFF, 0x0e31 & 0xFF},
+ {0x0e32 & 0xFF, 0x0e33 & 0xFF},
+ {0x0e34 & 0xFF, 0x0e3a & 0xFF},
+ {0x0e3f & 0xFF, 0x0e3f & 0xFF},
+ {0x0e40 & 0xFF, 0x0e46 & 0xFF},
+ {0x0e47 & 0xFF, 0x0e4e & 0xFF},
+ {0x0e4f & 0xFF, 0x0e4f & 0xFF},
+ {0x0e50 & 0xFF, 0x0e59 & 0xFF},
+ {0x0e5a & 0xFF, 0x0e5b & 0xFF},
+ {0x0e81 & 0xFF, 0x0e82 & 0xFF},
+ {0x0e84 & 0xFF, 0x0e84 & 0xFF},
+ {0x0e87 & 0xFF, 0x0e88 & 0xFF},
+ {0x0e8a & 0xFF, 0x0e8a & 0xFF},
+ {0x0e8d & 0xFF, 0x0e8d & 0xFF},
+ {0x0e94 & 0xFF, 0x0e97 & 0xFF},
+ {0x0e99 & 0xFF, 0x0e9f & 0xFF},
+ {0x0ea1 & 0xFF, 0x0ea3 & 0xFF},
+ {0x0ea5 & 0xFF, 0x0ea5 & 0xFF},
+ {0x0ea7 & 0xFF, 0x0ea7 & 0xFF},
+ {0x0eaa & 0xFF, 0x0eab & 0xFF},
+ {0x0ead & 0xFF, 0x0eb0 & 0xFF},
+ {0x0eb1 & 0xFF, 0x0eb1 & 0xFF},
+ {0x0eb2 & 0xFF, 0x0eb3 & 0xFF},
+ {0x0eb4 & 0xFF, 0x0eb9 & 0xFF},
+ {0x0ebb & 0xFF, 0x0ebc & 0xFF},
+ {0x0ebd & 0xFF, 0x0ebd & 0xFF},
+ {0x0ec0 & 0xFF, 0x0ec4 & 0xFF},
+ {0x0ec6 & 0xFF, 0x0ec6 & 0xFF},
+ {0x0ec8 & 0xFF, 0x0ecd & 0xFF},
+ {0x0ed0 & 0xFF, 0x0ed9 & 0xFF},
+ {0x0edc & 0xFF, 0x0edd & 0xFF},
+ {0x0f00 & 0xFF, 0x0f00 & 0xFF},
+ {0x0f01 & 0xFF, 0x0f04 & 0xFF},
+ {0x0f05 & 0xFF, 0x0f05 & 0xFF},
+ {0x0f06 & 0xFF, 0x0f07 & 0xFF},
+ {0x0f08 & 0xFF, 0x0f08 & 0xFF},
+ {0x0f09 & 0xFF, 0x0f0a & 0xFF},
+ {0x0f0b & 0xFF, 0x0f0b & 0xFF},
+ {0x0f0c & 0xFF, 0x0f0c & 0xFF},
+ {0x0f0d & 0xFF, 0x0f11 & 0xFF},
+ {0x0f12 & 0xFF, 0x0f12 & 0xFF},
+ {0x0f13 & 0xFF, 0x0f13 & 0xFF},
+ {0x0f14 & 0xFF, 0x0f14 & 0xFF},
+ {0x0f15 & 0xFF, 0x0f17 & 0xFF},
+ {0x0f18 & 0xFF, 0x0f19 & 0xFF},
+ {0x0f1a & 0xFF, 0x0f1f & 0xFF},
+ {0x0f20 & 0xFF, 0x0f29 & 0xFF},
+ {0x0f2a & 0xFF, 0x0f33 & 0xFF},
+ {0x0f34 & 0xFF, 0x0f34 & 0xFF},
+ {0x0f35 & 0xFF, 0x0f35 & 0xFF},
+ {0x0f36 & 0xFF, 0x0f36 & 0xFF},
+ {0x0f37 & 0xFF, 0x0f37 & 0xFF},
+ {0x0f38 & 0xFF, 0x0f38 & 0xFF},
+ {0x0f39 & 0xFF, 0x0f39 & 0xFF},
+ {0x0f3a & 0xFF, 0x0f3a & 0xFF},
+ {0x0f3b & 0xFF, 0x0f3b & 0xFF},
+ {0x0f3c & 0xFF, 0x0f3c & 0xFF},
+ {0x0f3d & 0xFF, 0x0f3d & 0xFF},
+ {0x0f3e & 0xFF, 0x0f3f & 0xFF},
+ {0x0f40 & 0xFF, 0x0f47 & 0xFF},
+ {0x0f49 & 0xFF, 0x0f6c & 0xFF},
+ {0x0f71 & 0xFF, 0x0f7e & 0xFF},
+ {0x0f7f & 0xFF, 0x0f7f & 0xFF},
+ {0x0f80 & 0xFF, 0x0f84 & 0xFF},
+ {0x0f85 & 0xFF, 0x0f85 & 0xFF},
+ {0x0f86 & 0xFF, 0x0f87 & 0xFF},
+ {0x0f88 & 0xFF, 0x0f8c & 0xFF},
+ {0x0f8d & 0xFF, 0x0f97 & 0xFF},
+ {0x0f99 & 0xFF, 0x0fbc & 0xFF},
+ {0x0fbe & 0xFF, 0x0fbf & 0xFF},
+ {0x0fc0 & 0xFF, 0x0fc5 & 0xFF},
+ {0x0fc6 & 0xFF, 0x0fc6 & 0xFF},
+ {0x0fc7 & 0xFF, 0x0fcc & 0xFF},
+ {0x0fce & 0xFF, 0x0fcf & 0xFF},
+ {0x0fd0 & 0xFF, 0x0fd1 & 0xFF},
+ {0x0fd2 & 0xFF, 0x0fd2 & 0xFF},
+ {0x0fd3 & 0xFF, 0x0fd3 & 0xFF},
+ {0x0fd4 & 0xFF, 0x0fd8 & 0xFF},
+ {0x0fd9 & 0xFF, 0x0fda & 0xFF},
+ {0x1000 & 0xFF, 0x102a & 0xFF},
+ {0x102b & 0xFF, 0x103e & 0xFF},
+ {0x103f & 0xFF, 0x103f & 0xFF},
+ {0x1040 & 0xFF, 0x1049 & 0xFF},
+ {0x104a & 0xFF, 0x104b & 0xFF},
+ {0x104c & 0xFF, 0x1055 & 0xFF},
+ {0x1056 & 0xFF, 0x1059 & 0xFF},
+ {0x105a & 0xFF, 0x105d & 0xFF},
+ {0x105e & 0xFF, 0x1060 & 0xFF},
+ {0x1061 & 0xFF, 0x1061 & 0xFF},
+ {0x1062 & 0xFF, 0x1064 & 0xFF},
+ {0x1065 & 0xFF, 0x1066 & 0xFF},
+ {0x1067 & 0xFF, 0x106d & 0xFF},
+ {0x106e & 0xFF, 0x1070 & 0xFF},
+ {0x1071 & 0xFF, 0x1074 & 0xFF},
+ {0x1075 & 0xFF, 0x1081 & 0xFF},
+ {0x1082 & 0xFF, 0x108d & 0xFF},
+ {0x108e & 0xFF, 0x108e & 0xFF},
+ {0x108f & 0xFF, 0x108f & 0xFF},
+ {0x1090 & 0xFF, 0x1099 & 0xFF},
+ {0x109a & 0xFF, 0x109d & 0xFF},
+ {0x109e & 0xFF, 0x10c5 & 0xFF},
+ {0x10d0 & 0xFF, 0x10fc & 0xFF},
+ {0x1100 & 0xFF, 0x115f & 0xFF},
+ {0x1160 & 0xFF, 0x11a7 & 0xFF},
+ {0x11a8 & 0xFF, 0x11ff & 0xFF},
+ {0x1200 & 0xFF, 0x1248 & 0xFF},
+ {0x124a & 0xFF, 0x124d & 0xFF},
+ {0x1250 & 0xFF, 0x1256 & 0xFF},
+ {0x1258 & 0xFF, 0x1258 & 0xFF},
+ {0x125a & 0xFF, 0x125d & 0xFF},
+ {0x1260 & 0xFF, 0x1288 & 0xFF},
+ {0x128a & 0xFF, 0x128d & 0xFF},
+ {0x1290 & 0xFF, 0x12b0 & 0xFF},
+ {0x12b2 & 0xFF, 0x12b5 & 0xFF},
+ {0x12b8 & 0xFF, 0x12be & 0xFF},
+ {0x12c0 & 0xFF, 0x12c0 & 0xFF},
+ {0x12c2 & 0xFF, 0x12c5 & 0xFF},
+ {0x12c8 & 0xFF, 0x12d6 & 0xFF},
+ {0x12d8 & 0xFF, 0x12ff & 0xFF},
+ {0x1300 & 0xFF, 0x1310 & 0xFF},
+ {0x1312 & 0xFF, 0x1315 & 0xFF},
+ {0x1318 & 0xFF, 0x135a & 0xFF},
+ {0x135d & 0xFF, 0x135f & 0xFF},
+ {0x1360 & 0xFF, 0x1360 & 0xFF},
+ {0x1361 & 0xFF, 0x1361 & 0xFF},
+ {0x1362 & 0xFF, 0x137c & 0xFF},
+ {0x1380 & 0xFF, 0x1399 & 0xFF},
+ {0x13a0 & 0xFF, 0x13f4 & 0xFF},
+ {0x1400 & 0xFF, 0x1400 & 0xFF},
+ {0x1401 & 0xFF, 0x14ff & 0xFF},
+ {0x1500 & 0xFF, 0x15ff & 0xFF},
+ {0x1600 & 0xFF, 0x167f & 0xFF},
+ {0x1680 & 0xFF, 0x1680 & 0xFF},
+ {0x1681 & 0xFF, 0x169a & 0xFF},
+ {0x169b & 0xFF, 0x169b & 0xFF},
+ {0x169c & 0xFF, 0x169c & 0xFF},
+ {0x16a0 & 0xFF, 0x16ea & 0xFF},
+ {0x16eb & 0xFF, 0x16ed & 0xFF},
+ {0x16ee & 0xFF, 0x16f0 & 0xFF},
+ {0x1700 & 0xFF, 0x170c & 0xFF},
+ {0x170e & 0xFF, 0x1711 & 0xFF},
+ {0x1712 & 0xFF, 0x1714 & 0xFF},
+ {0x1720 & 0xFF, 0x1731 & 0xFF},
+ {0x1732 & 0xFF, 0x1734 & 0xFF},
+ {0x1735 & 0xFF, 0x1736 & 0xFF},
+ {0x1740 & 0xFF, 0x1751 & 0xFF},
+ {0x1752 & 0xFF, 0x1753 & 0xFF},
+ {0x1760 & 0xFF, 0x176c & 0xFF},
+ {0x176e & 0xFF, 0x1770 & 0xFF},
+ {0x1772 & 0xFF, 0x1773 & 0xFF},
+ {0x1780 & 0xFF, 0x17b5 & 0xFF},
+ {0x17b6 & 0xFF, 0x17d3 & 0xFF},
+ {0x17d4 & 0xFF, 0x17d5 & 0xFF},
+ {0x17d6 & 0xFF, 0x17d6 & 0xFF},
+ {0x17d7 & 0xFF, 0x17d7 & 0xFF},
+ {0x17d8 & 0xFF, 0x17d8 & 0xFF},
+ {0x17d9 & 0xFF, 0x17d9 & 0xFF},
+ {0x17da & 0xFF, 0x17da & 0xFF},
+ {0x17db & 0xFF, 0x17db & 0xFF},
+ {0x17dc & 0xFF, 0x17dc & 0xFF},
+ {0x17dd & 0xFF, 0x17dd & 0xFF},
+ {0x17e0 & 0xFF, 0x17e9 & 0xFF},
+ {0x17f0 & 0xFF, 0x17f9 & 0xFF},
+ {0x1800 & 0xFF, 0x1801 & 0xFF},
+ {0x1802 & 0xFF, 0x1803 & 0xFF},
+ {0x1804 & 0xFF, 0x1805 & 0xFF},
+ {0x1806 & 0xFF, 0x1806 & 0xFF},
+ {0x1807 & 0xFF, 0x1807 & 0xFF},
+ {0x1808 & 0xFF, 0x1809 & 0xFF},
+ {0x180a & 0xFF, 0x180a & 0xFF},
+ {0x180b & 0xFF, 0x180d & 0xFF},
+ {0x180e & 0xFF, 0x180e & 0xFF},
+ {0x1810 & 0xFF, 0x1819 & 0xFF},
+ {0x1820 & 0xFF, 0x1877 & 0xFF},
+ {0x1880 & 0xFF, 0x18a8 & 0xFF},
+ {0x18a9 & 0xFF, 0x18a9 & 0xFF},
+ {0x18aa & 0xFF, 0x18aa & 0xFF},
+ {0x18b0 & 0xFF, 0x18f5 & 0xFF},
+ {0x1900 & 0xFF, 0x191c & 0xFF},
+ {0x1920 & 0xFF, 0x192b & 0xFF},
+ {0x1930 & 0xFF, 0x193b & 0xFF},
+ {0x1940 & 0xFF, 0x1940 & 0xFF},
+ {0x1944 & 0xFF, 0x1945 & 0xFF},
+ {0x1946 & 0xFF, 0x194f & 0xFF},
+ {0x1950 & 0xFF, 0x196d & 0xFF},
+ {0x1970 & 0xFF, 0x1974 & 0xFF},
+ {0x1980 & 0xFF, 0x19ab & 0xFF},
+ {0x19b0 & 0xFF, 0x19c0 & 0xFF},
+ {0x19c1 & 0xFF, 0x19c7 & 0xFF},
+ {0x19c8 & 0xFF, 0x19c9 & 0xFF},
+ {0x19d0 & 0xFF, 0x19d9 & 0xFF},
+ {0x19da & 0xFF, 0x19da & 0xFF},
+ {0x19de & 0xFF, 0x19ff & 0xFF},
+ {0x1a00 & 0xFF, 0x1a16 & 0xFF},
+ {0x1a17 & 0xFF, 0x1a1b & 0xFF},
+ {0x1a1e & 0xFF, 0x1a54 & 0xFF},
+ {0x1a55 & 0xFF, 0x1a5e & 0xFF},
+ {0x1a60 & 0xFF, 0x1a7c & 0xFF},
+ {0x1a7f & 0xFF, 0x1a7f & 0xFF},
+ {0x1a80 & 0xFF, 0x1a89 & 0xFF},
+ {0x1a90 & 0xFF, 0x1a99 & 0xFF},
+ {0x1aa0 & 0xFF, 0x1aad & 0xFF},
+ {0x1b00 & 0xFF, 0x1b04 & 0xFF},
+ {0x1b05 & 0xFF, 0x1b33 & 0xFF},
+ {0x1b34 & 0xFF, 0x1b44 & 0xFF},
+ {0x1b45 & 0xFF, 0x1b4b & 0xFF},
+ {0x1b50 & 0xFF, 0x1b59 & 0xFF},
+ {0x1b5a & 0xFF, 0x1b5b & 0xFF},
+ {0x1b5c & 0xFF, 0x1b5c & 0xFF},
+ {0x1b5d & 0xFF, 0x1b60 & 0xFF},
+ {0x1b61 & 0xFF, 0x1b6a & 0xFF},
+ {0x1b6b & 0xFF, 0x1b73 & 0xFF},
+ {0x1b74 & 0xFF, 0x1b7c & 0xFF},
+ {0x1b80 & 0xFF, 0x1b82 & 0xFF},
+ {0x1b83 & 0xFF, 0x1ba0 & 0xFF},
+ {0x1ba1 & 0xFF, 0x1baa & 0xFF},
+ {0x1bae & 0xFF, 0x1baf & 0xFF},
+ {0x1bb0 & 0xFF, 0x1bb9 & 0xFF},
+ {0x1bc0 & 0xFF, 0x1be5 & 0xFF},
+ {0x1be6 & 0xFF, 0x1bf3 & 0xFF},
+ {0x1bfc & 0xFF, 0x1bff & 0xFF},
+ {0x1c00 & 0xFF, 0x1c23 & 0xFF},
+ {0x1c24 & 0xFF, 0x1c37 & 0xFF},
+ {0x1c3b & 0xFF, 0x1c3f & 0xFF},
+ {0x1c40 & 0xFF, 0x1c49 & 0xFF},
+ {0x1c4d & 0xFF, 0x1c4f & 0xFF},
+ {0x1c50 & 0xFF, 0x1c59 & 0xFF},
+ {0x1c5a & 0xFF, 0x1c7d & 0xFF},
+ {0x1c7e & 0xFF, 0x1c7f & 0xFF},
+ {0x1cd0 & 0xFF, 0x1cd2 & 0xFF},
+ {0x1cd3 & 0xFF, 0x1cd3 & 0xFF},
+ {0x1cd4 & 0xFF, 0x1ce8 & 0xFF},
+ {0x1ce9 & 0xFF, 0x1cec & 0xFF},
+ {0x1ced & 0xFF, 0x1ced & 0xFF},
+ {0x1cee & 0xFF, 0x1cf1 & 0xFF},
+ {0x1cf2 & 0xFF, 0x1cf2 & 0xFF},
+ {0x1d00 & 0xFF, 0x1dbf & 0xFF},
+ {0x1dc0 & 0xFF, 0x1de6 & 0xFF},
+ {0x1dfc & 0xFF, 0x1dff & 0xFF},
+ {0x1e00 & 0xFF, 0x1eff & 0xFF},
+ {0x1f00 & 0xFF, 0x1f15 & 0xFF},
+ {0x1f18 & 0xFF, 0x1f1d & 0xFF},
+ {0x1f20 & 0xFF, 0x1f45 & 0xFF},
+ {0x1f48 & 0xFF, 0x1f4d & 0xFF},
+ {0x1f50 & 0xFF, 0x1f57 & 0xFF},
+ {0x1f59 & 0xFF, 0x1f59 & 0xFF},
+ {0x1f5b & 0xFF, 0x1f5b & 0xFF},
+ {0x1f5d & 0xFF, 0x1f5d & 0xFF},
+ {0x1f5f & 0xFF, 0x1f7d & 0xFF},
+ {0x1f80 & 0xFF, 0x1fb4 & 0xFF},
+ {0x1fb6 & 0xFF, 0x1fc4 & 0xFF},
+ {0x1fc6 & 0xFF, 0x1fd3 & 0xFF},
+ {0x1fd6 & 0xFF, 0x1fdb & 0xFF},
+ {0x1fdd & 0xFF, 0x1fef & 0xFF},
+ {0x1ff2 & 0xFF, 0x1ff4 & 0xFF},
+ {0x1ff6 & 0xFF, 0x1ffc & 0xFF},
+ {0x1ffd & 0xFF, 0x1ffd & 0xFF},
+ {0x1ffe & 0xFF, 0x1ffe & 0xFF},
+ {0x2000 & 0xFF, 0x2006 & 0xFF},
+ {0x2007 & 0xFF, 0x2007 & 0xFF},
+ {0x2008 & 0xFF, 0x200a & 0xFF},
+ {0x200b & 0xFF, 0x200b & 0xFF},
+ {0x200c & 0xFF, 0x200f & 0xFF},
+ {0x2010 & 0xFF, 0x2010 & 0xFF},
+ {0x2011 & 0xFF, 0x2011 & 0xFF},
+ {0x2012 & 0xFF, 0x2013 & 0xFF},
+ {0x2014 & 0xFF, 0x2014 & 0xFF},
+ {0x2015 & 0xFF, 0x2017 & 0xFF},
+ {0x2018 & 0xFF, 0x2019 & 0xFF},
+ {0x201a & 0xFF, 0x201a & 0xFF},
+ {0x201b & 0xFF, 0x201d & 0xFF},
+ {0x201e & 0xFF, 0x201e & 0xFF},
+ {0x201f & 0xFF, 0x201f & 0xFF},
+ {0x2020 & 0xFF, 0x2023 & 0xFF},
+ {0x2024 & 0xFF, 0x2026 & 0xFF},
+ {0x2027 & 0xFF, 0x2027 & 0xFF},
+ {0x2028 & 0xFF, 0x2029 & 0xFF},
+ {0x202a & 0xFF, 0x202e & 0xFF},
+ {0x202f & 0xFF, 0x202f & 0xFF},
+ {0x2030 & 0xFF, 0x2037 & 0xFF},
+ {0x2038 & 0xFF, 0x2038 & 0xFF},
+ {0x2039 & 0xFF, 0x203a & 0xFF},
+ {0x203b & 0xFF, 0x203b & 0xFF},
+ {0x203c & 0xFF, 0x203d & 0xFF},
+ {0x203e & 0xFF, 0x2043 & 0xFF},
+ {0x2044 & 0xFF, 0x2044 & 0xFF},
+ {0x2045 & 0xFF, 0x2045 & 0xFF},
+ {0x2046 & 0xFF, 0x2046 & 0xFF},
+ {0x2047 & 0xFF, 0x2049 & 0xFF},
+ {0x204a & 0xFF, 0x2055 & 0xFF},
+ {0x2056 & 0xFF, 0x2056 & 0xFF},
+ {0x2057 & 0xFF, 0x2057 & 0xFF},
+ {0x2058 & 0xFF, 0x205b & 0xFF},
+ {0x205c & 0xFF, 0x205c & 0xFF},
+ {0x205d & 0xFF, 0x205f & 0xFF},
+ {0x2060 & 0xFF, 0x2060 & 0xFF},
+ {0x2061 & 0xFF, 0x2064 & 0xFF},
+ {0x206a & 0xFF, 0x206f & 0xFF},
+ {0x2070 & 0xFF, 0x2071 & 0xFF},
+ {0x2074 & 0xFF, 0x207c & 0xFF},
+ {0x207d & 0xFF, 0x207d & 0xFF},
+ {0x207e & 0xFF, 0x207e & 0xFF},
+ {0x207f & 0xFF, 0x208c & 0xFF},
+ {0x208d & 0xFF, 0x208d & 0xFF},
+ {0x208e & 0xFF, 0x208e & 0xFF},
+ {0x2090 & 0xFF, 0x209c & 0xFF},
+ {0x20a0 & 0xFF, 0x20a6 & 0xFF},
+ {0x20a7 & 0xFF, 0x20a7 & 0xFF},
+ {0x20a8 & 0xFF, 0x20b5 & 0xFF},
+ {0x20b6 & 0xFF, 0x20b6 & 0xFF},
+ {0x20b7 & 0xFF, 0x20b9 & 0xFF},
+ {0x20d0 & 0xFF, 0x20f0 & 0xFF},
+ {0x2100 & 0xFF, 0x2102 & 0xFF},
+ {0x2103 & 0xFF, 0x2103 & 0xFF},
+ {0x2104 & 0xFF, 0x2108 & 0xFF},
+ {0x2109 & 0xFF, 0x2109 & 0xFF},
+ {0x210a & 0xFF, 0x2115 & 0xFF},
+ {0x2116 & 0xFF, 0x2116 & 0xFF},
+ {0x2117 & 0xFF, 0x2189 & 0xFF},
+ {0x2190 & 0xFF, 0x21ff & 0xFF},
+ {0x2200 & 0xFF, 0x2211 & 0xFF},
+ {0x2212 & 0xFF, 0x2213 & 0xFF},
+ {0x2214 & 0xFF, 0x22ff & 0xFF},
+ {0x2300 & 0xFF, 0x2328 & 0xFF},
+ {0x2329 & 0xFF, 0x2329 & 0xFF},
+ {0x232a & 0xFF, 0x232a & 0xFF},
+ {0x232b & 0xFF, 0x23f3 & 0xFF},
+ {0x2400 & 0xFF, 0x2426 & 0xFF},
+ {0x2440 & 0xFF, 0x244a & 0xFF},
+ {0x2460 & 0xFF, 0x24ff & 0xFF},
+ {0x2500 & 0xFF, 0x25ff & 0xFF},
+ {0x2600 & 0xFF, 0x26ff & 0xFF},
+ {0x2701 & 0xFF, 0x275a & 0xFF},
+ {0x275b & 0xFF, 0x275e & 0xFF},
+ {0x275f & 0xFF, 0x2761 & 0xFF},
+ {0x2762 & 0xFF, 0x2763 & 0xFF},
+ {0x2764 & 0xFF, 0x2767 & 0xFF},
+ {0x2768 & 0xFF, 0x2768 & 0xFF},
+ {0x2769 & 0xFF, 0x2769 & 0xFF},
+ {0x276a & 0xFF, 0x276a & 0xFF},
+ {0x276b & 0xFF, 0x276b & 0xFF},
+ {0x276c & 0xFF, 0x276c & 0xFF},
+ {0x276d & 0xFF, 0x276d & 0xFF},
+ {0x276e & 0xFF, 0x276e & 0xFF},
+ {0x276f & 0xFF, 0x276f & 0xFF},
+ {0x2770 & 0xFF, 0x2770 & 0xFF},
+ {0x2771 & 0xFF, 0x2771 & 0xFF},
+ {0x2772 & 0xFF, 0x2772 & 0xFF},
+ {0x2773 & 0xFF, 0x2773 & 0xFF},
+ {0x2774 & 0xFF, 0x2774 & 0xFF},
+ {0x2775 & 0xFF, 0x2775 & 0xFF},
+ {0x2776 & 0xFF, 0x27c4 & 0xFF},
+ {0x27c5 & 0xFF, 0x27c5 & 0xFF},
+ {0x27c6 & 0xFF, 0x27c6 & 0xFF},
+ {0x27c7 & 0xFF, 0x27ca & 0xFF},
+ {0x27cc & 0xFF, 0x27cc & 0xFF},
+ {0x27ce & 0xFF, 0x27e5 & 0xFF},
+ {0x27e6 & 0xFF, 0x27e6 & 0xFF},
+ {0x27e7 & 0xFF, 0x27e7 & 0xFF},
+ {0x27e8 & 0xFF, 0x27e8 & 0xFF},
+ {0x27e9 & 0xFF, 0x27e9 & 0xFF},
+ {0x27ea & 0xFF, 0x27ea & 0xFF},
+ {0x27eb & 0xFF, 0x27eb & 0xFF},
+ {0x27ec & 0xFF, 0x27ec & 0xFF},
+ {0x27ed & 0xFF, 0x27ed & 0xFF},
+ {0x27ee & 0xFF, 0x27ee & 0xFF},
+ {0x27ef & 0xFF, 0x27ef & 0xFF},
+ {0x27f0 & 0xFF, 0x27ff & 0xFF},
+ {0x2800 & 0xFF, 0x28ff & 0xFF},
+ {0x2900 & 0xFF, 0x2982 & 0xFF},
+ {0x2983 & 0xFF, 0x2983 & 0xFF},
+ {0x2984 & 0xFF, 0x2984 & 0xFF},
+ {0x2985 & 0xFF, 0x2985 & 0xFF},
+ {0x2986 & 0xFF, 0x2986 & 0xFF},
+ {0x2987 & 0xFF, 0x2987 & 0xFF},
+ {0x2988 & 0xFF, 0x2988 & 0xFF},
+ {0x2989 & 0xFF, 0x2989 & 0xFF},
+ {0x298a & 0xFF, 0x298a & 0xFF},
+ {0x298b & 0xFF, 0x298b & 0xFF},
+ {0x298c & 0xFF, 0x298c & 0xFF},
+ {0x298d & 0xFF, 0x298d & 0xFF},
+ {0x298e & 0xFF, 0x298e & 0xFF},
+ {0x298f & 0xFF, 0x298f & 0xFF},
+ {0x2990 & 0xFF, 0x2990 & 0xFF},
+ {0x2991 & 0xFF, 0x2991 & 0xFF},
+ {0x2992 & 0xFF, 0x2992 & 0xFF},
+ {0x2993 & 0xFF, 0x2993 & 0xFF},
+ {0x2994 & 0xFF, 0x2994 & 0xFF},
+ {0x2995 & 0xFF, 0x2995 & 0xFF},
+ {0x2996 & 0xFF, 0x2996 & 0xFF},
+ {0x2997 & 0xFF, 0x2997 & 0xFF},
+ {0x2998 & 0xFF, 0x2998 & 0xFF},
+ {0x2999 & 0xFF, 0x29d7 & 0xFF},
+ {0x29d8 & 0xFF, 0x29d8 & 0xFF},
+ {0x29d9 & 0xFF, 0x29d9 & 0xFF},
+ {0x29da & 0xFF, 0x29da & 0xFF},
+ {0x29db & 0xFF, 0x29db & 0xFF},
+ {0x29dc & 0xFF, 0x29fb & 0xFF},
+ {0x29fc & 0xFF, 0x29fc & 0xFF},
+ {0x29fd & 0xFF, 0x29fd & 0xFF},
+ {0x29fe & 0xFF, 0x29ff & 0xFF},
+ {0x2a00 & 0xFF, 0x2aff & 0xFF},
+ {0x2b00 & 0xFF, 0x2b4c & 0xFF},
+ {0x2b50 & 0xFF, 0x2b59 & 0xFF},
+ {0x2c00 & 0xFF, 0x2c2e & 0xFF},
+ {0x2c30 & 0xFF, 0x2c5e & 0xFF},
+ {0x2c60 & 0xFF, 0x2cee & 0xFF},
+ {0x2cef & 0xFF, 0x2cf1 & 0xFF},
+ {0x2cf9 & 0xFF, 0x2cf9 & 0xFF},
+ {0x2cfa & 0xFF, 0x2cfc & 0xFF},
+ {0x2cfd & 0xFF, 0x2cfd & 0xFF},
+ {0x2cfe & 0xFF, 0x2cfe & 0xFF},
+ {0x2cff & 0xFF, 0x2cff & 0xFF},
+ {0x2d00 & 0xFF, 0x2d25 & 0xFF},
+ {0x2d30 & 0xFF, 0x2d65 & 0xFF},
+ {0x2d6f & 0xFF, 0x2d6f & 0xFF},
+ {0x2d70 & 0xFF, 0x2d70 & 0xFF},
+ {0x2d7f & 0xFF, 0x2d7f & 0xFF},
+ {0x2d80 & 0xFF, 0x2d96 & 0xFF},
+ {0x2da0 & 0xFF, 0x2da6 & 0xFF},
+ {0x2da8 & 0xFF, 0x2dae & 0xFF},
+ {0x2db0 & 0xFF, 0x2db6 & 0xFF},
+ {0x2db8 & 0xFF, 0x2dbe & 0xFF},
+ {0x2dc0 & 0xFF, 0x2dc6 & 0xFF},
+ {0x2dc8 & 0xFF, 0x2dce & 0xFF},
+ {0x2dd0 & 0xFF, 0x2dd6 & 0xFF},
+ {0x2dd8 & 0xFF, 0x2dde & 0xFF},
+ {0x2de0 & 0xFF, 0x2dff & 0xFF},
+ {0x2e00 & 0xFF, 0x2e0d & 0xFF},
+ {0x2e0e & 0xFF, 0x2e15 & 0xFF},
+ {0x2e16 & 0xFF, 0x2e16 & 0xFF},
+ {0x2e17 & 0xFF, 0x2e17 & 0xFF},
+ {0x2e18 & 0xFF, 0x2e18 & 0xFF},
+ {0x2e19 & 0xFF, 0x2e19 & 0xFF},
+ {0x2e1a & 0xFF, 0x2e1b & 0xFF},
+ {0x2e1c & 0xFF, 0x2e1d & 0xFF},
+ {0x2e1e & 0xFF, 0x2e1f & 0xFF},
+ {0x2e20 & 0xFF, 0x2e21 & 0xFF},
+ {0x2e22 & 0xFF, 0x2e22 & 0xFF},
+ {0x2e23 & 0xFF, 0x2e23 & 0xFF},
+ {0x2e24 & 0xFF, 0x2e24 & 0xFF},
+ {0x2e25 & 0xFF, 0x2e25 & 0xFF},
+ {0x2e26 & 0xFF, 0x2e26 & 0xFF},
+ {0x2e27 & 0xFF, 0x2e27 & 0xFF},
+ {0x2e28 & 0xFF, 0x2e28 & 0xFF},
+ {0x2e29 & 0xFF, 0x2e29 & 0xFF},
+ {0x2e2a & 0xFF, 0x2e2d & 0xFF},
+ {0x2e2e & 0xFF, 0x2e2e & 0xFF},
+ {0x2e2f & 0xFF, 0x2e2f & 0xFF},
+ {0x2e30 & 0xFF, 0x2e31 & 0xFF},
+ {0x2e80 & 0xFF, 0x2e99 & 0xFF},
+ {0x2e9b & 0xFF, 0x2ef3 & 0xFF},
+ {0x2f00 & 0xFF, 0x2fd5 & 0xFF},
+ {0x2ff0 & 0xFF, 0x2ffb & 0xFF},
+ {0x3000 & 0xFF, 0x3000 & 0xFF},
+ {0x3001 & 0xFF, 0x3002 & 0xFF},
+ {0x3003 & 0xFF, 0x3004 & 0xFF},
+ {0x3005 & 0xFF, 0x3005 & 0xFF},
+ {0x3006 & 0xFF, 0x3007 & 0xFF},
+ {0x3008 & 0xFF, 0x3008 & 0xFF},
+ {0x3009 & 0xFF, 0x3009 & 0xFF},
+ {0x300a & 0xFF, 0x300a & 0xFF},
+ {0x300b & 0xFF, 0x300b & 0xFF},
+ {0x300c & 0xFF, 0x300c & 0xFF},
+ {0x300d & 0xFF, 0x300d & 0xFF},
+ {0x300e & 0xFF, 0x300e & 0xFF},
+ {0x300f & 0xFF, 0x300f & 0xFF},
+ {0x3010 & 0xFF, 0x3010 & 0xFF},
+ {0x3011 & 0xFF, 0x3011 & 0xFF},
+ {0x3012 & 0xFF, 0x3013 & 0xFF},
+ {0x3014 & 0xFF, 0x3014 & 0xFF},
+ {0x3015 & 0xFF, 0x3015 & 0xFF},
+ {0x3016 & 0xFF, 0x3016 & 0xFF},
+ {0x3017 & 0xFF, 0x3017 & 0xFF},
+ {0x3018 & 0xFF, 0x3018 & 0xFF},
+ {0x3019 & 0xFF, 0x3019 & 0xFF},
+ {0x301a & 0xFF, 0x301a & 0xFF},
+ {0x301b & 0xFF, 0x301b & 0xFF},
+ {0x301c & 0xFF, 0x301c & 0xFF},
+ {0x301d & 0xFF, 0x301d & 0xFF},
+ {0x301e & 0xFF, 0x301f & 0xFF},
+ {0x3020 & 0xFF, 0x3029 & 0xFF},
+ {0x302a & 0xFF, 0x302f & 0xFF},
+ {0x3030 & 0xFF, 0x303a & 0xFF},
+ {0x303b & 0xFF, 0x303c & 0xFF},
+ {0x303d & 0xFF, 0x303f & 0xFF},
+ {0x3041 & 0xFF, 0x3041 & 0xFF},
+ {0x3042 & 0xFF, 0x3042 & 0xFF},
+ {0x3043 & 0xFF, 0x3043 & 0xFF},
+ {0x3044 & 0xFF, 0x3044 & 0xFF},
+ {0x3045 & 0xFF, 0x3045 & 0xFF},
+ {0x3046 & 0xFF, 0x3046 & 0xFF},
+ {0x3047 & 0xFF, 0x3047 & 0xFF},
+ {0x3048 & 0xFF, 0x3048 & 0xFF},
+ {0x3049 & 0xFF, 0x3049 & 0xFF},
+ {0x304a & 0xFF, 0x3062 & 0xFF},
+ {0x3063 & 0xFF, 0x3063 & 0xFF},
+ {0x3064 & 0xFF, 0x3082 & 0xFF},
+ {0x3083 & 0xFF, 0x3083 & 0xFF},
+ {0x3084 & 0xFF, 0x3084 & 0xFF},
+ {0x3085 & 0xFF, 0x3085 & 0xFF},
+ {0x3086 & 0xFF, 0x3086 & 0xFF},
+ {0x3087 & 0xFF, 0x3087 & 0xFF},
+ {0x3088 & 0xFF, 0x308d & 0xFF},
+ {0x308e & 0xFF, 0x308e & 0xFF},
+ {0x308f & 0xFF, 0x3094 & 0xFF},
+ {0x3095 & 0xFF, 0x3096 & 0xFF},
+ {0x3099 & 0xFF, 0x309a & 0xFF},
+ {0x309b & 0xFF, 0x309e & 0xFF},
+ {0x309f & 0xFF, 0x309f & 0xFF},
+ {0x30a0 & 0xFF, 0x30a1 & 0xFF},
+ {0x30a2 & 0xFF, 0x30a2 & 0xFF},
+ {0x30a3 & 0xFF, 0x30a3 & 0xFF},
+ {0x30a4 & 0xFF, 0x30a4 & 0xFF},
+ {0x30a5 & 0xFF, 0x30a5 & 0xFF},
+ {0x30a6 & 0xFF, 0x30a6 & 0xFF},
+ {0x30a7 & 0xFF, 0x30a7 & 0xFF},
+ {0x30a8 & 0xFF, 0x30a8 & 0xFF},
+ {0x30a9 & 0xFF, 0x30a9 & 0xFF},
+ {0x30aa & 0xFF, 0x30c2 & 0xFF},
+ {0x30c3 & 0xFF, 0x30c3 & 0xFF},
+ {0x30c4 & 0xFF, 0x30e2 & 0xFF},
+ {0x30e3 & 0xFF, 0x30e3 & 0xFF},
+ {0x30e4 & 0xFF, 0x30e4 & 0xFF},
+ {0x30e5 & 0xFF, 0x30e5 & 0xFF},
+ {0x30e6 & 0xFF, 0x30e6 & 0xFF},
+ {0x30e7 & 0xFF, 0x30e7 & 0xFF},
+ {0x30e8 & 0xFF, 0x30ed & 0xFF},
+ {0x30ee & 0xFF, 0x30ee & 0xFF},
+ {0x30ef & 0xFF, 0x30f4 & 0xFF},
+ {0x30f5 & 0xFF, 0x30f6 & 0xFF},
+ {0x30f7 & 0xFF, 0x30fa & 0xFF},
+ {0x30fb & 0xFF, 0x30fe & 0xFF},
+ {0x30ff & 0xFF, 0x30ff & 0xFF},
+ {0x3105 & 0xFF, 0x312d & 0xFF},
+ {0x3131 & 0xFF, 0x318e & 0xFF},
+ {0x3190 & 0xFF, 0x31ba & 0xFF},
+ {0x31c0 & 0xFF, 0x31e3 & 0xFF},
+ {0x31f0 & 0xFF, 0x31ff & 0xFF},
+ {0x3200 & 0xFF, 0x321e & 0xFF},
+ {0x3220 & 0xFF, 0x3247 & 0xFF},
+ {0x3248 & 0xFF, 0x324f & 0xFF},
+ {0x3250 & 0xFF, 0x32fe & 0xFF},
+ {0x3300 & 0xFF, 0x33ff & 0xFF},
+ {0x3400 & 0xFF, 0x34ff & 0xFF},
+ {0x3500 & 0xFF, 0x35ff & 0xFF},
+ {0x3600 & 0xFF, 0x36ff & 0xFF},
+ {0x3700 & 0xFF, 0x37ff & 0xFF},
+ {0x3800 & 0xFF, 0x38ff & 0xFF},
+ {0x3900 & 0xFF, 0x39ff & 0xFF},
+ {0x3a00 & 0xFF, 0x3aff & 0xFF},
+ {0x3b00 & 0xFF, 0x3bff & 0xFF},
+ {0x3c00 & 0xFF, 0x3cff & 0xFF},
+ {0x3d00 & 0xFF, 0x3dff & 0xFF},
+ {0x3e00 & 0xFF, 0x3eff & 0xFF},
+ {0x3f00 & 0xFF, 0x3fff & 0xFF},
+ {0x4000 & 0xFF, 0x40ff & 0xFF},
+ {0x4100 & 0xFF, 0x41ff & 0xFF},
+ {0x4200 & 0xFF, 0x42ff & 0xFF},
+ {0x4300 & 0xFF, 0x43ff & 0xFF},
+ {0x4400 & 0xFF, 0x44ff & 0xFF},
+ {0x4500 & 0xFF, 0x45ff & 0xFF},
+ {0x4600 & 0xFF, 0x46ff & 0xFF},
+ {0x4700 & 0xFF, 0x47ff & 0xFF},
+ {0x4800 & 0xFF, 0x48ff & 0xFF},
+ {0x4900 & 0xFF, 0x49ff & 0xFF},
+ {0x4a00 & 0xFF, 0x4aff & 0xFF},
+ {0x4b00 & 0xFF, 0x4bff & 0xFF},
+ {0x4c00 & 0xFF, 0x4cff & 0xFF},
+ {0x4d00 & 0xFF, 0x4dbf & 0xFF},
+ {0x4dc0 & 0xFF, 0x4dff & 0xFF},
+ {0x4e00 & 0xFF, 0x4eff & 0xFF},
+ {0x4f00 & 0xFF, 0x4fff & 0xFF},
+ {0x5000 & 0xFF, 0x50ff & 0xFF},
+ {0x5100 & 0xFF, 0x51ff & 0xFF},
+ {0x5200 & 0xFF, 0x52ff & 0xFF},
+ {0x5300 & 0xFF, 0x53ff & 0xFF},
+ {0x5400 & 0xFF, 0x54ff & 0xFF},
+ {0x5500 & 0xFF, 0x55ff & 0xFF},
+ {0x5600 & 0xFF, 0x56ff & 0xFF},
+ {0x5700 & 0xFF, 0x57ff & 0xFF},
+ {0x5800 & 0xFF, 0x58ff & 0xFF},
+ {0x5900 & 0xFF, 0x59ff & 0xFF},
+ {0x5a00 & 0xFF, 0x5aff & 0xFF},
+ {0x5b00 & 0xFF, 0x5bff & 0xFF},
+ {0x5c00 & 0xFF, 0x5cff & 0xFF},
+ {0x5d00 & 0xFF, 0x5dff & 0xFF},
+ {0x5e00 & 0xFF, 0x5eff & 0xFF},
+ {0x5f00 & 0xFF, 0x5fff & 0xFF},
+ {0x6000 & 0xFF, 0x60ff & 0xFF},
+ {0x6100 & 0xFF, 0x61ff & 0xFF},
+ {0x6200 & 0xFF, 0x62ff & 0xFF},
+ {0x6300 & 0xFF, 0x63ff & 0xFF},
+ {0x6400 & 0xFF, 0x64ff & 0xFF},
+ {0x6500 & 0xFF, 0x65ff & 0xFF},
+ {0x6600 & 0xFF, 0x66ff & 0xFF},
+ {0x6700 & 0xFF, 0x67ff & 0xFF},
+ {0x6800 & 0xFF, 0x68ff & 0xFF},
+ {0x6900 & 0xFF, 0x69ff & 0xFF},
+ {0x6a00 & 0xFF, 0x6aff & 0xFF},
+ {0x6b00 & 0xFF, 0x6bff & 0xFF},
+ {0x6c00 & 0xFF, 0x6cff & 0xFF},
+ {0x6d00 & 0xFF, 0x6dff & 0xFF},
+ {0x6e00 & 0xFF, 0x6eff & 0xFF},
+ {0x6f00 & 0xFF, 0x6fff & 0xFF},
+ {0x7000 & 0xFF, 0x70ff & 0xFF},
+ {0x7100 & 0xFF, 0x71ff & 0xFF},
+ {0x7200 & 0xFF, 0x72ff & 0xFF},
+ {0x7300 & 0xFF, 0x73ff & 0xFF},
+ {0x7400 & 0xFF, 0x74ff & 0xFF},
+ {0x7500 & 0xFF, 0x75ff & 0xFF},
+ {0x7600 & 0xFF, 0x76ff & 0xFF},
+ {0x7700 & 0xFF, 0x77ff & 0xFF},
+ {0x7800 & 0xFF, 0x78ff & 0xFF},
+ {0x7900 & 0xFF, 0x79ff & 0xFF},
+ {0x7a00 & 0xFF, 0x7aff & 0xFF},
+ {0x7b00 & 0xFF, 0x7bff & 0xFF},
+ {0x7c00 & 0xFF, 0x7cff & 0xFF},
+ {0x7d00 & 0xFF, 0x7dff & 0xFF},
+ {0x7e00 & 0xFF, 0x7eff & 0xFF},
+ {0x7f00 & 0xFF, 0x7fff & 0xFF},
+ {0x8000 & 0xFF, 0x80ff & 0xFF},
+ {0x8100 & 0xFF, 0x81ff & 0xFF},
+ {0x8200 & 0xFF, 0x82ff & 0xFF},
+ {0x8300 & 0xFF, 0x83ff & 0xFF},
+ {0x8400 & 0xFF, 0x84ff & 0xFF},
+ {0x8500 & 0xFF, 0x85ff & 0xFF},
+ {0x8600 & 0xFF, 0x86ff & 0xFF},
+ {0x8700 & 0xFF, 0x87ff & 0xFF},
+ {0x8800 & 0xFF, 0x88ff & 0xFF},
+ {0x8900 & 0xFF, 0x89ff & 0xFF},
+ {0x8a00 & 0xFF, 0x8aff & 0xFF},
+ {0x8b00 & 0xFF, 0x8bff & 0xFF},
+ {0x8c00 & 0xFF, 0x8cff & 0xFF},
+ {0x8d00 & 0xFF, 0x8dff & 0xFF},
+ {0x8e00 & 0xFF, 0x8eff & 0xFF},
+ {0x8f00 & 0xFF, 0x8fff & 0xFF},
+ {0x9000 & 0xFF, 0x90ff & 0xFF},
+ {0x9100 & 0xFF, 0x91ff & 0xFF},
+ {0x9200 & 0xFF, 0x92ff & 0xFF},
+ {0x9300 & 0xFF, 0x93ff & 0xFF},
+ {0x9400 & 0xFF, 0x94ff & 0xFF},
+ {0x9500 & 0xFF, 0x95ff & 0xFF},
+ {0x9600 & 0xFF, 0x96ff & 0xFF},
+ {0x9700 & 0xFF, 0x97ff & 0xFF},
+ {0x9800 & 0xFF, 0x98ff & 0xFF},
+ {0x9900 & 0xFF, 0x99ff & 0xFF},
+ {0x9a00 & 0xFF, 0x9aff & 0xFF},
+ {0x9b00 & 0xFF, 0x9bff & 0xFF},
+ {0x9c00 & 0xFF, 0x9cff & 0xFF},
+ {0x9d00 & 0xFF, 0x9dff & 0xFF},
+ {0x9e00 & 0xFF, 0x9eff & 0xFF},
+ {0x9f00 & 0xFF, 0x9fff & 0xFF},
+ {0xa000 & 0xFF, 0xa014 & 0xFF},
+ {0xa015 & 0xFF, 0xa015 & 0xFF},
+ {0xa016 & 0xFF, 0xa0ff & 0xFF},
+ {0xa100 & 0xFF, 0xa1ff & 0xFF},
+ {0xa200 & 0xFF, 0xa2ff & 0xFF},
+ {0xa300 & 0xFF, 0xa3ff & 0xFF},
+ {0xa400 & 0xFF, 0xa48c & 0xFF},
+ {0xa490 & 0xFF, 0xa4c6 & 0xFF},
+ {0xa4d0 & 0xFF, 0xa4fd & 0xFF},
+ {0xa4fe & 0xFF, 0xa4ff & 0xFF},
+ {0xa500 & 0xFF, 0xa5ff & 0xFF},
+ {0xa600 & 0xFF, 0xa60c & 0xFF},
+ {0xa60d & 0xFF, 0xa60d & 0xFF},
+ {0xa60e & 0xFF, 0xa60e & 0xFF},
+ {0xa60f & 0xFF, 0xa60f & 0xFF},
+ {0xa610 & 0xFF, 0xa61f & 0xFF},
+ {0xa620 & 0xFF, 0xa629 & 0xFF},
+ {0xa62a & 0xFF, 0xa62b & 0xFF},
+ {0xa640 & 0xFF, 0xa66e & 0xFF},
+ {0xa66f & 0xFF, 0xa672 & 0xFF},
+ {0xa673 & 0xFF, 0xa673 & 0xFF},
+ {0xa67c & 0xFF, 0xa67d & 0xFF},
+ {0xa67e & 0xFF, 0xa697 & 0xFF},
+ {0xa6a0 & 0xFF, 0xa6ef & 0xFF},
+ {0xa6f0 & 0xFF, 0xa6f1 & 0xFF},
+ {0xa6f2 & 0xFF, 0xa6f2 & 0xFF},
+ {0xa6f3 & 0xFF, 0xa6f7 & 0xFF},
+ {0xa700 & 0xFF, 0xa78e & 0xFF},
+ {0xa790 & 0xFF, 0xa791 & 0xFF},
+ {0xa7a0 & 0xFF, 0xa7a9 & 0xFF},
+ {0xa7fa & 0xFF, 0xa7ff & 0xFF},
+ {0xa800 & 0xFF, 0xa801 & 0xFF},
+ {0xa802 & 0xFF, 0xa802 & 0xFF},
+ {0xa803 & 0xFF, 0xa805 & 0xFF},
+ {0xa806 & 0xFF, 0xa806 & 0xFF},
+ {0xa807 & 0xFF, 0xa80a & 0xFF},
+ {0xa80b & 0xFF, 0xa80b & 0xFF},
+ {0xa80c & 0xFF, 0xa822 & 0xFF},
+ {0xa823 & 0xFF, 0xa827 & 0xFF},
+ {0xa828 & 0xFF, 0xa82b & 0xFF},
+ {0xa830 & 0xFF, 0xa837 & 0xFF},
+ {0xa838 & 0xFF, 0xa838 & 0xFF},
+ {0xa839 & 0xFF, 0xa839 & 0xFF},
+ {0xa840 & 0xFF, 0xa873 & 0xFF},
+ {0xa874 & 0xFF, 0xa875 & 0xFF},
+ {0xa876 & 0xFF, 0xa877 & 0xFF},
+ {0xa880 & 0xFF, 0xa881 & 0xFF},
+ {0xa882 & 0xFF, 0xa8b3 & 0xFF},
+ {0xa8b4 & 0xFF, 0xa8c4 & 0xFF},
+ {0xa8ce & 0xFF, 0xa8cf & 0xFF},
+ {0xa8d0 & 0xFF, 0xa8d9 & 0xFF},
+ {0xa8e0 & 0xFF, 0xa8f1 & 0xFF},
+ {0xa8f2 & 0xFF, 0xa8fb & 0xFF},
+ {0xa900 & 0xFF, 0xa909 & 0xFF},
+ {0xa90a & 0xFF, 0xa925 & 0xFF},
+ {0xa926 & 0xFF, 0xa92d & 0xFF},
+ {0xa92e & 0xFF, 0xa92f & 0xFF},
+ {0xa930 & 0xFF, 0xa946 & 0xFF},
+ {0xa947 & 0xFF, 0xa953 & 0xFF},
+ {0xa95f & 0xFF, 0xa95f & 0xFF},
+ {0xa960 & 0xFF, 0xa97c & 0xFF},
+ {0xa980 & 0xFF, 0xa983 & 0xFF},
+ {0xa984 & 0xFF, 0xa9b2 & 0xFF},
+ {0xa9b3 & 0xFF, 0xa9c0 & 0xFF},
+ {0xa9c1 & 0xFF, 0xa9c6 & 0xFF},
+ {0xa9c7 & 0xFF, 0xa9c9 & 0xFF},
+ {0xa9ca & 0xFF, 0xa9cd & 0xFF},
+ {0xa9cf & 0xFF, 0xa9cf & 0xFF},
+ {0xa9d0 & 0xFF, 0xa9d9 & 0xFF},
+ {0xa9de & 0xFF, 0xa9df & 0xFF},
+ {0xaa00 & 0xFF, 0xaa28 & 0xFF},
+ {0xaa29 & 0xFF, 0xaa36 & 0xFF},
+ {0xaa40 & 0xFF, 0xaa42 & 0xFF},
+ {0xaa43 & 0xFF, 0xaa43 & 0xFF},
+ {0xaa44 & 0xFF, 0xaa4b & 0xFF},
+ {0xaa4c & 0xFF, 0xaa4d & 0xFF},
+ {0xaa50 & 0xFF, 0xaa59 & 0xFF},
+ {0xaa5c & 0xFF, 0xaa5c & 0xFF},
+ {0xaa5d & 0xFF, 0xaa5f & 0xFF},
+ {0xaa60 & 0xFF, 0xaa7a & 0xFF},
+ {0xaa7b & 0xFF, 0xaa7b & 0xFF},
+ {0xaa80 & 0xFF, 0xaaaf & 0xFF},
+ {0xaab0 & 0xFF, 0xaab0 & 0xFF},
+ {0xaab1 & 0xFF, 0xaab1 & 0xFF},
+ {0xaab2 & 0xFF, 0xaab4 & 0xFF},
+ {0xaab5 & 0xFF, 0xaab6 & 0xFF},
+ {0xaab7 & 0xFF, 0xaab8 & 0xFF},
+ {0xaab9 & 0xFF, 0xaabd & 0xFF},
+ {0xaabe & 0xFF, 0xaabf & 0xFF},
+ {0xaac0 & 0xFF, 0xaac0 & 0xFF},
+ {0xaac1 & 0xFF, 0xaac1 & 0xFF},
+ {0xaac2 & 0xFF, 0xaac2 & 0xFF},
+ {0xaadb & 0xFF, 0xaadf & 0xFF},
+ {0xab01 & 0xFF, 0xab06 & 0xFF},
+ {0xab09 & 0xFF, 0xab0e & 0xFF},
+ {0xab11 & 0xFF, 0xab16 & 0xFF},
+ {0xab20 & 0xFF, 0xab26 & 0xFF},
+ {0xab28 & 0xFF, 0xab2e & 0xFF},
+ {0xabc0 & 0xFF, 0xabe2 & 0xFF},
+ {0xabe3 & 0xFF, 0xabea & 0xFF},
+ {0xabeb & 0xFF, 0xabeb & 0xFF},
+ {0xabec & 0xFF, 0xabed & 0xFF},
+ {0xabf0 & 0xFF, 0xabf9 & 0xFF},
+ {0xac00 & 0xFF, 0xac00 & 0xFF},
+ {0xac01 & 0xFF, 0xac1b & 0xFF},
+ {0xac1c & 0xFF, 0xac1c & 0xFF},
+ {0xac1d & 0xFF, 0xac37 & 0xFF},
+ {0xac38 & 0xFF, 0xac38 & 0xFF},
+ {0xac39 & 0xFF, 0xac53 & 0xFF},
+ {0xac54 & 0xFF, 0xac54 & 0xFF},
+ {0xac55 & 0xFF, 0xac6f & 0xFF},
+ {0xac70 & 0xFF, 0xac70 & 0xFF},
+ {0xac71 & 0xFF, 0xac8b & 0xFF},
+ {0xac8c & 0xFF, 0xac8c & 0xFF},
+ {0xac8d & 0xFF, 0xaca7 & 0xFF},
+ {0xaca8 & 0xFF, 0xaca8 & 0xFF},
+ {0xaca9 & 0xFF, 0xacc3 & 0xFF},
+ {0xacc4 & 0xFF, 0xacc4 & 0xFF},
+ {0xacc5 & 0xFF, 0xacdf & 0xFF},
+ {0xace0 & 0xFF, 0xace0 & 0xFF},
+ {0xace1 & 0xFF, 0xacfb & 0xFF},
+ {0xacfc & 0xFF, 0xacfc & 0xFF},
+ {0xacfd & 0xFF, 0xacff & 0xFF},
+ {0xad00 & 0xFF, 0xad17 & 0xFF},
+ {0xad18 & 0xFF, 0xad18 & 0xFF},
+ {0xad19 & 0xFF, 0xad33 & 0xFF},
+ {0xad34 & 0xFF, 0xad34 & 0xFF},
+ {0xad35 & 0xFF, 0xad4f & 0xFF},
+ {0xad50 & 0xFF, 0xad50 & 0xFF},
+ {0xad51 & 0xFF, 0xad6b & 0xFF},
+ {0xad6c & 0xFF, 0xad6c & 0xFF},
+ {0xad6d & 0xFF, 0xad87 & 0xFF},
+ {0xad88 & 0xFF, 0xad88 & 0xFF},
+ {0xad89 & 0xFF, 0xada3 & 0xFF},
+ {0xada4 & 0xFF, 0xada4 & 0xFF},
+ {0xada5 & 0xFF, 0xadbf & 0xFF},
+ {0xadc0 & 0xFF, 0xadc0 & 0xFF},
+ {0xadc1 & 0xFF, 0xaddb & 0xFF},
+ {0xaddc & 0xFF, 0xaddc & 0xFF},
+ {0xaddd & 0xFF, 0xadf7 & 0xFF},
+ {0xadf8 & 0xFF, 0xadf8 & 0xFF},
+ {0xadf9 & 0xFF, 0xadff & 0xFF},
+ {0xae00 & 0xFF, 0xae13 & 0xFF},
+ {0xae14 & 0xFF, 0xae14 & 0xFF},
+ {0xae15 & 0xFF, 0xae2f & 0xFF},
+ {0xae30 & 0xFF, 0xae30 & 0xFF},
+ {0xae31 & 0xFF, 0xae4b & 0xFF},
+ {0xae4c & 0xFF, 0xae4c & 0xFF},
+ {0xae4d & 0xFF, 0xae67 & 0xFF},
+ {0xae68 & 0xFF, 0xae68 & 0xFF},
+ {0xae69 & 0xFF, 0xae83 & 0xFF},
+ {0xae84 & 0xFF, 0xae84 & 0xFF},
+ {0xae85 & 0xFF, 0xae9f & 0xFF},
+ {0xaea0 & 0xFF, 0xaea0 & 0xFF},
+ {0xaea1 & 0xFF, 0xaebb & 0xFF},
+ {0xaebc & 0xFF, 0xaebc & 0xFF},
+ {0xaebd & 0xFF, 0xaed7 & 0xFF},
+ {0xaed8 & 0xFF, 0xaed8 & 0xFF},
+ {0xaed9 & 0xFF, 0xaef3 & 0xFF},
+ {0xaef4 & 0xFF, 0xaef4 & 0xFF},
+ {0xaef5 & 0xFF, 0xaeff & 0xFF},
+ {0xaf00 & 0xFF, 0xaf0f & 0xFF},
+ {0xaf10 & 0xFF, 0xaf10 & 0xFF},
+ {0xaf11 & 0xFF, 0xaf2b & 0xFF},
+ {0xaf2c & 0xFF, 0xaf2c & 0xFF},
+ {0xaf2d & 0xFF, 0xaf47 & 0xFF},
+ {0xaf48 & 0xFF, 0xaf48 & 0xFF},
+ {0xaf49 & 0xFF, 0xaf63 & 0xFF},
+ {0xaf64 & 0xFF, 0xaf64 & 0xFF},
+ {0xaf65 & 0xFF, 0xaf7f & 0xFF},
+ {0xaf80 & 0xFF, 0xaf80 & 0xFF},
+ {0xaf81 & 0xFF, 0xaf9b & 0xFF},
+ {0xaf9c & 0xFF, 0xaf9c & 0xFF},
+ {0xaf9d & 0xFF, 0xafb7 & 0xFF},
+ {0xafb8 & 0xFF, 0xafb8 & 0xFF},
+ {0xafb9 & 0xFF, 0xafd3 & 0xFF},
+ {0xafd4 & 0xFF, 0xafd4 & 0xFF},
+ {0xafd5 & 0xFF, 0xafef & 0xFF},
+ {0xaff0 & 0xFF, 0xaff0 & 0xFF},
+ {0xaff1 & 0xFF, 0xafff & 0xFF},
+ {0xb000 & 0xFF, 0xb00b & 0xFF},
+ {0xb00c & 0xFF, 0xb00c & 0xFF},
+ {0xb00d & 0xFF, 0xb027 & 0xFF},
+ {0xb028 & 0xFF, 0xb028 & 0xFF},
+ {0xb029 & 0xFF, 0xb043 & 0xFF},
+ {0xb044 & 0xFF, 0xb044 & 0xFF},
+ {0xb045 & 0xFF, 0xb05f & 0xFF},
+ {0xb060 & 0xFF, 0xb060 & 0xFF},
+ {0xb061 & 0xFF, 0xb07b & 0xFF},
+ {0xb07c & 0xFF, 0xb07c & 0xFF},
+ {0xb07d & 0xFF, 0xb097 & 0xFF},
+ {0xb098 & 0xFF, 0xb098 & 0xFF},
+ {0xb099 & 0xFF, 0xb0b3 & 0xFF},
+ {0xb0b4 & 0xFF, 0xb0b4 & 0xFF},
+ {0xb0b5 & 0xFF, 0xb0cf & 0xFF},
+ {0xb0d0 & 0xFF, 0xb0d0 & 0xFF},
+ {0xb0d1 & 0xFF, 0xb0eb & 0xFF},
+ {0xb0ec & 0xFF, 0xb0ec & 0xFF},
+ {0xb0ed & 0xFF, 0xb0ff & 0xFF},
+ {0xb100 & 0xFF, 0xb107 & 0xFF},
+ {0xb108 & 0xFF, 0xb108 & 0xFF},
+ {0xb109 & 0xFF, 0xb123 & 0xFF},
+ {0xb124 & 0xFF, 0xb124 & 0xFF},
+ {0xb125 & 0xFF, 0xb13f & 0xFF},
+ {0xb140 & 0xFF, 0xb140 & 0xFF},
+ {0xb141 & 0xFF, 0xb15b & 0xFF},
+ {0xb15c & 0xFF, 0xb15c & 0xFF},
+ {0xb15d & 0xFF, 0xb177 & 0xFF},
+ {0xb178 & 0xFF, 0xb178 & 0xFF},
+ {0xb179 & 0xFF, 0xb193 & 0xFF},
+ {0xb194 & 0xFF, 0xb194 & 0xFF},
+ {0xb195 & 0xFF, 0xb1af & 0xFF},
+ {0xb1b0 & 0xFF, 0xb1b0 & 0xFF},
+ {0xb1b1 & 0xFF, 0xb1cb & 0xFF},
+ {0xb1cc & 0xFF, 0xb1cc & 0xFF},
+ {0xb1cd & 0xFF, 0xb1e7 & 0xFF},
+ {0xb1e8 & 0xFF, 0xb1e8 & 0xFF},
+ {0xb1e9 & 0xFF, 0xb1ff & 0xFF},
+ {0xb200 & 0xFF, 0xb203 & 0xFF},
+ {0xb204 & 0xFF, 0xb204 & 0xFF},
+ {0xb205 & 0xFF, 0xb21f & 0xFF},
+ {0xb220 & 0xFF, 0xb220 & 0xFF},
+ {0xb221 & 0xFF, 0xb23b & 0xFF},
+ {0xb23c & 0xFF, 0xb23c & 0xFF},
+ {0xb23d & 0xFF, 0xb257 & 0xFF},
+ {0xb258 & 0xFF, 0xb258 & 0xFF},
+ {0xb259 & 0xFF, 0xb273 & 0xFF},
+ {0xb274 & 0xFF, 0xb274 & 0xFF},
+ {0xb275 & 0xFF, 0xb28f & 0xFF},
+ {0xb290 & 0xFF, 0xb290 & 0xFF},
+ {0xb291 & 0xFF, 0xb2ab & 0xFF},
+ {0xb2ac & 0xFF, 0xb2ac & 0xFF},
+ {0xb2ad & 0xFF, 0xb2c7 & 0xFF},
+ {0xb2c8 & 0xFF, 0xb2c8 & 0xFF},
+ {0xb2c9 & 0xFF, 0xb2e3 & 0xFF},
+ {0xb2e4 & 0xFF, 0xb2e4 & 0xFF},
+ {0xb2e5 & 0xFF, 0xb2ff & 0xFF},
+ {0xb300 & 0xFF, 0xb300 & 0xFF},
+ {0xb301 & 0xFF, 0xb31b & 0xFF},
+ {0xb31c & 0xFF, 0xb31c & 0xFF},
+ {0xb31d & 0xFF, 0xb337 & 0xFF},
+ {0xb338 & 0xFF, 0xb338 & 0xFF},
+ {0xb339 & 0xFF, 0xb353 & 0xFF},
+ {0xb354 & 0xFF, 0xb354 & 0xFF},
+ {0xb355 & 0xFF, 0xb36f & 0xFF},
+ {0xb370 & 0xFF, 0xb370 & 0xFF},
+ {0xb371 & 0xFF, 0xb38b & 0xFF},
+ {0xb38c & 0xFF, 0xb38c & 0xFF},
+ {0xb38d & 0xFF, 0xb3a7 & 0xFF},
+ {0xb3a8 & 0xFF, 0xb3a8 & 0xFF},
+ {0xb3a9 & 0xFF, 0xb3c3 & 0xFF},
+ {0xb3c4 & 0xFF, 0xb3c4 & 0xFF},
+ {0xb3c5 & 0xFF, 0xb3df & 0xFF},
+ {0xb3e0 & 0xFF, 0xb3e0 & 0xFF},
+ {0xb3e1 & 0xFF, 0xb3fb & 0xFF},
+ {0xb3fc & 0xFF, 0xb3fc & 0xFF},
+ {0xb3fd & 0xFF, 0xb3ff & 0xFF},
+ {0xb400 & 0xFF, 0xb417 & 0xFF},
+ {0xb418 & 0xFF, 0xb418 & 0xFF},
+ {0xb419 & 0xFF, 0xb433 & 0xFF},
+ {0xb434 & 0xFF, 0xb434 & 0xFF},
+ {0xb435 & 0xFF, 0xb44f & 0xFF},
+ {0xb450 & 0xFF, 0xb450 & 0xFF},
+ {0xb451 & 0xFF, 0xb46b & 0xFF},
+ {0xb46c & 0xFF, 0xb46c & 0xFF},
+ {0xb46d & 0xFF, 0xb487 & 0xFF},
+ {0xb488 & 0xFF, 0xb488 & 0xFF},
+ {0xb489 & 0xFF, 0xb4a3 & 0xFF},
+ {0xb4a4 & 0xFF, 0xb4a4 & 0xFF},
+ {0xb4a5 & 0xFF, 0xb4bf & 0xFF},
+ {0xb4c0 & 0xFF, 0xb4c0 & 0xFF},
+ {0xb4c1 & 0xFF, 0xb4db & 0xFF},
+ {0xb4dc & 0xFF, 0xb4dc & 0xFF},
+ {0xb4dd & 0xFF, 0xb4f7 & 0xFF},
+ {0xb4f8 & 0xFF, 0xb4f8 & 0xFF},
+ {0xb4f9 & 0xFF, 0xb4ff & 0xFF},
+ {0xb500 & 0xFF, 0xb513 & 0xFF},
+ {0xb514 & 0xFF, 0xb514 & 0xFF},
+ {0xb515 & 0xFF, 0xb52f & 0xFF},
+ {0xb530 & 0xFF, 0xb530 & 0xFF},
+ {0xb531 & 0xFF, 0xb54b & 0xFF},
+ {0xb54c & 0xFF, 0xb54c & 0xFF},
+ {0xb54d & 0xFF, 0xb567 & 0xFF},
+ {0xb568 & 0xFF, 0xb568 & 0xFF},
+ {0xb569 & 0xFF, 0xb583 & 0xFF},
+ {0xb584 & 0xFF, 0xb584 & 0xFF},
+ {0xb585 & 0xFF, 0xb59f & 0xFF},
+ {0xb5a0 & 0xFF, 0xb5a0 & 0xFF},
+ {0xb5a1 & 0xFF, 0xb5bb & 0xFF},
+ {0xb5bc & 0xFF, 0xb5bc & 0xFF},
+ {0xb5bd & 0xFF, 0xb5d7 & 0xFF},
+ {0xb5d8 & 0xFF, 0xb5d8 & 0xFF},
+ {0xb5d9 & 0xFF, 0xb5f3 & 0xFF},
+ {0xb5f4 & 0xFF, 0xb5f4 & 0xFF},
+ {0xb5f5 & 0xFF, 0xb5ff & 0xFF},
+ {0xb600 & 0xFF, 0xb60f & 0xFF},
+ {0xb610 & 0xFF, 0xb610 & 0xFF},
+ {0xb611 & 0xFF, 0xb62b & 0xFF},
+ {0xb62c & 0xFF, 0xb62c & 0xFF},
+ {0xb62d & 0xFF, 0xb647 & 0xFF},
+ {0xb648 & 0xFF, 0xb648 & 0xFF},
+ {0xb649 & 0xFF, 0xb663 & 0xFF},
+ {0xb664 & 0xFF, 0xb664 & 0xFF},
+ {0xb665 & 0xFF, 0xb67f & 0xFF},
+ {0xb680 & 0xFF, 0xb680 & 0xFF},
+ {0xb681 & 0xFF, 0xb69b & 0xFF},
+ {0xb69c & 0xFF, 0xb69c & 0xFF},
+ {0xb69d & 0xFF, 0xb6b7 & 0xFF},
+ {0xb6b8 & 0xFF, 0xb6b8 & 0xFF},
+ {0xb6b9 & 0xFF, 0xb6d3 & 0xFF},
+ {0xb6d4 & 0xFF, 0xb6d4 & 0xFF},
+ {0xb6d5 & 0xFF, 0xb6ef & 0xFF},
+ {0xb6f0 & 0xFF, 0xb6f0 & 0xFF},
+ {0xb6f1 & 0xFF, 0xb6ff & 0xFF},
+ {0xb700 & 0xFF, 0xb70b & 0xFF},
+ {0xb70c & 0xFF, 0xb70c & 0xFF},
+ {0xb70d & 0xFF, 0xb727 & 0xFF},
+ {0xb728 & 0xFF, 0xb728 & 0xFF},
+ {0xb729 & 0xFF, 0xb743 & 0xFF},
+ {0xb744 & 0xFF, 0xb744 & 0xFF},
+ {0xb745 & 0xFF, 0xb75f & 0xFF},
+ {0xb760 & 0xFF, 0xb760 & 0xFF},
+ {0xb761 & 0xFF, 0xb77b & 0xFF},
+ {0xb77c & 0xFF, 0xb77c & 0xFF},
+ {0xb77d & 0xFF, 0xb797 & 0xFF},
+ {0xb798 & 0xFF, 0xb798 & 0xFF},
+ {0xb799 & 0xFF, 0xb7b3 & 0xFF},
+ {0xb7b4 & 0xFF, 0xb7b4 & 0xFF},
+ {0xb7b5 & 0xFF, 0xb7cf & 0xFF},
+ {0xb7d0 & 0xFF, 0xb7d0 & 0xFF},
+ {0xb7d1 & 0xFF, 0xb7eb & 0xFF},
+ {0xb7ec & 0xFF, 0xb7ec & 0xFF},
+ {0xb7ed & 0xFF, 0xb7ff & 0xFF},
+ {0xb800 & 0xFF, 0xb807 & 0xFF},
+ {0xb808 & 0xFF, 0xb808 & 0xFF},
+ {0xb809 & 0xFF, 0xb823 & 0xFF},
+ {0xb824 & 0xFF, 0xb824 & 0xFF},
+ {0xb825 & 0xFF, 0xb83f & 0xFF},
+ {0xb840 & 0xFF, 0xb840 & 0xFF},
+ {0xb841 & 0xFF, 0xb85b & 0xFF},
+ {0xb85c & 0xFF, 0xb85c & 0xFF},
+ {0xb85d & 0xFF, 0xb877 & 0xFF},
+ {0xb878 & 0xFF, 0xb878 & 0xFF},
+ {0xb879 & 0xFF, 0xb893 & 0xFF},
+ {0xb894 & 0xFF, 0xb894 & 0xFF},
+ {0xb895 & 0xFF, 0xb8af & 0xFF},
+ {0xb8b0 & 0xFF, 0xb8b0 & 0xFF},
+ {0xb8b1 & 0xFF, 0xb8cb & 0xFF},
+ {0xb8cc & 0xFF, 0xb8cc & 0xFF},
+ {0xb8cd & 0xFF, 0xb8e7 & 0xFF},
+ {0xb8e8 & 0xFF, 0xb8e8 & 0xFF},
+ {0xb8e9 & 0xFF, 0xb8ff & 0xFF},
+ {0xb900 & 0xFF, 0xb903 & 0xFF},
+ {0xb904 & 0xFF, 0xb904 & 0xFF},
+ {0xb905 & 0xFF, 0xb91f & 0xFF},
+ {0xb920 & 0xFF, 0xb920 & 0xFF},
+ {0xb921 & 0xFF, 0xb93b & 0xFF},
+ {0xb93c & 0xFF, 0xb93c & 0xFF},
+ {0xb93d & 0xFF, 0xb957 & 0xFF},
+ {0xb958 & 0xFF, 0xb958 & 0xFF},
+ {0xb959 & 0xFF, 0xb973 & 0xFF},
+ {0xb974 & 0xFF, 0xb974 & 0xFF},
+ {0xb975 & 0xFF, 0xb98f & 0xFF},
+ {0xb990 & 0xFF, 0xb990 & 0xFF},
+ {0xb991 & 0xFF, 0xb9ab & 0xFF},
+ {0xb9ac & 0xFF, 0xb9ac & 0xFF},
+ {0xb9ad & 0xFF, 0xb9c7 & 0xFF},
+ {0xb9c8 & 0xFF, 0xb9c8 & 0xFF},
+ {0xb9c9 & 0xFF, 0xb9e3 & 0xFF},
+ {0xb9e4 & 0xFF, 0xb9e4 & 0xFF},
+ {0xb9e5 & 0xFF, 0xb9ff & 0xFF},
+ {0xba00 & 0xFF, 0xba00 & 0xFF},
+ {0xba01 & 0xFF, 0xba1b & 0xFF},
+ {0xba1c & 0xFF, 0xba1c & 0xFF},
+ {0xba1d & 0xFF, 0xba37 & 0xFF},
+ {0xba38 & 0xFF, 0xba38 & 0xFF},
+ {0xba39 & 0xFF, 0xba53 & 0xFF},
+ {0xba54 & 0xFF, 0xba54 & 0xFF},
+ {0xba55 & 0xFF, 0xba6f & 0xFF},
+ {0xba70 & 0xFF, 0xba70 & 0xFF},
+ {0xba71 & 0xFF, 0xba8b & 0xFF},
+ {0xba8c & 0xFF, 0xba8c & 0xFF},
+ {0xba8d & 0xFF, 0xbaa7 & 0xFF},
+ {0xbaa8 & 0xFF, 0xbaa8 & 0xFF},
+ {0xbaa9 & 0xFF, 0xbac3 & 0xFF},
+ {0xbac4 & 0xFF, 0xbac4 & 0xFF},
+ {0xbac5 & 0xFF, 0xbadf & 0xFF},
+ {0xbae0 & 0xFF, 0xbae0 & 0xFF},
+ {0xbae1 & 0xFF, 0xbafb & 0xFF},
+ {0xbafc & 0xFF, 0xbafc & 0xFF},
+ {0xbafd & 0xFF, 0xbaff & 0xFF},
+ {0xbb00 & 0xFF, 0xbb17 & 0xFF},
+ {0xbb18 & 0xFF, 0xbb18 & 0xFF},
+ {0xbb19 & 0xFF, 0xbb33 & 0xFF},
+ {0xbb34 & 0xFF, 0xbb34 & 0xFF},
+ {0xbb35 & 0xFF, 0xbb4f & 0xFF},
+ {0xbb50 & 0xFF, 0xbb50 & 0xFF},
+ {0xbb51 & 0xFF, 0xbb6b & 0xFF},
+ {0xbb6c & 0xFF, 0xbb6c & 0xFF},
+ {0xbb6d & 0xFF, 0xbb87 & 0xFF},
+ {0xbb88 & 0xFF, 0xbb88 & 0xFF},
+ {0xbb89 & 0xFF, 0xbba3 & 0xFF},
+ {0xbba4 & 0xFF, 0xbba4 & 0xFF},
+ {0xbba5 & 0xFF, 0xbbbf & 0xFF},
+ {0xbbc0 & 0xFF, 0xbbc0 & 0xFF},
+ {0xbbc1 & 0xFF, 0xbbdb & 0xFF},
+ {0xbbdc & 0xFF, 0xbbdc & 0xFF},
+ {0xbbdd & 0xFF, 0xbbf7 & 0xFF},
+ {0xbbf8 & 0xFF, 0xbbf8 & 0xFF},
+ {0xbbf9 & 0xFF, 0xbbff & 0xFF},
+ {0xbc00 & 0xFF, 0xbc13 & 0xFF},
+ {0xbc14 & 0xFF, 0xbc14 & 0xFF},
+ {0xbc15 & 0xFF, 0xbc2f & 0xFF},
+ {0xbc30 & 0xFF, 0xbc30 & 0xFF},
+ {0xbc31 & 0xFF, 0xbc4b & 0xFF},
+ {0xbc4c & 0xFF, 0xbc4c & 0xFF},
+ {0xbc4d & 0xFF, 0xbc67 & 0xFF},
+ {0xbc68 & 0xFF, 0xbc68 & 0xFF},
+ {0xbc69 & 0xFF, 0xbc83 & 0xFF},
+ {0xbc84 & 0xFF, 0xbc84 & 0xFF},
+ {0xbc85 & 0xFF, 0xbc9f & 0xFF},
+ {0xbca0 & 0xFF, 0xbca0 & 0xFF},
+ {0xbca1 & 0xFF, 0xbcbb & 0xFF},
+ {0xbcbc & 0xFF, 0xbcbc & 0xFF},
+ {0xbcbd & 0xFF, 0xbcd7 & 0xFF},
+ {0xbcd8 & 0xFF, 0xbcd8 & 0xFF},
+ {0xbcd9 & 0xFF, 0xbcf3 & 0xFF},
+ {0xbcf4 & 0xFF, 0xbcf4 & 0xFF},
+ {0xbcf5 & 0xFF, 0xbcff & 0xFF},
+ {0xbd00 & 0xFF, 0xbd0f & 0xFF},
+ {0xbd10 & 0xFF, 0xbd10 & 0xFF},
+ {0xbd11 & 0xFF, 0xbd2b & 0xFF},
+ {0xbd2c & 0xFF, 0xbd2c & 0xFF},
+ {0xbd2d & 0xFF, 0xbd47 & 0xFF},
+ {0xbd48 & 0xFF, 0xbd48 & 0xFF},
+ {0xbd49 & 0xFF, 0xbd63 & 0xFF},
+ {0xbd64 & 0xFF, 0xbd64 & 0xFF},
+ {0xbd65 & 0xFF, 0xbd7f & 0xFF},
+ {0xbd80 & 0xFF, 0xbd80 & 0xFF},
+ {0xbd81 & 0xFF, 0xbd9b & 0xFF},
+ {0xbd9c & 0xFF, 0xbd9c & 0xFF},
+ {0xbd9d & 0xFF, 0xbdb7 & 0xFF},
+ {0xbdb8 & 0xFF, 0xbdb8 & 0xFF},
+ {0xbdb9 & 0xFF, 0xbdd3 & 0xFF},
+ {0xbdd4 & 0xFF, 0xbdd4 & 0xFF},
+ {0xbdd5 & 0xFF, 0xbdef & 0xFF},
+ {0xbdf0 & 0xFF, 0xbdf0 & 0xFF},
+ {0xbdf1 & 0xFF, 0xbdff & 0xFF},
+ {0xbe00 & 0xFF, 0xbe0b & 0xFF},
+ {0xbe0c & 0xFF, 0xbe0c & 0xFF},
+ {0xbe0d & 0xFF, 0xbe27 & 0xFF},
+ {0xbe28 & 0xFF, 0xbe28 & 0xFF},
+ {0xbe29 & 0xFF, 0xbe43 & 0xFF},
+ {0xbe44 & 0xFF, 0xbe44 & 0xFF},
+ {0xbe45 & 0xFF, 0xbe5f & 0xFF},
+ {0xbe60 & 0xFF, 0xbe60 & 0xFF},
+ {0xbe61 & 0xFF, 0xbe7b & 0xFF},
+ {0xbe7c & 0xFF, 0xbe7c & 0xFF},
+ {0xbe7d & 0xFF, 0xbe97 & 0xFF},
+ {0xbe98 & 0xFF, 0xbe98 & 0xFF},
+ {0xbe99 & 0xFF, 0xbeb3 & 0xFF},
+ {0xbeb4 & 0xFF, 0xbeb4 & 0xFF},
+ {0xbeb5 & 0xFF, 0xbecf & 0xFF},
+ {0xbed0 & 0xFF, 0xbed0 & 0xFF},
+ {0xbed1 & 0xFF, 0xbeeb & 0xFF},
+ {0xbeec & 0xFF, 0xbeec & 0xFF},
+ {0xbeed & 0xFF, 0xbeff & 0xFF},
+ {0xbf00 & 0xFF, 0xbf07 & 0xFF},
+ {0xbf08 & 0xFF, 0xbf08 & 0xFF},
+ {0xbf09 & 0xFF, 0xbf23 & 0xFF},
+ {0xbf24 & 0xFF, 0xbf24 & 0xFF},
+ {0xbf25 & 0xFF, 0xbf3f & 0xFF},
+ {0xbf40 & 0xFF, 0xbf40 & 0xFF},
+ {0xbf41 & 0xFF, 0xbf5b & 0xFF},
+ {0xbf5c & 0xFF, 0xbf5c & 0xFF},
+ {0xbf5d & 0xFF, 0xbf77 & 0xFF},
+ {0xbf78 & 0xFF, 0xbf78 & 0xFF},
+ {0xbf79 & 0xFF, 0xbf93 & 0xFF},
+ {0xbf94 & 0xFF, 0xbf94 & 0xFF},
+ {0xbf95 & 0xFF, 0xbfaf & 0xFF},
+ {0xbfb0 & 0xFF, 0xbfb0 & 0xFF},
+ {0xbfb1 & 0xFF, 0xbfcb & 0xFF},
+ {0xbfcc & 0xFF, 0xbfcc & 0xFF},
+ {0xbfcd & 0xFF, 0xbfe7 & 0xFF},
+ {0xbfe8 & 0xFF, 0xbfe8 & 0xFF},
+ {0xbfe9 & 0xFF, 0xbfff & 0xFF},
+ {0xc000 & 0xFF, 0xc003 & 0xFF},
+ {0xc004 & 0xFF, 0xc004 & 0xFF},
+ {0xc005 & 0xFF, 0xc01f & 0xFF},
+ {0xc020 & 0xFF, 0xc020 & 0xFF},
+ {0xc021 & 0xFF, 0xc03b & 0xFF},
+ {0xc03c & 0xFF, 0xc03c & 0xFF},
+ {0xc03d & 0xFF, 0xc057 & 0xFF},
+ {0xc058 & 0xFF, 0xc058 & 0xFF},
+ {0xc059 & 0xFF, 0xc073 & 0xFF},
+ {0xc074 & 0xFF, 0xc074 & 0xFF},
+ {0xc075 & 0xFF, 0xc08f & 0xFF},
+ {0xc090 & 0xFF, 0xc090 & 0xFF},
+ {0xc091 & 0xFF, 0xc0ab & 0xFF},
+ {0xc0ac & 0xFF, 0xc0ac & 0xFF},
+ {0xc0ad & 0xFF, 0xc0c7 & 0xFF},
+ {0xc0c8 & 0xFF, 0xc0c8 & 0xFF},
+ {0xc0c9 & 0xFF, 0xc0e3 & 0xFF},
+ {0xc0e4 & 0xFF, 0xc0e4 & 0xFF},
+ {0xc0e5 & 0xFF, 0xc0ff & 0xFF},
+ {0xc100 & 0xFF, 0xc100 & 0xFF},
+ {0xc101 & 0xFF, 0xc11b & 0xFF},
+ {0xc11c & 0xFF, 0xc11c & 0xFF},
+ {0xc11d & 0xFF, 0xc137 & 0xFF},
+ {0xc138 & 0xFF, 0xc138 & 0xFF},
+ {0xc139 & 0xFF, 0xc153 & 0xFF},
+ {0xc154 & 0xFF, 0xc154 & 0xFF},
+ {0xc155 & 0xFF, 0xc16f & 0xFF},
+ {0xc170 & 0xFF, 0xc170 & 0xFF},
+ {0xc171 & 0xFF, 0xc18b & 0xFF},
+ {0xc18c & 0xFF, 0xc18c & 0xFF},
+ {0xc18d & 0xFF, 0xc1a7 & 0xFF},
+ {0xc1a8 & 0xFF, 0xc1a8 & 0xFF},
+ {0xc1a9 & 0xFF, 0xc1c3 & 0xFF},
+ {0xc1c4 & 0xFF, 0xc1c4 & 0xFF},
+ {0xc1c5 & 0xFF, 0xc1df & 0xFF},
+ {0xc1e0 & 0xFF, 0xc1e0 & 0xFF},
+ {0xc1e1 & 0xFF, 0xc1fb & 0xFF},
+ {0xc1fc & 0xFF, 0xc1fc & 0xFF},
+ {0xc1fd & 0xFF, 0xc1ff & 0xFF},
+ {0xc200 & 0xFF, 0xc217 & 0xFF},
+ {0xc218 & 0xFF, 0xc218 & 0xFF},
+ {0xc219 & 0xFF, 0xc233 & 0xFF},
+ {0xc234 & 0xFF, 0xc234 & 0xFF},
+ {0xc235 & 0xFF, 0xc24f & 0xFF},
+ {0xc250 & 0xFF, 0xc250 & 0xFF},
+ {0xc251 & 0xFF, 0xc26b & 0xFF},
+ {0xc26c & 0xFF, 0xc26c & 0xFF},
+ {0xc26d & 0xFF, 0xc287 & 0xFF},
+ {0xc288 & 0xFF, 0xc288 & 0xFF},
+ {0xc289 & 0xFF, 0xc2a3 & 0xFF},
+ {0xc2a4 & 0xFF, 0xc2a4 & 0xFF},
+ {0xc2a5 & 0xFF, 0xc2bf & 0xFF},
+ {0xc2c0 & 0xFF, 0xc2c0 & 0xFF},
+ {0xc2c1 & 0xFF, 0xc2db & 0xFF},
+ {0xc2dc & 0xFF, 0xc2dc & 0xFF},
+ {0xc2dd & 0xFF, 0xc2f7 & 0xFF},
+ {0xc2f8 & 0xFF, 0xc2f8 & 0xFF},
+ {0xc2f9 & 0xFF, 0xc2ff & 0xFF},
+ {0xc300 & 0xFF, 0xc313 & 0xFF},
+ {0xc314 & 0xFF, 0xc314 & 0xFF},
+ {0xc315 & 0xFF, 0xc32f & 0xFF},
+ {0xc330 & 0xFF, 0xc330 & 0xFF},
+ {0xc331 & 0xFF, 0xc34b & 0xFF},
+ {0xc34c & 0xFF, 0xc34c & 0xFF},
+ {0xc34d & 0xFF, 0xc367 & 0xFF},
+ {0xc368 & 0xFF, 0xc368 & 0xFF},
+ {0xc369 & 0xFF, 0xc383 & 0xFF},
+ {0xc384 & 0xFF, 0xc384 & 0xFF},
+ {0xc385 & 0xFF, 0xc39f & 0xFF},
+ {0xc3a0 & 0xFF, 0xc3a0 & 0xFF},
+ {0xc3a1 & 0xFF, 0xc3bb & 0xFF},
+ {0xc3bc & 0xFF, 0xc3bc & 0xFF},
+ {0xc3bd & 0xFF, 0xc3d7 & 0xFF},
+ {0xc3d8 & 0xFF, 0xc3d8 & 0xFF},
+ {0xc3d9 & 0xFF, 0xc3f3 & 0xFF},
+ {0xc3f4 & 0xFF, 0xc3f4 & 0xFF},
+ {0xc3f5 & 0xFF, 0xc3ff & 0xFF},
+ {0xc400 & 0xFF, 0xc40f & 0xFF},
+ {0xc410 & 0xFF, 0xc410 & 0xFF},
+ {0xc411 & 0xFF, 0xc42b & 0xFF},
+ {0xc42c & 0xFF, 0xc42c & 0xFF},
+ {0xc42d & 0xFF, 0xc447 & 0xFF},
+ {0xc448 & 0xFF, 0xc448 & 0xFF},
+ {0xc449 & 0xFF, 0xc463 & 0xFF},
+ {0xc464 & 0xFF, 0xc464 & 0xFF},
+ {0xc465 & 0xFF, 0xc47f & 0xFF},
+ {0xc480 & 0xFF, 0xc480 & 0xFF},
+ {0xc481 & 0xFF, 0xc49b & 0xFF},
+ {0xc49c & 0xFF, 0xc49c & 0xFF},
+ {0xc49d & 0xFF, 0xc4b7 & 0xFF},
+ {0xc4b8 & 0xFF, 0xc4b8 & 0xFF},
+ {0xc4b9 & 0xFF, 0xc4d3 & 0xFF},
+ {0xc4d4 & 0xFF, 0xc4d4 & 0xFF},
+ {0xc4d5 & 0xFF, 0xc4ef & 0xFF},
+ {0xc4f0 & 0xFF, 0xc4f0 & 0xFF},
+ {0xc4f1 & 0xFF, 0xc4ff & 0xFF},
+ {0xc500 & 0xFF, 0xc50b & 0xFF},
+ {0xc50c & 0xFF, 0xc50c & 0xFF},
+ {0xc50d & 0xFF, 0xc527 & 0xFF},
+ {0xc528 & 0xFF, 0xc528 & 0xFF},
+ {0xc529 & 0xFF, 0xc543 & 0xFF},
+ {0xc544 & 0xFF, 0xc544 & 0xFF},
+ {0xc545 & 0xFF, 0xc55f & 0xFF},
+ {0xc560 & 0xFF, 0xc560 & 0xFF},
+ {0xc561 & 0xFF, 0xc57b & 0xFF},
+ {0xc57c & 0xFF, 0xc57c & 0xFF},
+ {0xc57d & 0xFF, 0xc597 & 0xFF},
+ {0xc598 & 0xFF, 0xc598 & 0xFF},
+ {0xc599 & 0xFF, 0xc5b3 & 0xFF},
+ {0xc5b4 & 0xFF, 0xc5b4 & 0xFF},
+ {0xc5b5 & 0xFF, 0xc5cf & 0xFF},
+ {0xc5d0 & 0xFF, 0xc5d0 & 0xFF},
+ {0xc5d1 & 0xFF, 0xc5eb & 0xFF},
+ {0xc5ec & 0xFF, 0xc5ec & 0xFF},
+ {0xc5ed & 0xFF, 0xc5ff & 0xFF},
+ {0xc600 & 0xFF, 0xc607 & 0xFF},
+ {0xc608 & 0xFF, 0xc608 & 0xFF},
+ {0xc609 & 0xFF, 0xc623 & 0xFF},
+ {0xc624 & 0xFF, 0xc624 & 0xFF},
+ {0xc625 & 0xFF, 0xc63f & 0xFF},
+ {0xc640 & 0xFF, 0xc640 & 0xFF},
+ {0xc641 & 0xFF, 0xc65b & 0xFF},
+ {0xc65c & 0xFF, 0xc65c & 0xFF},
+ {0xc65d & 0xFF, 0xc677 & 0xFF},
+ {0xc678 & 0xFF, 0xc678 & 0xFF},
+ {0xc679 & 0xFF, 0xc693 & 0xFF},
+ {0xc694 & 0xFF, 0xc694 & 0xFF},
+ {0xc695 & 0xFF, 0xc6af & 0xFF},
+ {0xc6b0 & 0xFF, 0xc6b0 & 0xFF},
+ {0xc6b1 & 0xFF, 0xc6cb & 0xFF},
+ {0xc6cc & 0xFF, 0xc6cc & 0xFF},
+ {0xc6cd & 0xFF, 0xc6e7 & 0xFF},
+ {0xc6e8 & 0xFF, 0xc6e8 & 0xFF},
+ {0xc6e9 & 0xFF, 0xc6ff & 0xFF},
+ {0xc700 & 0xFF, 0xc703 & 0xFF},
+ {0xc704 & 0xFF, 0xc704 & 0xFF},
+ {0xc705 & 0xFF, 0xc71f & 0xFF},
+ {0xc720 & 0xFF, 0xc720 & 0xFF},
+ {0xc721 & 0xFF, 0xc73b & 0xFF},
+ {0xc73c & 0xFF, 0xc73c & 0xFF},
+ {0xc73d & 0xFF, 0xc757 & 0xFF},
+ {0xc758 & 0xFF, 0xc758 & 0xFF},
+ {0xc759 & 0xFF, 0xc773 & 0xFF},
+ {0xc774 & 0xFF, 0xc774 & 0xFF},
+ {0xc775 & 0xFF, 0xc78f & 0xFF},
+ {0xc790 & 0xFF, 0xc790 & 0xFF},
+ {0xc791 & 0xFF, 0xc7ab & 0xFF},
+ {0xc7ac & 0xFF, 0xc7ac & 0xFF},
+ {0xc7ad & 0xFF, 0xc7c7 & 0xFF},
+ {0xc7c8 & 0xFF, 0xc7c8 & 0xFF},
+ {0xc7c9 & 0xFF, 0xc7e3 & 0xFF},
+ {0xc7e4 & 0xFF, 0xc7e4 & 0xFF},
+ {0xc7e5 & 0xFF, 0xc7ff & 0xFF},
+ {0xc800 & 0xFF, 0xc800 & 0xFF},
+ {0xc801 & 0xFF, 0xc81b & 0xFF},
+ {0xc81c & 0xFF, 0xc81c & 0xFF},
+ {0xc81d & 0xFF, 0xc837 & 0xFF},
+ {0xc838 & 0xFF, 0xc838 & 0xFF},
+ {0xc839 & 0xFF, 0xc853 & 0xFF},
+ {0xc854 & 0xFF, 0xc854 & 0xFF},
+ {0xc855 & 0xFF, 0xc86f & 0xFF},
+ {0xc870 & 0xFF, 0xc870 & 0xFF},
+ {0xc871 & 0xFF, 0xc88b & 0xFF},
+ {0xc88c & 0xFF, 0xc88c & 0xFF},
+ {0xc88d & 0xFF, 0xc8a7 & 0xFF},
+ {0xc8a8 & 0xFF, 0xc8a8 & 0xFF},
+ {0xc8a9 & 0xFF, 0xc8c3 & 0xFF},
+ {0xc8c4 & 0xFF, 0xc8c4 & 0xFF},
+ {0xc8c5 & 0xFF, 0xc8df & 0xFF},
+ {0xc8e0 & 0xFF, 0xc8e0 & 0xFF},
+ {0xc8e1 & 0xFF, 0xc8fb & 0xFF},
+ {0xc8fc & 0xFF, 0xc8fc & 0xFF},
+ {0xc8fd & 0xFF, 0xc8ff & 0xFF},
+ {0xc900 & 0xFF, 0xc917 & 0xFF},
+ {0xc918 & 0xFF, 0xc918 & 0xFF},
+ {0xc919 & 0xFF, 0xc933 & 0xFF},
+ {0xc934 & 0xFF, 0xc934 & 0xFF},
+ {0xc935 & 0xFF, 0xc94f & 0xFF},
+ {0xc950 & 0xFF, 0xc950 & 0xFF},
+ {0xc951 & 0xFF, 0xc96b & 0xFF},
+ {0xc96c & 0xFF, 0xc96c & 0xFF},
+ {0xc96d & 0xFF, 0xc987 & 0xFF},
+ {0xc988 & 0xFF, 0xc988 & 0xFF},
+ {0xc989 & 0xFF, 0xc9a3 & 0xFF},
+ {0xc9a4 & 0xFF, 0xc9a4 & 0xFF},
+ {0xc9a5 & 0xFF, 0xc9bf & 0xFF},
+ {0xc9c0 & 0xFF, 0xc9c0 & 0xFF},
+ {0xc9c1 & 0xFF, 0xc9db & 0xFF},
+ {0xc9dc & 0xFF, 0xc9dc & 0xFF},
+ {0xc9dd & 0xFF, 0xc9f7 & 0xFF},
+ {0xc9f8 & 0xFF, 0xc9f8 & 0xFF},
+ {0xc9f9 & 0xFF, 0xc9ff & 0xFF},
+ {0xca00 & 0xFF, 0xca13 & 0xFF},
+ {0xca14 & 0xFF, 0xca14 & 0xFF},
+ {0xca15 & 0xFF, 0xca2f & 0xFF},
+ {0xca30 & 0xFF, 0xca30 & 0xFF},
+ {0xca31 & 0xFF, 0xca4b & 0xFF},
+ {0xca4c & 0xFF, 0xca4c & 0xFF},
+ {0xca4d & 0xFF, 0xca67 & 0xFF},
+ {0xca68 & 0xFF, 0xca68 & 0xFF},
+ {0xca69 & 0xFF, 0xca83 & 0xFF},
+ {0xca84 & 0xFF, 0xca84 & 0xFF},
+ {0xca85 & 0xFF, 0xca9f & 0xFF},
+ {0xcaa0 & 0xFF, 0xcaa0 & 0xFF},
+ {0xcaa1 & 0xFF, 0xcabb & 0xFF},
+ {0xcabc & 0xFF, 0xcabc & 0xFF},
+ {0xcabd & 0xFF, 0xcad7 & 0xFF},
+ {0xcad8 & 0xFF, 0xcad8 & 0xFF},
+ {0xcad9 & 0xFF, 0xcaf3 & 0xFF},
+ {0xcaf4 & 0xFF, 0xcaf4 & 0xFF},
+ {0xcaf5 & 0xFF, 0xcaff & 0xFF},
+ {0xcb00 & 0xFF, 0xcb0f & 0xFF},
+ {0xcb10 & 0xFF, 0xcb10 & 0xFF},
+ {0xcb11 & 0xFF, 0xcb2b & 0xFF},
+ {0xcb2c & 0xFF, 0xcb2c & 0xFF},
+ {0xcb2d & 0xFF, 0xcb47 & 0xFF},
+ {0xcb48 & 0xFF, 0xcb48 & 0xFF},
+ {0xcb49 & 0xFF, 0xcb63 & 0xFF},
+ {0xcb64 & 0xFF, 0xcb64 & 0xFF},
+ {0xcb65 & 0xFF, 0xcb7f & 0xFF},
+ {0xcb80 & 0xFF, 0xcb80 & 0xFF},
+ {0xcb81 & 0xFF, 0xcb9b & 0xFF},
+ {0xcb9c & 0xFF, 0xcb9c & 0xFF},
+ {0xcb9d & 0xFF, 0xcbb7 & 0xFF},
+ {0xcbb8 & 0xFF, 0xcbb8 & 0xFF},
+ {0xcbb9 & 0xFF, 0xcbd3 & 0xFF},
+ {0xcbd4 & 0xFF, 0xcbd4 & 0xFF},
+ {0xcbd5 & 0xFF, 0xcbef & 0xFF},
+ {0xcbf0 & 0xFF, 0xcbf0 & 0xFF},
+ {0xcbf1 & 0xFF, 0xcbff & 0xFF},
+ {0xcc00 & 0xFF, 0xcc0b & 0xFF},
+ {0xcc0c & 0xFF, 0xcc0c & 0xFF},
+ {0xcc0d & 0xFF, 0xcc27 & 0xFF},
+ {0xcc28 & 0xFF, 0xcc28 & 0xFF},
+ {0xcc29 & 0xFF, 0xcc43 & 0xFF},
+ {0xcc44 & 0xFF, 0xcc44 & 0xFF},
+ {0xcc45 & 0xFF, 0xcc5f & 0xFF},
+ {0xcc60 & 0xFF, 0xcc60 & 0xFF},
+ {0xcc61 & 0xFF, 0xcc7b & 0xFF},
+ {0xcc7c & 0xFF, 0xcc7c & 0xFF},
+ {0xcc7d & 0xFF, 0xcc97 & 0xFF},
+ {0xcc98 & 0xFF, 0xcc98 & 0xFF},
+ {0xcc99 & 0xFF, 0xccb3 & 0xFF},
+ {0xccb4 & 0xFF, 0xccb4 & 0xFF},
+ {0xccb5 & 0xFF, 0xcccf & 0xFF},
+ {0xccd0 & 0xFF, 0xccd0 & 0xFF},
+ {0xccd1 & 0xFF, 0xcceb & 0xFF},
+ {0xccec & 0xFF, 0xccec & 0xFF},
+ {0xcced & 0xFF, 0xccff & 0xFF},
+ {0xcd00 & 0xFF, 0xcd07 & 0xFF},
+ {0xcd08 & 0xFF, 0xcd08 & 0xFF},
+ {0xcd09 & 0xFF, 0xcd23 & 0xFF},
+ {0xcd24 & 0xFF, 0xcd24 & 0xFF},
+ {0xcd25 & 0xFF, 0xcd3f & 0xFF},
+ {0xcd40 & 0xFF, 0xcd40 & 0xFF},
+ {0xcd41 & 0xFF, 0xcd5b & 0xFF},
+ {0xcd5c & 0xFF, 0xcd5c & 0xFF},
+ {0xcd5d & 0xFF, 0xcd77 & 0xFF},
+ {0xcd78 & 0xFF, 0xcd78 & 0xFF},
+ {0xcd79 & 0xFF, 0xcd93 & 0xFF},
+ {0xcd94 & 0xFF, 0xcd94 & 0xFF},
+ {0xcd95 & 0xFF, 0xcdaf & 0xFF},
+ {0xcdb0 & 0xFF, 0xcdb0 & 0xFF},
+ {0xcdb1 & 0xFF, 0xcdcb & 0xFF},
+ {0xcdcc & 0xFF, 0xcdcc & 0xFF},
+ {0xcdcd & 0xFF, 0xcde7 & 0xFF},
+ {0xcde8 & 0xFF, 0xcde8 & 0xFF},
+ {0xcde9 & 0xFF, 0xcdff & 0xFF},
+ {0xce00 & 0xFF, 0xce03 & 0xFF},
+ {0xce04 & 0xFF, 0xce04 & 0xFF},
+ {0xce05 & 0xFF, 0xce1f & 0xFF},
+ {0xce20 & 0xFF, 0xce20 & 0xFF},
+ {0xce21 & 0xFF, 0xce3b & 0xFF},
+ {0xce3c & 0xFF, 0xce3c & 0xFF},
+ {0xce3d & 0xFF, 0xce57 & 0xFF},
+ {0xce58 & 0xFF, 0xce58 & 0xFF},
+ {0xce59 & 0xFF, 0xce73 & 0xFF},
+ {0xce74 & 0xFF, 0xce74 & 0xFF},
+ {0xce75 & 0xFF, 0xce8f & 0xFF},
+ {0xce90 & 0xFF, 0xce90 & 0xFF},
+ {0xce91 & 0xFF, 0xceab & 0xFF},
+ {0xceac & 0xFF, 0xceac & 0xFF},
+ {0xcead & 0xFF, 0xcec7 & 0xFF},
+ {0xcec8 & 0xFF, 0xcec8 & 0xFF},
+ {0xcec9 & 0xFF, 0xcee3 & 0xFF},
+ {0xcee4 & 0xFF, 0xcee4 & 0xFF},
+ {0xcee5 & 0xFF, 0xceff & 0xFF},
+ {0xcf00 & 0xFF, 0xcf00 & 0xFF},
+ {0xcf01 & 0xFF, 0xcf1b & 0xFF},
+ {0xcf1c & 0xFF, 0xcf1c & 0xFF},
+ {0xcf1d & 0xFF, 0xcf37 & 0xFF},
+ {0xcf38 & 0xFF, 0xcf38 & 0xFF},
+ {0xcf39 & 0xFF, 0xcf53 & 0xFF},
+ {0xcf54 & 0xFF, 0xcf54 & 0xFF},
+ {0xcf55 & 0xFF, 0xcf6f & 0xFF},
+ {0xcf70 & 0xFF, 0xcf70 & 0xFF},
+ {0xcf71 & 0xFF, 0xcf8b & 0xFF},
+ {0xcf8c & 0xFF, 0xcf8c & 0xFF},
+ {0xcf8d & 0xFF, 0xcfa7 & 0xFF},
+ {0xcfa8 & 0xFF, 0xcfa8 & 0xFF},
+ {0xcfa9 & 0xFF, 0xcfc3 & 0xFF},
+ {0xcfc4 & 0xFF, 0xcfc4 & 0xFF},
+ {0xcfc5 & 0xFF, 0xcfdf & 0xFF},
+ {0xcfe0 & 0xFF, 0xcfe0 & 0xFF},
+ {0xcfe1 & 0xFF, 0xcffb & 0xFF},
+ {0xcffc & 0xFF, 0xcffc & 0xFF},
+ {0xcffd & 0xFF, 0xcfff & 0xFF},
+ {0xd000 & 0xFF, 0xd017 & 0xFF},
+ {0xd018 & 0xFF, 0xd018 & 0xFF},
+ {0xd019 & 0xFF, 0xd033 & 0xFF},
+ {0xd034 & 0xFF, 0xd034 & 0xFF},
+ {0xd035 & 0xFF, 0xd04f & 0xFF},
+ {0xd050 & 0xFF, 0xd050 & 0xFF},
+ {0xd051 & 0xFF, 0xd06b & 0xFF},
+ {0xd06c & 0xFF, 0xd06c & 0xFF},
+ {0xd06d & 0xFF, 0xd087 & 0xFF},
+ {0xd088 & 0xFF, 0xd088 & 0xFF},
+ {0xd089 & 0xFF, 0xd0a3 & 0xFF},
+ {0xd0a4 & 0xFF, 0xd0a4 & 0xFF},
+ {0xd0a5 & 0xFF, 0xd0bf & 0xFF},
+ {0xd0c0 & 0xFF, 0xd0c0 & 0xFF},
+ {0xd0c1 & 0xFF, 0xd0db & 0xFF},
+ {0xd0dc & 0xFF, 0xd0dc & 0xFF},
+ {0xd0dd & 0xFF, 0xd0f7 & 0xFF},
+ {0xd0f8 & 0xFF, 0xd0f8 & 0xFF},
+ {0xd0f9 & 0xFF, 0xd0ff & 0xFF},
+ {0xd100 & 0xFF, 0xd113 & 0xFF},
+ {0xd114 & 0xFF, 0xd114 & 0xFF},
+ {0xd115 & 0xFF, 0xd12f & 0xFF},
+ {0xd130 & 0xFF, 0xd130 & 0xFF},
+ {0xd131 & 0xFF, 0xd14b & 0xFF},
+ {0xd14c & 0xFF, 0xd14c & 0xFF},
+ {0xd14d & 0xFF, 0xd167 & 0xFF},
+ {0xd168 & 0xFF, 0xd168 & 0xFF},
+ {0xd169 & 0xFF, 0xd183 & 0xFF},
+ {0xd184 & 0xFF, 0xd184 & 0xFF},
+ {0xd185 & 0xFF, 0xd19f & 0xFF},
+ {0xd1a0 & 0xFF, 0xd1a0 & 0xFF},
+ {0xd1a1 & 0xFF, 0xd1bb & 0xFF},
+ {0xd1bc & 0xFF, 0xd1bc & 0xFF},
+ {0xd1bd & 0xFF, 0xd1d7 & 0xFF},
+ {0xd1d8 & 0xFF, 0xd1d8 & 0xFF},
+ {0xd1d9 & 0xFF, 0xd1f3 & 0xFF},
+ {0xd1f4 & 0xFF, 0xd1f4 & 0xFF},
+ {0xd1f5 & 0xFF, 0xd1ff & 0xFF},
+ {0xd200 & 0xFF, 0xd20f & 0xFF},
+ {0xd210 & 0xFF, 0xd210 & 0xFF},
+ {0xd211 & 0xFF, 0xd22b & 0xFF},
+ {0xd22c & 0xFF, 0xd22c & 0xFF},
+ {0xd22d & 0xFF, 0xd247 & 0xFF},
+ {0xd248 & 0xFF, 0xd248 & 0xFF},
+ {0xd249 & 0xFF, 0xd263 & 0xFF},
+ {0xd264 & 0xFF, 0xd264 & 0xFF},
+ {0xd265 & 0xFF, 0xd27f & 0xFF},
+ {0xd280 & 0xFF, 0xd280 & 0xFF},
+ {0xd281 & 0xFF, 0xd29b & 0xFF},
+ {0xd29c & 0xFF, 0xd29c & 0xFF},
+ {0xd29d & 0xFF, 0xd2b7 & 0xFF},
+ {0xd2b8 & 0xFF, 0xd2b8 & 0xFF},
+ {0xd2b9 & 0xFF, 0xd2d3 & 0xFF},
+ {0xd2d4 & 0xFF, 0xd2d4 & 0xFF},
+ {0xd2d5 & 0xFF, 0xd2ef & 0xFF},
+ {0xd2f0 & 0xFF, 0xd2f0 & 0xFF},
+ {0xd2f1 & 0xFF, 0xd2ff & 0xFF},
+ {0xd300 & 0xFF, 0xd30b & 0xFF},
+ {0xd30c & 0xFF, 0xd30c & 0xFF},
+ {0xd30d & 0xFF, 0xd327 & 0xFF},
+ {0xd328 & 0xFF, 0xd328 & 0xFF},
+ {0xd329 & 0xFF, 0xd343 & 0xFF},
+ {0xd344 & 0xFF, 0xd344 & 0xFF},
+ {0xd345 & 0xFF, 0xd35f & 0xFF},
+ {0xd360 & 0xFF, 0xd360 & 0xFF},
+ {0xd361 & 0xFF, 0xd37b & 0xFF},
+ {0xd37c & 0xFF, 0xd37c & 0xFF},
+ {0xd37d & 0xFF, 0xd397 & 0xFF},
+ {0xd398 & 0xFF, 0xd398 & 0xFF},
+ {0xd399 & 0xFF, 0xd3b3 & 0xFF},
+ {0xd3b4 & 0xFF, 0xd3b4 & 0xFF},
+ {0xd3b5 & 0xFF, 0xd3cf & 0xFF},
+ {0xd3d0 & 0xFF, 0xd3d0 & 0xFF},
+ {0xd3d1 & 0xFF, 0xd3eb & 0xFF},
+ {0xd3ec & 0xFF, 0xd3ec & 0xFF},
+ {0xd3ed & 0xFF, 0xd3ff & 0xFF},
+ {0xd400 & 0xFF, 0xd407 & 0xFF},
+ {0xd408 & 0xFF, 0xd408 & 0xFF},
+ {0xd409 & 0xFF, 0xd423 & 0xFF},
+ {0xd424 & 0xFF, 0xd424 & 0xFF},
+ {0xd425 & 0xFF, 0xd43f & 0xFF},
+ {0xd440 & 0xFF, 0xd440 & 0xFF},
+ {0xd441 & 0xFF, 0xd45b & 0xFF},
+ {0xd45c & 0xFF, 0xd45c & 0xFF},
+ {0xd45d & 0xFF, 0xd477 & 0xFF},
+ {0xd478 & 0xFF, 0xd478 & 0xFF},
+ {0xd479 & 0xFF, 0xd493 & 0xFF},
+ {0xd494 & 0xFF, 0xd494 & 0xFF},
+ {0xd495 & 0xFF, 0xd4af & 0xFF},
+ {0xd4b0 & 0xFF, 0xd4b0 & 0xFF},
+ {0xd4b1 & 0xFF, 0xd4cb & 0xFF},
+ {0xd4cc & 0xFF, 0xd4cc & 0xFF},
+ {0xd4cd & 0xFF, 0xd4e7 & 0xFF},
+ {0xd4e8 & 0xFF, 0xd4e8 & 0xFF},
+ {0xd4e9 & 0xFF, 0xd4ff & 0xFF},
+ {0xd500 & 0xFF, 0xd503 & 0xFF},
+ {0xd504 & 0xFF, 0xd504 & 0xFF},
+ {0xd505 & 0xFF, 0xd51f & 0xFF},
+ {0xd520 & 0xFF, 0xd520 & 0xFF},
+ {0xd521 & 0xFF, 0xd53b & 0xFF},
+ {0xd53c & 0xFF, 0xd53c & 0xFF},
+ {0xd53d & 0xFF, 0xd557 & 0xFF},
+ {0xd558 & 0xFF, 0xd558 & 0xFF},
+ {0xd559 & 0xFF, 0xd573 & 0xFF},
+ {0xd574 & 0xFF, 0xd574 & 0xFF},
+ {0xd575 & 0xFF, 0xd58f & 0xFF},
+ {0xd590 & 0xFF, 0xd590 & 0xFF},
+ {0xd591 & 0xFF, 0xd5ab & 0xFF},
+ {0xd5ac & 0xFF, 0xd5ac & 0xFF},
+ {0xd5ad & 0xFF, 0xd5c7 & 0xFF},
+ {0xd5c8 & 0xFF, 0xd5c8 & 0xFF},
+ {0xd5c9 & 0xFF, 0xd5e3 & 0xFF},
+ {0xd5e4 & 0xFF, 0xd5e4 & 0xFF},
+ {0xd5e5 & 0xFF, 0xd5ff & 0xFF},
+ {0xd600 & 0xFF, 0xd600 & 0xFF},
+ {0xd601 & 0xFF, 0xd61b & 0xFF},
+ {0xd61c & 0xFF, 0xd61c & 0xFF},
+ {0xd61d & 0xFF, 0xd637 & 0xFF},
+ {0xd638 & 0xFF, 0xd638 & 0xFF},
+ {0xd639 & 0xFF, 0xd653 & 0xFF},
+ {0xd654 & 0xFF, 0xd654 & 0xFF},
+ {0xd655 & 0xFF, 0xd66f & 0xFF},
+ {0xd670 & 0xFF, 0xd670 & 0xFF},
+ {0xd671 & 0xFF, 0xd68b & 0xFF},
+ {0xd68c & 0xFF, 0xd68c & 0xFF},
+ {0xd68d & 0xFF, 0xd6a7 & 0xFF},
+ {0xd6a8 & 0xFF, 0xd6a8 & 0xFF},
+ {0xd6a9 & 0xFF, 0xd6c3 & 0xFF},
+ {0xd6c4 & 0xFF, 0xd6c4 & 0xFF},
+ {0xd6c5 & 0xFF, 0xd6df & 0xFF},
+ {0xd6e0 & 0xFF, 0xd6e0 & 0xFF},
+ {0xd6e1 & 0xFF, 0xd6fb & 0xFF},
+ {0xd6fc & 0xFF, 0xd6fc & 0xFF},
+ {0xd6fd & 0xFF, 0xd6ff & 0xFF},
+ {0xd700 & 0xFF, 0xd717 & 0xFF},
+ {0xd718 & 0xFF, 0xd718 & 0xFF},
+ {0xd719 & 0xFF, 0xd733 & 0xFF},
+ {0xd734 & 0xFF, 0xd734 & 0xFF},
+ {0xd735 & 0xFF, 0xd74f & 0xFF},
+ {0xd750 & 0xFF, 0xd750 & 0xFF},
+ {0xd751 & 0xFF, 0xd76b & 0xFF},
+ {0xd76c & 0xFF, 0xd76c & 0xFF},
+ {0xd76d & 0xFF, 0xd787 & 0xFF},
+ {0xd788 & 0xFF, 0xd788 & 0xFF},
+ {0xd789 & 0xFF, 0xd7a3 & 0xFF},
+ {0xd7b0 & 0xFF, 0xd7c6 & 0xFF},
+ {0xd7cb & 0xFF, 0xd7fb & 0xFF},
+ {0xd800 & 0xFF, 0xd8ff & 0xFF},
+ {0xd900 & 0xFF, 0xd9ff & 0xFF},
+ {0xda00 & 0xFF, 0xdaff & 0xFF},
+ {0xdb00 & 0xFF, 0xdbff & 0xFF},
+ {0xdc00 & 0xFF, 0xdcff & 0xFF},
+ {0xdd00 & 0xFF, 0xddff & 0xFF},
+ {0xde00 & 0xFF, 0xdeff & 0xFF},
+ {0xdf00 & 0xFF, 0xdfff & 0xFF},
+ {0xf900 & 0xFF, 0xf9ff & 0xFF},
+ {0xfa00 & 0xFF, 0xfaff & 0xFF},
+ {0xfb00 & 0xFF, 0xfb06 & 0xFF},
+ {0xfb13 & 0xFF, 0xfb17 & 0xFF},
+ {0xfb1d & 0xFF, 0xfb1d & 0xFF},
+ {0xfb1e & 0xFF, 0xfb1e & 0xFF},
+ {0xfb1f & 0xFF, 0xfb36 & 0xFF},
+ {0xfb38 & 0xFF, 0xfb3c & 0xFF},
+ {0xfb3e & 0xFF, 0xfb3e & 0xFF},
+ {0xfb40 & 0xFF, 0xfb41 & 0xFF},
+ {0xfb43 & 0xFF, 0xfb44 & 0xFF},
+ {0xfb46 & 0xFF, 0xfbc1 & 0xFF},
+ {0xfbd3 & 0xFF, 0xfbff & 0xFF},
+ {0xfc00 & 0xFF, 0xfcff & 0xFF},
+ {0xfd00 & 0xFF, 0xfd3d & 0xFF},
+ {0xfd3e & 0xFF, 0xfd3e & 0xFF},
+ {0xfd3f & 0xFF, 0xfd3f & 0xFF},
+ {0xfd50 & 0xFF, 0xfd8f & 0xFF},
+ {0xfd92 & 0xFF, 0xfdc7 & 0xFF},
+ {0xfdf0 & 0xFF, 0xfdfb & 0xFF},
+ {0xfdfc & 0xFF, 0xfdfc & 0xFF},
+ {0xfdfd & 0xFF, 0xfdfd & 0xFF},
+ {0xfe00 & 0xFF, 0xfe0f & 0xFF},
+ {0xfe10 & 0xFF, 0xfe10 & 0xFF},
+ {0xfe11 & 0xFF, 0xfe12 & 0xFF},
+ {0xfe13 & 0xFF, 0xfe14 & 0xFF},
+ {0xfe15 & 0xFF, 0xfe16 & 0xFF},
+ {0xfe17 & 0xFF, 0xfe17 & 0xFF},
+ {0xfe18 & 0xFF, 0xfe18 & 0xFF},
+ {0xfe19 & 0xFF, 0xfe19 & 0xFF},
+ {0xfe20 & 0xFF, 0xfe26 & 0xFF},
+ {0xfe30 & 0xFF, 0xfe34 & 0xFF},
+ {0xfe35 & 0xFF, 0xfe35 & 0xFF},
+ {0xfe36 & 0xFF, 0xfe36 & 0xFF},
+ {0xfe37 & 0xFF, 0xfe37 & 0xFF},
+ {0xfe38 & 0xFF, 0xfe38 & 0xFF},
+ {0xfe39 & 0xFF, 0xfe39 & 0xFF},
+ {0xfe3a & 0xFF, 0xfe3a & 0xFF},
+ {0xfe3b & 0xFF, 0xfe3b & 0xFF},
+ {0xfe3c & 0xFF, 0xfe3c & 0xFF},
+ {0xfe3d & 0xFF, 0xfe3d & 0xFF},
+ {0xfe3e & 0xFF, 0xfe3e & 0xFF},
+ {0xfe3f & 0xFF, 0xfe3f & 0xFF},
+ {0xfe40 & 0xFF, 0xfe40 & 0xFF},
+ {0xfe41 & 0xFF, 0xfe41 & 0xFF},
+ {0xfe42 & 0xFF, 0xfe42 & 0xFF},
+ {0xfe43 & 0xFF, 0xfe43 & 0xFF},
+ {0xfe44 & 0xFF, 0xfe44 & 0xFF},
+ {0xfe45 & 0xFF, 0xfe46 & 0xFF},
+ {0xfe47 & 0xFF, 0xfe47 & 0xFF},
+ {0xfe48 & 0xFF, 0xfe48 & 0xFF},
+ {0xfe49 & 0xFF, 0xfe4f & 0xFF},
+ {0xfe50 & 0xFF, 0xfe50 & 0xFF},
+ {0xfe51 & 0xFF, 0xfe51 & 0xFF},
+ {0xfe52 & 0xFF, 0xfe52 & 0xFF},
+ {0xfe54 & 0xFF, 0xfe55 & 0xFF},
+ {0xfe56 & 0xFF, 0xfe57 & 0xFF},
+ {0xfe58 & 0xFF, 0xfe58 & 0xFF},
+ {0xfe59 & 0xFF, 0xfe59 & 0xFF},
+ {0xfe5a & 0xFF, 0xfe5a & 0xFF},
+ {0xfe5b & 0xFF, 0xfe5b & 0xFF},
+ {0xfe5c & 0xFF, 0xfe5c & 0xFF},
+ {0xfe5d & 0xFF, 0xfe5d & 0xFF},
+ {0xfe5e & 0xFF, 0xfe5e & 0xFF},
+ {0xfe5f & 0xFF, 0xfe66 & 0xFF},
+ {0xfe68 & 0xFF, 0xfe68 & 0xFF},
+ {0xfe69 & 0xFF, 0xfe69 & 0xFF},
+ {0xfe6a & 0xFF, 0xfe6a & 0xFF},
+ {0xfe6b & 0xFF, 0xfe6b & 0xFF},
+ {0xfe70 & 0xFF, 0xfe74 & 0xFF},
+ {0xfe76 & 0xFF, 0xfefc & 0xFF},
+ {0xfeff & 0xFF, 0xfeff & 0xFF},
+ {0xff01 & 0xFF, 0xff01 & 0xFF},
+ {0xff02 & 0xFF, 0xff03 & 0xFF},
+ {0xff04 & 0xFF, 0xff04 & 0xFF},
+ {0xff05 & 0xFF, 0xff05 & 0xFF},
+ {0xff06 & 0xFF, 0xff07 & 0xFF},
+ {0xff08 & 0xFF, 0xff08 & 0xFF},
+ {0xff09 & 0xFF, 0xff09 & 0xFF},
+ {0xff0a & 0xFF, 0xff0b & 0xFF},
+ {0xff0c & 0xFF, 0xff0c & 0xFF},
+ {0xff0d & 0xFF, 0xff0d & 0xFF},
+ {0xff0e & 0xFF, 0xff0e & 0xFF},
+ {0xff0f & 0xFF, 0xff19 & 0xFF},
+ {0xff1a & 0xFF, 0xff1b & 0xFF},
+ {0xff1c & 0xFF, 0xff1e & 0xFF},
+ {0xff1f & 0xFF, 0xff1f & 0xFF},
+ {0xff20 & 0xFF, 0xff3a & 0xFF},
+ {0xff3b & 0xFF, 0xff3b & 0xFF},
+ {0xff3c & 0xFF, 0xff3c & 0xFF},
+ {0xff3d & 0xFF, 0xff3d & 0xFF},
+ {0xff3e & 0xFF, 0xff5a & 0xFF},
+ {0xff5b & 0xFF, 0xff5b & 0xFF},
+ {0xff5c & 0xFF, 0xff5c & 0xFF},
+ {0xff5d & 0xFF, 0xff5d & 0xFF},
+ {0xff5e & 0xFF, 0xff5e & 0xFF},
+ {0xff5f & 0xFF, 0xff5f & 0xFF},
+ {0xff60 & 0xFF, 0xff61 & 0xFF},
+ {0xff62 & 0xFF, 0xff62 & 0xFF},
+ {0xff63 & 0xFF, 0xff64 & 0xFF},
+ {0xff65 & 0xFF, 0xff65 & 0xFF},
+ {0xff66 & 0xFF, 0xff66 & 0xFF},
+ {0xff67 & 0xFF, 0xff70 & 0xFF},
+ {0xff71 & 0xFF, 0xff9d & 0xFF},
+ {0xff9e & 0xFF, 0xff9f & 0xFF},
+ {0xffa0 & 0xFF, 0xffbe & 0xFF},
+ {0xffc2 & 0xFF, 0xffc7 & 0xFF},
+ {0xffca & 0xFF, 0xffcf & 0xFF},
+ {0xffd2 & 0xFF, 0xffd7 & 0xFF},
+ {0xffda & 0xFF, 0xffdc & 0xFF},
+ {0xffe0 & 0xFF, 0xffe0 & 0xFF},
+ {0xffe1 & 0xFF, 0xffe1 & 0xFF},
+ {0xffe2 & 0xFF, 0xffe4 & 0xFF},
+ {0xffe5 & 0xFF, 0xffe6 & 0xFF},
+ {0xffe8 & 0xFF, 0xffee & 0xFF},
+ {0xfff9 & 0xFF, 0xfffb & 0xFF},
+ {0xfffc & 0xFF, 0xfffc & 0xFF},
+ {0xfffd & 0xFF, 0xfffd & 0xFF},
+ {0x10000 & 0xFF, 0x1000b & 0xFF},
+ {0x1000d & 0xFF, 0x10026 & 0xFF},
+ {0x10028 & 0xFF, 0x1003a & 0xFF},
+ {0x1003c & 0xFF, 0x1003d & 0xFF},
+ {0x1003f & 0xFF, 0x1004d & 0xFF},
+ {0x10050 & 0xFF, 0x1005d & 0xFF},
+ {0x10080 & 0xFF, 0x100fa & 0xFF},
+ {0x10100 & 0xFF, 0x10102 & 0xFF},
+ {0x10107 & 0xFF, 0x10133 & 0xFF},
+ {0x10137 & 0xFF, 0x1018a & 0xFF},
+ {0x10190 & 0xFF, 0x1019b & 0xFF},
+ {0x101d0 & 0xFF, 0x101fc & 0xFF},
+ {0x101fd & 0xFF, 0x101fd & 0xFF},
+ {0x10280 & 0xFF, 0x1029c & 0xFF},
+ {0x102a0 & 0xFF, 0x102d0 & 0xFF},
+ {0x10300 & 0xFF, 0x1031e & 0xFF},
+ {0x10320 & 0xFF, 0x10323 & 0xFF},
+ {0x10330 & 0xFF, 0x1034a & 0xFF},
+ {0x10380 & 0xFF, 0x1039d & 0xFF},
+ {0x1039f & 0xFF, 0x1039f & 0xFF},
+ {0x103a0 & 0xFF, 0x103c3 & 0xFF},
+ {0x103c8 & 0xFF, 0x103cf & 0xFF},
+ {0x103d0 & 0xFF, 0x103d0 & 0xFF},
+ {0x103d1 & 0xFF, 0x103d5 & 0xFF},
+ {0x10400 & 0xFF, 0x1049d & 0xFF},
+ {0x104a0 & 0xFF, 0x104a9 & 0xFF},
+ {0x10800 & 0xFF, 0x10805 & 0xFF},
+ {0x10808 & 0xFF, 0x10808 & 0xFF},
+ {0x1080a & 0xFF, 0x10835 & 0xFF},
+ {0x10837 & 0xFF, 0x10838 & 0xFF},
+ {0x1083c & 0xFF, 0x1083c & 0xFF},
+ {0x1083f & 0xFF, 0x10855 & 0xFF},
+ {0x10857 & 0xFF, 0x10857 & 0xFF},
+ {0x10858 & 0xFF, 0x1085f & 0xFF},
+ {0x10900 & 0xFF, 0x1091b & 0xFF},
+ {0x1091f & 0xFF, 0x1091f & 0xFF},
+ {0x10920 & 0xFF, 0x10939 & 0xFF},
+ {0x1093f & 0xFF, 0x1093f & 0xFF},
+ {0x10a00 & 0xFF, 0x10a00 & 0xFF},
+ {0x10a01 & 0xFF, 0x10a03 & 0xFF},
+ {0x10a05 & 0xFF, 0x10a06 & 0xFF},
+ {0x10a0c & 0xFF, 0x10a0f & 0xFF},
+ {0x10a10 & 0xFF, 0x10a13 & 0xFF},
+ {0x10a15 & 0xFF, 0x10a17 & 0xFF},
+ {0x10a19 & 0xFF, 0x10a33 & 0xFF},
+ {0x10a38 & 0xFF, 0x10a3a & 0xFF},
+ {0x10a3f & 0xFF, 0x10a3f & 0xFF},
+ {0x10a40 & 0xFF, 0x10a47 & 0xFF},
+ {0x10a50 & 0xFF, 0x10a57 & 0xFF},
+ {0x10a58 & 0xFF, 0x10a58 & 0xFF},
+ {0x10a60 & 0xFF, 0x10a7f & 0xFF},
+ {0x10b00 & 0xFF, 0x10b35 & 0xFF},
+ {0x10b39 & 0xFF, 0x10b3f & 0xFF},
+ {0x10b40 & 0xFF, 0x10b55 & 0xFF},
+ {0x10b58 & 0xFF, 0x10b72 & 0xFF},
+ {0x10b78 & 0xFF, 0x10b7f & 0xFF},
+ {0x10c00 & 0xFF, 0x10c48 & 0xFF},
+ {0x10e60 & 0xFF, 0x10e7e & 0xFF},
+ {0x11000 & 0xFF, 0x11002 & 0xFF},
+ {0x11003 & 0xFF, 0x11037 & 0xFF},
+ {0x11038 & 0xFF, 0x11046 & 0xFF},
+ {0x11047 & 0xFF, 0x11048 & 0xFF},
+ {0x11049 & 0xFF, 0x1104d & 0xFF},
+ {0x11052 & 0xFF, 0x11065 & 0xFF},
+ {0x11066 & 0xFF, 0x1106f & 0xFF},
+ {0x11080 & 0xFF, 0x11082 & 0xFF},
+ {0x11083 & 0xFF, 0x110af & 0xFF},
+ {0x110b0 & 0xFF, 0x110ba & 0xFF},
+ {0x110bb & 0xFF, 0x110bd & 0xFF},
+ {0x110be & 0xFF, 0x110c1 & 0xFF},
+ {0x12000 & 0xFF, 0x120ff & 0xFF},
+ {0x12100 & 0xFF, 0x121ff & 0xFF},
+ {0x12200 & 0xFF, 0x122ff & 0xFF},
+ {0x12300 & 0xFF, 0x1236e & 0xFF},
+ {0x12400 & 0xFF, 0x12462 & 0xFF},
+ {0x12470 & 0xFF, 0x12473 & 0xFF},
+ {0x13000 & 0xFF, 0x130ff & 0xFF},
+ {0x13100 & 0xFF, 0x131ff & 0xFF},
+ {0x13200 & 0xFF, 0x13257 & 0xFF},
+ {0x13258 & 0xFF, 0x1325a & 0xFF},
+ {0x1325b & 0xFF, 0x1325d & 0xFF},
+ {0x1325e & 0xFF, 0x13281 & 0xFF},
+ {0x13282 & 0xFF, 0x13282 & 0xFF},
+ {0x13283 & 0xFF, 0x13285 & 0xFF},
+ {0x13286 & 0xFF, 0x13286 & 0xFF},
+ {0x13287 & 0xFF, 0x13287 & 0xFF},
+ {0x13288 & 0xFF, 0x13288 & 0xFF},
+ {0x13289 & 0xFF, 0x13289 & 0xFF},
+ {0x1328a & 0xFF, 0x132ff & 0xFF},
+ {0x13300 & 0xFF, 0x13378 & 0xFF},
+ {0x13379 & 0xFF, 0x13379 & 0xFF},
+ {0x1337a & 0xFF, 0x1337b & 0xFF},
+ {0x1337c & 0xFF, 0x133ff & 0xFF},
+ {0x13400 & 0xFF, 0x1342e & 0xFF},
+ {0x16800 & 0xFF, 0x168ff & 0xFF},
+ {0x16900 & 0xFF, 0x169ff & 0xFF},
+ {0x16a00 & 0xFF, 0x16a38 & 0xFF},
+ {0x1b000 & 0xFF, 0x1b001 & 0xFF},
+ {0x1d000 & 0xFF, 0x1d0f5 & 0xFF},
+ {0x1d100 & 0xFF, 0x1d126 & 0xFF},
+ {0x1d129 & 0xFF, 0x1d164 & 0xFF},
+ {0x1d165 & 0xFF, 0x1d169 & 0xFF},
+ {0x1d16a & 0xFF, 0x1d16c & 0xFF},
+ {0x1d16d & 0xFF, 0x1d182 & 0xFF},
+ {0x1d183 & 0xFF, 0x1d184 & 0xFF},
+ {0x1d185 & 0xFF, 0x1d18b & 0xFF},
+ {0x1d18c & 0xFF, 0x1d1a9 & 0xFF},
+ {0x1d1aa & 0xFF, 0x1d1ad & 0xFF},
+ {0x1d1ae & 0xFF, 0x1d1dd & 0xFF},
+ {0x1d200 & 0xFF, 0x1d241 & 0xFF},
+ {0x1d242 & 0xFF, 0x1d244 & 0xFF},
+ {0x1d245 & 0xFF, 0x1d245 & 0xFF},
+ {0x1d300 & 0xFF, 0x1d356 & 0xFF},
+ {0x1d360 & 0xFF, 0x1d371 & 0xFF},
+ {0x1d400 & 0xFF, 0x1d454 & 0xFF},
+ {0x1d456 & 0xFF, 0x1d49c & 0xFF},
+ {0x1d49e & 0xFF, 0x1d49f & 0xFF},
+ {0x1d4a2 & 0xFF, 0x1d4a2 & 0xFF},
+ {0x1d4a5 & 0xFF, 0x1d4a6 & 0xFF},
+ {0x1d4a9 & 0xFF, 0x1d4ac & 0xFF},
+ {0x1d4ae & 0xFF, 0x1d4b9 & 0xFF},
+ {0x1d4bb & 0xFF, 0x1d4bb & 0xFF},
+ {0x1d4bd & 0xFF, 0x1d4c3 & 0xFF},
+ {0x1d4c5 & 0xFF, 0x1d4ff & 0xFF},
+ {0x1d500 & 0xFF, 0x1d505 & 0xFF},
+ {0x1d507 & 0xFF, 0x1d50a & 0xFF},
+ {0x1d50d & 0xFF, 0x1d514 & 0xFF},
+ {0x1d516 & 0xFF, 0x1d51c & 0xFF},
+ {0x1d51e & 0xFF, 0x1d539 & 0xFF},
+ {0x1d53b & 0xFF, 0x1d53e & 0xFF},
+ {0x1d540 & 0xFF, 0x1d544 & 0xFF},
+ {0x1d546 & 0xFF, 0x1d546 & 0xFF},
+ {0x1d54a & 0xFF, 0x1d550 & 0xFF},
+ {0x1d552 & 0xFF, 0x1d5ff & 0xFF},
+ {0x1d600 & 0xFF, 0x1d6a5 & 0xFF},
+ {0x1d6a8 & 0xFF, 0x1d6ff & 0xFF},
+ {0x1d700 & 0xFF, 0x1d7cb & 0xFF},
+ {0x1d7ce & 0xFF, 0x1d7ff & 0xFF},
+ {0x1f000 & 0xFF, 0x1f02b & 0xFF},
+ {0x1f030 & 0xFF, 0x1f093 & 0xFF},
+ {0x1f0a0 & 0xFF, 0x1f0ae & 0xFF},
+ {0x1f0b1 & 0xFF, 0x1f0be & 0xFF},
+ {0x1f0c1 & 0xFF, 0x1f0cf & 0xFF},
+ {0x1f0d1 & 0xFF, 0x1f0df & 0xFF},
+ {0x1f100 & 0xFF, 0x1f10a & 0xFF},
+ {0x1f110 & 0xFF, 0x1f12e & 0xFF},
+ {0x1f130 & 0xFF, 0x1f169 & 0xFF},
+ {0x1f170 & 0xFF, 0x1f19a & 0xFF},
+ {0x1f1e6 & 0xFF, 0x1f1ff & 0xFF},
+ {0x1f200 & 0xFF, 0x1f202 & 0xFF},
+ {0x1f210 & 0xFF, 0x1f23a & 0xFF},
+ {0x1f240 & 0xFF, 0x1f248 & 0xFF},
+ {0x1f250 & 0xFF, 0x1f251 & 0xFF},
+ {0x1f300 & 0xFF, 0x1f320 & 0xFF},
+ {0x1f330 & 0xFF, 0x1f335 & 0xFF},
+ {0x1f337 & 0xFF, 0x1f37c & 0xFF},
+ {0x1f380 & 0xFF, 0x1f393 & 0xFF},
+ {0x1f3a0 & 0xFF, 0x1f3c4 & 0xFF},
+ {0x1f3c6 & 0xFF, 0x1f3ca & 0xFF},
+ {0x1f3e0 & 0xFF, 0x1f3f0 & 0xFF},
+ {0x1f400 & 0xFF, 0x1f43e & 0xFF},
+ {0x1f440 & 0xFF, 0x1f440 & 0xFF},
+ {0x1f442 & 0xFF, 0x1f4f7 & 0xFF},
+ {0x1f4f9 & 0xFF, 0x1f4fc & 0xFF},
+ {0x1f500 & 0xFF, 0x1f53d & 0xFF},
+ {0x1f550 & 0xFF, 0x1f567 & 0xFF},
+ {0x1f5fb & 0xFF, 0x1f5ff & 0xFF},
+ {0x1f601 & 0xFF, 0x1f610 & 0xFF},
+ {0x1f612 & 0xFF, 0x1f614 & 0xFF},
+ {0x1f616 & 0xFF, 0x1f616 & 0xFF},
+ {0x1f618 & 0xFF, 0x1f618 & 0xFF},
+ {0x1f61a & 0xFF, 0x1f61a & 0xFF},
+ {0x1f61c & 0xFF, 0x1f61e & 0xFF},
+ {0x1f620 & 0xFF, 0x1f625 & 0xFF},
+ {0x1f628 & 0xFF, 0x1f62b & 0xFF},
+ {0x1f62d & 0xFF, 0x1f62d & 0xFF},
+ {0x1f630 & 0xFF, 0x1f633 & 0xFF},
+ {0x1f635 & 0xFF, 0x1f640 & 0xFF},
+ {0x1f645 & 0xFF, 0x1f64f & 0xFF},
+ {0x1f680 & 0xFF, 0x1f6c5 & 0xFF},
+ {0x1f700 & 0xFF, 0x1f773 & 0xFF},
+ {0x20000 & 0xFF, 0x200ff & 0xFF},
+ {0x20100 & 0xFF, 0x201ff & 0xFF},
+ {0x20200 & 0xFF, 0x202ff & 0xFF},
+ {0x20300 & 0xFF, 0x203ff & 0xFF},
+ {0x20400 & 0xFF, 0x204ff & 0xFF},
+ {0x20500 & 0xFF, 0x205ff & 0xFF},
+ {0x20600 & 0xFF, 0x206ff & 0xFF},
+ {0x20700 & 0xFF, 0x207ff & 0xFF},
+ {0x20800 & 0xFF, 0x208ff & 0xFF},
+ {0x20900 & 0xFF, 0x209ff & 0xFF},
+ {0x20a00 & 0xFF, 0x20aff & 0xFF},
+ {0x20b00 & 0xFF, 0x20bff & 0xFF},
+ {0x20c00 & 0xFF, 0x20cff & 0xFF},
+ {0x20d00 & 0xFF, 0x20dff & 0xFF},
+ {0x20e00 & 0xFF, 0x20eff & 0xFF},
+ {0x20f00 & 0xFF, 0x20fff & 0xFF},
+ {0x21000 & 0xFF, 0x210ff & 0xFF},
+ {0x21100 & 0xFF, 0x211ff & 0xFF},
+ {0x21200 & 0xFF, 0x212ff & 0xFF},
+ {0x21300 & 0xFF, 0x213ff & 0xFF},
+ {0x21400 & 0xFF, 0x214ff & 0xFF},
+ {0x21500 & 0xFF, 0x215ff & 0xFF},
+ {0x21600 & 0xFF, 0x216ff & 0xFF},
+ {0x21700 & 0xFF, 0x217ff & 0xFF},
+ {0x21800 & 0xFF, 0x218ff & 0xFF},
+ {0x21900 & 0xFF, 0x219ff & 0xFF},
+ {0x21a00 & 0xFF, 0x21aff & 0xFF},
+ {0x21b00 & 0xFF, 0x21bff & 0xFF},
+ {0x21c00 & 0xFF, 0x21cff & 0xFF},
+ {0x21d00 & 0xFF, 0x21dff & 0xFF},
+ {0x21e00 & 0xFF, 0x21eff & 0xFF},
+ {0x21f00 & 0xFF, 0x21fff & 0xFF},
+ {0x22000 & 0xFF, 0x220ff & 0xFF},
+ {0x22100 & 0xFF, 0x221ff & 0xFF},
+ {0x22200 & 0xFF, 0x222ff & 0xFF},
+ {0x22300 & 0xFF, 0x223ff & 0xFF},
+ {0x22400 & 0xFF, 0x224ff & 0xFF},
+ {0x22500 & 0xFF, 0x225ff & 0xFF},
+ {0x22600 & 0xFF, 0x226ff & 0xFF},
+ {0x22700 & 0xFF, 0x227ff & 0xFF},
+ {0x22800 & 0xFF, 0x228ff & 0xFF},
+ {0x22900 & 0xFF, 0x229ff & 0xFF},
+ {0x22a00 & 0xFF, 0x22aff & 0xFF},
+ {0x22b00 & 0xFF, 0x22bff & 0xFF},
+ {0x22c00 & 0xFF, 0x22cff & 0xFF},
+ {0x22d00 & 0xFF, 0x22dff & 0xFF},
+ {0x22e00 & 0xFF, 0x22eff & 0xFF},
+ {0x22f00 & 0xFF, 0x22fff & 0xFF},
+ {0x23000 & 0xFF, 0x230ff & 0xFF},
+ {0x23100 & 0xFF, 0x231ff & 0xFF},
+ {0x23200 & 0xFF, 0x232ff & 0xFF},
+ {0x23300 & 0xFF, 0x233ff & 0xFF},
+ {0x23400 & 0xFF, 0x234ff & 0xFF},
+ {0x23500 & 0xFF, 0x235ff & 0xFF},
+ {0x23600 & 0xFF, 0x236ff & 0xFF},
+ {0x23700 & 0xFF, 0x237ff & 0xFF},
+ {0x23800 & 0xFF, 0x238ff & 0xFF},
+ {0x23900 & 0xFF, 0x239ff & 0xFF},
+ {0x23a00 & 0xFF, 0x23aff & 0xFF},
+ {0x23b00 & 0xFF, 0x23bff & 0xFF},
+ {0x23c00 & 0xFF, 0x23cff & 0xFF},
+ {0x23d00 & 0xFF, 0x23dff & 0xFF},
+ {0x23e00 & 0xFF, 0x23eff & 0xFF},
+ {0x23f00 & 0xFF, 0x23fff & 0xFF},
+ {0x24000 & 0xFF, 0x240ff & 0xFF},
+ {0x24100 & 0xFF, 0x241ff & 0xFF},
+ {0x24200 & 0xFF, 0x242ff & 0xFF},
+ {0x24300 & 0xFF, 0x243ff & 0xFF},
+ {0x24400 & 0xFF, 0x244ff & 0xFF},
+ {0x24500 & 0xFF, 0x245ff & 0xFF},
+ {0x24600 & 0xFF, 0x246ff & 0xFF},
+ {0x24700 & 0xFF, 0x247ff & 0xFF},
+ {0x24800 & 0xFF, 0x248ff & 0xFF},
+ {0x24900 & 0xFF, 0x249ff & 0xFF},
+ {0x24a00 & 0xFF, 0x24aff & 0xFF},
+ {0x24b00 & 0xFF, 0x24bff & 0xFF},
+ {0x24c00 & 0xFF, 0x24cff & 0xFF},
+ {0x24d00 & 0xFF, 0x24dff & 0xFF},
+ {0x24e00 & 0xFF, 0x24eff & 0xFF},
+ {0x24f00 & 0xFF, 0x24fff & 0xFF},
+ {0x25000 & 0xFF, 0x250ff & 0xFF},
+ {0x25100 & 0xFF, 0x251ff & 0xFF},
+ {0x25200 & 0xFF, 0x252ff & 0xFF},
+ {0x25300 & 0xFF, 0x253ff & 0xFF},
+ {0x25400 & 0xFF, 0x254ff & 0xFF},
+ {0x25500 & 0xFF, 0x255ff & 0xFF},
+ {0x25600 & 0xFF, 0x256ff & 0xFF},
+ {0x25700 & 0xFF, 0x257ff & 0xFF},
+ {0x25800 & 0xFF, 0x258ff & 0xFF},
+ {0x25900 & 0xFF, 0x259ff & 0xFF},
+ {0x25a00 & 0xFF, 0x25aff & 0xFF},
+ {0x25b00 & 0xFF, 0x25bff & 0xFF},
+ {0x25c00 & 0xFF, 0x25cff & 0xFF},
+ {0x25d00 & 0xFF, 0x25dff & 0xFF},
+ {0x25e00 & 0xFF, 0x25eff & 0xFF},
+ {0x25f00 & 0xFF, 0x25fff & 0xFF},
+ {0x26000 & 0xFF, 0x260ff & 0xFF},
+ {0x26100 & 0xFF, 0x261ff & 0xFF},
+ {0x26200 & 0xFF, 0x262ff & 0xFF},
+ {0x26300 & 0xFF, 0x263ff & 0xFF},
+ {0x26400 & 0xFF, 0x264ff & 0xFF},
+ {0x26500 & 0xFF, 0x265ff & 0xFF},
+ {0x26600 & 0xFF, 0x266ff & 0xFF},
+ {0x26700 & 0xFF, 0x267ff & 0xFF},
+ {0x26800 & 0xFF, 0x268ff & 0xFF},
+ {0x26900 & 0xFF, 0x269ff & 0xFF},
+ {0x26a00 & 0xFF, 0x26aff & 0xFF},
+ {0x26b00 & 0xFF, 0x26bff & 0xFF},
+ {0x26c00 & 0xFF, 0x26cff & 0xFF},
+ {0x26d00 & 0xFF, 0x26dff & 0xFF},
+ {0x26e00 & 0xFF, 0x26eff & 0xFF},
+ {0x26f00 & 0xFF, 0x26fff & 0xFF},
+ {0x27000 & 0xFF, 0x270ff & 0xFF},
+ {0x27100 & 0xFF, 0x271ff & 0xFF},
+ {0x27200 & 0xFF, 0x272ff & 0xFF},
+ {0x27300 & 0xFF, 0x273ff & 0xFF},
+ {0x27400 & 0xFF, 0x274ff & 0xFF},
+ {0x27500 & 0xFF, 0x275ff & 0xFF},
+ {0x27600 & 0xFF, 0x276ff & 0xFF},
+ {0x27700 & 0xFF, 0x277ff & 0xFF},
+ {0x27800 & 0xFF, 0x278ff & 0xFF},
+ {0x27900 & 0xFF, 0x279ff & 0xFF},
+ {0x27a00 & 0xFF, 0x27aff & 0xFF},
+ {0x27b00 & 0xFF, 0x27bff & 0xFF},
+ {0x27c00 & 0xFF, 0x27cff & 0xFF},
+ {0x27d00 & 0xFF, 0x27dff & 0xFF},
+ {0x27e00 & 0xFF, 0x27eff & 0xFF},
+ {0x27f00 & 0xFF, 0x27fff & 0xFF},
+ {0x28000 & 0xFF, 0x280ff & 0xFF},
+ {0x28100 & 0xFF, 0x281ff & 0xFF},
+ {0x28200 & 0xFF, 0x282ff & 0xFF},
+ {0x28300 & 0xFF, 0x283ff & 0xFF},
+ {0x28400 & 0xFF, 0x284ff & 0xFF},
+ {0x28500 & 0xFF, 0x285ff & 0xFF},
+ {0x28600 & 0xFF, 0x286ff & 0xFF},
+ {0x28700 & 0xFF, 0x287ff & 0xFF},
+ {0x28800 & 0xFF, 0x288ff & 0xFF},
+ {0x28900 & 0xFF, 0x289ff & 0xFF},
+ {0x28a00 & 0xFF, 0x28aff & 0xFF},
+ {0x28b00 & 0xFF, 0x28bff & 0xFF},
+ {0x28c00 & 0xFF, 0x28cff & 0xFF},
+ {0x28d00 & 0xFF, 0x28dff & 0xFF},
+ {0x28e00 & 0xFF, 0x28eff & 0xFF},
+ {0x28f00 & 0xFF, 0x28fff & 0xFF},
+ {0x29000 & 0xFF, 0x290ff & 0xFF},
+ {0x29100 & 0xFF, 0x291ff & 0xFF},
+ {0x29200 & 0xFF, 0x292ff & 0xFF},
+ {0x29300 & 0xFF, 0x293ff & 0xFF},
+ {0x29400 & 0xFF, 0x294ff & 0xFF},
+ {0x29500 & 0xFF, 0x295ff & 0xFF},
+ {0x29600 & 0xFF, 0x296ff & 0xFF},
+ {0x29700 & 0xFF, 0x297ff & 0xFF},
+ {0x29800 & 0xFF, 0x298ff & 0xFF},
+ {0x29900 & 0xFF, 0x299ff & 0xFF},
+ {0x29a00 & 0xFF, 0x29aff & 0xFF},
+ {0x29b00 & 0xFF, 0x29bff & 0xFF},
+ {0x29c00 & 0xFF, 0x29cff & 0xFF},
+ {0x29d00 & 0xFF, 0x29dff & 0xFF},
+ {0x29e00 & 0xFF, 0x29eff & 0xFF},
+ {0x29f00 & 0xFF, 0x29fff & 0xFF},
+ {0x2a000 & 0xFF, 0x2a0ff & 0xFF},
+ {0x2a100 & 0xFF, 0x2a1ff & 0xFF},
+ {0x2a200 & 0xFF, 0x2a2ff & 0xFF},
+ {0x2a300 & 0xFF, 0x2a3ff & 0xFF},
+ {0x2a400 & 0xFF, 0x2a4ff & 0xFF},
+ {0x2a500 & 0xFF, 0x2a5ff & 0xFF},
+ {0x2a600 & 0xFF, 0x2a6ff & 0xFF},
+ {0x2a700 & 0xFF, 0x2a7ff & 0xFF},
+ {0x2a800 & 0xFF, 0x2a8ff & 0xFF},
+ {0x2a900 & 0xFF, 0x2a9ff & 0xFF},
+ {0x2aa00 & 0xFF, 0x2aaff & 0xFF},
+ {0x2ab00 & 0xFF, 0x2abff & 0xFF},
+ {0x2ac00 & 0xFF, 0x2acff & 0xFF},
+ {0x2ad00 & 0xFF, 0x2adff & 0xFF},
+ {0x2ae00 & 0xFF, 0x2aeff & 0xFF},
+ {0x2af00 & 0xFF, 0x2afff & 0xFF},
+ {0x2b000 & 0xFF, 0x2b0ff & 0xFF},
+ {0x2b100 & 0xFF, 0x2b1ff & 0xFF},
+ {0x2b200 & 0xFF, 0x2b2ff & 0xFF},
+ {0x2b300 & 0xFF, 0x2b3ff & 0xFF},
+ {0x2b400 & 0xFF, 0x2b4ff & 0xFF},
+ {0x2b500 & 0xFF, 0x2b5ff & 0xFF},
+ {0x2b600 & 0xFF, 0x2b6ff & 0xFF},
+ {0x2b700 & 0xFF, 0x2b7ff & 0xFF},
+ {0x2b800 & 0xFF, 0x2b8ff & 0xFF},
+ {0x2b900 & 0xFF, 0x2b9ff & 0xFF},
+ {0x2ba00 & 0xFF, 0x2baff & 0xFF},
+ {0x2bb00 & 0xFF, 0x2bbff & 0xFF},
+ {0x2bc00 & 0xFF, 0x2bcff & 0xFF},
+ {0x2bd00 & 0xFF, 0x2bdff & 0xFF},
+ {0x2be00 & 0xFF, 0x2beff & 0xFF},
+ {0x2bf00 & 0xFF, 0x2bfff & 0xFF},
+ {0x2c000 & 0xFF, 0x2c0ff & 0xFF},
+ {0x2c100 & 0xFF, 0x2c1ff & 0xFF},
+ {0x2c200 & 0xFF, 0x2c2ff & 0xFF},
+ {0x2c300 & 0xFF, 0x2c3ff & 0xFF},
+ {0x2c400 & 0xFF, 0x2c4ff & 0xFF},
+ {0x2c500 & 0xFF, 0x2c5ff & 0xFF},
+ {0x2c600 & 0xFF, 0x2c6ff & 0xFF},
+ {0x2c700 & 0xFF, 0x2c7ff & 0xFF},
+ {0x2c800 & 0xFF, 0x2c8ff & 0xFF},
+ {0x2c900 & 0xFF, 0x2c9ff & 0xFF},
+ {0x2ca00 & 0xFF, 0x2caff & 0xFF},
+ {0x2cb00 & 0xFF, 0x2cbff & 0xFF},
+ {0x2cc00 & 0xFF, 0x2ccff & 0xFF},
+ {0x2cd00 & 0xFF, 0x2cdff & 0xFF},
+ {0x2ce00 & 0xFF, 0x2ceff & 0xFF},
+ {0x2cf00 & 0xFF, 0x2cfff & 0xFF},
+ {0x2d000 & 0xFF, 0x2d0ff & 0xFF},
+ {0x2d100 & 0xFF, 0x2d1ff & 0xFF},
+ {0x2d200 & 0xFF, 0x2d2ff & 0xFF},
+ {0x2d300 & 0xFF, 0x2d3ff & 0xFF},
+ {0x2d400 & 0xFF, 0x2d4ff & 0xFF},
+ {0x2d500 & 0xFF, 0x2d5ff & 0xFF},
+ {0x2d600 & 0xFF, 0x2d6ff & 0xFF},
+ {0x2d700 & 0xFF, 0x2d7ff & 0xFF},
+ {0x2d800 & 0xFF, 0x2d8ff & 0xFF},
+ {0x2d900 & 0xFF, 0x2d9ff & 0xFF},
+ {0x2da00 & 0xFF, 0x2daff & 0xFF},
+ {0x2db00 & 0xFF, 0x2dbff & 0xFF},
+ {0x2dc00 & 0xFF, 0x2dcff & 0xFF},
+ {0x2dd00 & 0xFF, 0x2ddff & 0xFF},
+ {0x2de00 & 0xFF, 0x2deff & 0xFF},
+ {0x2df00 & 0xFF, 0x2dfff & 0xFF},
+ {0x2e000 & 0xFF, 0x2e0ff & 0xFF},
+ {0x2e100 & 0xFF, 0x2e1ff & 0xFF},
+ {0x2e200 & 0xFF, 0x2e2ff & 0xFF},
+ {0x2e300 & 0xFF, 0x2e3ff & 0xFF},
+ {0x2e400 & 0xFF, 0x2e4ff & 0xFF},
+ {0x2e500 & 0xFF, 0x2e5ff & 0xFF},
+ {0x2e600 & 0xFF, 0x2e6ff & 0xFF},
+ {0x2e700 & 0xFF, 0x2e7ff & 0xFF},
+ {0x2e800 & 0xFF, 0x2e8ff & 0xFF},
+ {0x2e900 & 0xFF, 0x2e9ff & 0xFF},
+ {0x2ea00 & 0xFF, 0x2eaff & 0xFF},
+ {0x2eb00 & 0xFF, 0x2ebff & 0xFF},
+ {0x2ec00 & 0xFF, 0x2ecff & 0xFF},
+ {0x2ed00 & 0xFF, 0x2edff & 0xFF},
+ {0x2ee00 & 0xFF, 0x2eeff & 0xFF},
+ {0x2ef00 & 0xFF, 0x2efff & 0xFF},
+ {0x2f000 & 0xFF, 0x2f0ff & 0xFF},
+ {0x2f100 & 0xFF, 0x2f1ff & 0xFF},
+ {0x2f200 & 0xFF, 0x2f2ff & 0xFF},
+ {0x2f300 & 0xFF, 0x2f3ff & 0xFF},
+ {0x2f400 & 0xFF, 0x2f4ff & 0xFF},
+ {0x2f500 & 0xFF, 0x2f5ff & 0xFF},
+ {0x2f600 & 0xFF, 0x2f6ff & 0xFF},
+ {0x2f700 & 0xFF, 0x2f7ff & 0xFF},
+ {0x2f800 & 0xFF, 0x2f8ff & 0xFF},
+ {0x2f900 & 0xFF, 0x2f9ff & 0xFF},
+ {0x2fa00 & 0xFF, 0x2faff & 0xFF},
+ {0x2fb00 & 0xFF, 0x2fbff & 0xFF},
+ {0x2fc00 & 0xFF, 0x2fcff & 0xFF},
+ {0x2fd00 & 0xFF, 0x2fdff & 0xFF},
+ {0x2fe00 & 0xFF, 0x2feff & 0xFF},
+ {0x2ff00 & 0xFF, 0x2fffd & 0xFF},
+ {0x30000 & 0xFF, 0x300ff & 0xFF},
+ {0x30100 & 0xFF, 0x301ff & 0xFF},
+ {0x30200 & 0xFF, 0x302ff & 0xFF},
+ {0x30300 & 0xFF, 0x303ff & 0xFF},
+ {0x30400 & 0xFF, 0x304ff & 0xFF},
+ {0x30500 & 0xFF, 0x305ff & 0xFF},
+ {0x30600 & 0xFF, 0x306ff & 0xFF},
+ {0x30700 & 0xFF, 0x307ff & 0xFF},
+ {0x30800 & 0xFF, 0x308ff & 0xFF},
+ {0x30900 & 0xFF, 0x309ff & 0xFF},
+ {0x30a00 & 0xFF, 0x30aff & 0xFF},
+ {0x30b00 & 0xFF, 0x30bff & 0xFF},
+ {0x30c00 & 0xFF, 0x30cff & 0xFF},
+ {0x30d00 & 0xFF, 0x30dff & 0xFF},
+ {0x30e00 & 0xFF, 0x30eff & 0xFF},
+ {0x30f00 & 0xFF, 0x30fff & 0xFF},
+ {0x31000 & 0xFF, 0x310ff & 0xFF},
+ {0x31100 & 0xFF, 0x311ff & 0xFF},
+ {0x31200 & 0xFF, 0x312ff & 0xFF},
+ {0x31300 & 0xFF, 0x313ff & 0xFF},
+ {0x31400 & 0xFF, 0x314ff & 0xFF},
+ {0x31500 & 0xFF, 0x315ff & 0xFF},
+ {0x31600 & 0xFF, 0x316ff & 0xFF},
+ {0x31700 & 0xFF, 0x317ff & 0xFF},
+ {0x31800 & 0xFF, 0x318ff & 0xFF},
+ {0x31900 & 0xFF, 0x319ff & 0xFF},
+ {0x31a00 & 0xFF, 0x31aff & 0xFF},
+ {0x31b00 & 0xFF, 0x31bff & 0xFF},
+ {0x31c00 & 0xFF, 0x31cff & 0xFF},
+ {0x31d00 & 0xFF, 0x31dff & 0xFF},
+ {0x31e00 & 0xFF, 0x31eff & 0xFF},
+ {0x31f00 & 0xFF, 0x31fff & 0xFF},
+ {0x32000 & 0xFF, 0x320ff & 0xFF},
+ {0x32100 & 0xFF, 0x321ff & 0xFF},
+ {0x32200 & 0xFF, 0x322ff & 0xFF},
+ {0x32300 & 0xFF, 0x323ff & 0xFF},
+ {0x32400 & 0xFF, 0x324ff & 0xFF},
+ {0x32500 & 0xFF, 0x325ff & 0xFF},
+ {0x32600 & 0xFF, 0x326ff & 0xFF},
+ {0x32700 & 0xFF, 0x327ff & 0xFF},
+ {0x32800 & 0xFF, 0x328ff & 0xFF},
+ {0x32900 & 0xFF, 0x329ff & 0xFF},
+ {0x32a00 & 0xFF, 0x32aff & 0xFF},
+ {0x32b00 & 0xFF, 0x32bff & 0xFF},
+ {0x32c00 & 0xFF, 0x32cff & 0xFF},
+ {0x32d00 & 0xFF, 0x32dff & 0xFF},
+ {0x32e00 & 0xFF, 0x32eff & 0xFF},
+ {0x32f00 & 0xFF, 0x32fff & 0xFF},
+ {0x33000 & 0xFF, 0x330ff & 0xFF},
+ {0x33100 & 0xFF, 0x331ff & 0xFF},
+ {0x33200 & 0xFF, 0x332ff & 0xFF},
+ {0x33300 & 0xFF, 0x333ff & 0xFF},
+ {0x33400 & 0xFF, 0x334ff & 0xFF},
+ {0x33500 & 0xFF, 0x335ff & 0xFF},
+ {0x33600 & 0xFF, 0x336ff & 0xFF},
+ {0x33700 & 0xFF, 0x337ff & 0xFF},
+ {0x33800 & 0xFF, 0x338ff & 0xFF},
+ {0x33900 & 0xFF, 0x339ff & 0xFF},
+ {0x33a00 & 0xFF, 0x33aff & 0xFF},
+ {0x33b00 & 0xFF, 0x33bff & 0xFF},
+ {0x33c00 & 0xFF, 0x33cff & 0xFF},
+ {0x33d00 & 0xFF, 0x33dff & 0xFF},
+ {0x33e00 & 0xFF, 0x33eff & 0xFF},
+ {0x33f00 & 0xFF, 0x33fff & 0xFF},
+ {0x34000 & 0xFF, 0x340ff & 0xFF},
+ {0x34100 & 0xFF, 0x341ff & 0xFF},
+ {0x34200 & 0xFF, 0x342ff & 0xFF},
+ {0x34300 & 0xFF, 0x343ff & 0xFF},
+ {0x34400 & 0xFF, 0x344ff & 0xFF},
+ {0x34500 & 0xFF, 0x345ff & 0xFF},
+ {0x34600 & 0xFF, 0x346ff & 0xFF},
+ {0x34700 & 0xFF, 0x347ff & 0xFF},
+ {0x34800 & 0xFF, 0x348ff & 0xFF},
+ {0x34900 & 0xFF, 0x349ff & 0xFF},
+ {0x34a00 & 0xFF, 0x34aff & 0xFF},
+ {0x34b00 & 0xFF, 0x34bff & 0xFF},
+ {0x34c00 & 0xFF, 0x34cff & 0xFF},
+ {0x34d00 & 0xFF, 0x34dff & 0xFF},
+ {0x34e00 & 0xFF, 0x34eff & 0xFF},
+ {0x34f00 & 0xFF, 0x34fff & 0xFF},
+ {0x35000 & 0xFF, 0x350ff & 0xFF},
+ {0x35100 & 0xFF, 0x351ff & 0xFF},
+ {0x35200 & 0xFF, 0x352ff & 0xFF},
+ {0x35300 & 0xFF, 0x353ff & 0xFF},
+ {0x35400 & 0xFF, 0x354ff & 0xFF},
+ {0x35500 & 0xFF, 0x355ff & 0xFF},
+ {0x35600 & 0xFF, 0x356ff & 0xFF},
+ {0x35700 & 0xFF, 0x357ff & 0xFF},
+ {0x35800 & 0xFF, 0x358ff & 0xFF},
+ {0x35900 & 0xFF, 0x359ff & 0xFF},
+ {0x35a00 & 0xFF, 0x35aff & 0xFF},
+ {0x35b00 & 0xFF, 0x35bff & 0xFF},
+ {0x35c00 & 0xFF, 0x35cff & 0xFF},
+ {0x35d00 & 0xFF, 0x35dff & 0xFF},
+ {0x35e00 & 0xFF, 0x35eff & 0xFF},
+ {0x35f00 & 0xFF, 0x35fff & 0xFF},
+ {0x36000 & 0xFF, 0x360ff & 0xFF},
+ {0x36100 & 0xFF, 0x361ff & 0xFF},
+ {0x36200 & 0xFF, 0x362ff & 0xFF},
+ {0x36300 & 0xFF, 0x363ff & 0xFF},
+ {0x36400 & 0xFF, 0x364ff & 0xFF},
+ {0x36500 & 0xFF, 0x365ff & 0xFF},
+ {0x36600 & 0xFF, 0x366ff & 0xFF},
+ {0x36700 & 0xFF, 0x367ff & 0xFF},
+ {0x36800 & 0xFF, 0x368ff & 0xFF},
+ {0x36900 & 0xFF, 0x369ff & 0xFF},
+ {0x36a00 & 0xFF, 0x36aff & 0xFF},
+ {0x36b00 & 0xFF, 0x36bff & 0xFF},
+ {0x36c00 & 0xFF, 0x36cff & 0xFF},
+ {0x36d00 & 0xFF, 0x36dff & 0xFF},
+ {0x36e00 & 0xFF, 0x36eff & 0xFF},
+ {0x36f00 & 0xFF, 0x36fff & 0xFF},
+ {0x37000 & 0xFF, 0x370ff & 0xFF},
+ {0x37100 & 0xFF, 0x371ff & 0xFF},
+ {0x37200 & 0xFF, 0x372ff & 0xFF},
+ {0x37300 & 0xFF, 0x373ff & 0xFF},
+ {0x37400 & 0xFF, 0x374ff & 0xFF},
+ {0x37500 & 0xFF, 0x375ff & 0xFF},
+ {0x37600 & 0xFF, 0x376ff & 0xFF},
+ {0x37700 & 0xFF, 0x377ff & 0xFF},
+ {0x37800 & 0xFF, 0x378ff & 0xFF},
+ {0x37900 & 0xFF, 0x379ff & 0xFF},
+ {0x37a00 & 0xFF, 0x37aff & 0xFF},
+ {0x37b00 & 0xFF, 0x37bff & 0xFF},
+ {0x37c00 & 0xFF, 0x37cff & 0xFF},
+ {0x37d00 & 0xFF, 0x37dff & 0xFF},
+ {0x37e00 & 0xFF, 0x37eff & 0xFF},
+ {0x37f00 & 0xFF, 0x37fff & 0xFF},
+ {0x38000 & 0xFF, 0x380ff & 0xFF},
+ {0x38100 & 0xFF, 0x381ff & 0xFF},
+ {0x38200 & 0xFF, 0x382ff & 0xFF},
+ {0x38300 & 0xFF, 0x383ff & 0xFF},
+ {0x38400 & 0xFF, 0x384ff & 0xFF},
+ {0x38500 & 0xFF, 0x385ff & 0xFF},
+ {0x38600 & 0xFF, 0x386ff & 0xFF},
+ {0x38700 & 0xFF, 0x387ff & 0xFF},
+ {0x38800 & 0xFF, 0x388ff & 0xFF},
+ {0x38900 & 0xFF, 0x389ff & 0xFF},
+ {0x38a00 & 0xFF, 0x38aff & 0xFF},
+ {0x38b00 & 0xFF, 0x38bff & 0xFF},
+ {0x38c00 & 0xFF, 0x38cff & 0xFF},
+ {0x38d00 & 0xFF, 0x38dff & 0xFF},
+ {0x38e00 & 0xFF, 0x38eff & 0xFF},
+ {0x38f00 & 0xFF, 0x38fff & 0xFF},
+ {0x39000 & 0xFF, 0x390ff & 0xFF},
+ {0x39100 & 0xFF, 0x391ff & 0xFF},
+ {0x39200 & 0xFF, 0x392ff & 0xFF},
+ {0x39300 & 0xFF, 0x393ff & 0xFF},
+ {0x39400 & 0xFF, 0x394ff & 0xFF},
+ {0x39500 & 0xFF, 0x395ff & 0xFF},
+ {0x39600 & 0xFF, 0x396ff & 0xFF},
+ {0x39700 & 0xFF, 0x397ff & 0xFF},
+ {0x39800 & 0xFF, 0x398ff & 0xFF},
+ {0x39900 & 0xFF, 0x399ff & 0xFF},
+ {0x39a00 & 0xFF, 0x39aff & 0xFF},
+ {0x39b00 & 0xFF, 0x39bff & 0xFF},
+ {0x39c00 & 0xFF, 0x39cff & 0xFF},
+ {0x39d00 & 0xFF, 0x39dff & 0xFF},
+ {0x39e00 & 0xFF, 0x39eff & 0xFF},
+ {0x39f00 & 0xFF, 0x39fff & 0xFF},
+ {0x3a000 & 0xFF, 0x3a0ff & 0xFF},
+ {0x3a100 & 0xFF, 0x3a1ff & 0xFF},
+ {0x3a200 & 0xFF, 0x3a2ff & 0xFF},
+ {0x3a300 & 0xFF, 0x3a3ff & 0xFF},
+ {0x3a400 & 0xFF, 0x3a4ff & 0xFF},
+ {0x3a500 & 0xFF, 0x3a5ff & 0xFF},
+ {0x3a600 & 0xFF, 0x3a6ff & 0xFF},
+ {0x3a700 & 0xFF, 0x3a7ff & 0xFF},
+ {0x3a800 & 0xFF, 0x3a8ff & 0xFF},
+ {0x3a900 & 0xFF, 0x3a9ff & 0xFF},
+ {0x3aa00 & 0xFF, 0x3aaff & 0xFF},
+ {0x3ab00 & 0xFF, 0x3abff & 0xFF},
+ {0x3ac00 & 0xFF, 0x3acff & 0xFF},
+ {0x3ad00 & 0xFF, 0x3adff & 0xFF},
+ {0x3ae00 & 0xFF, 0x3aeff & 0xFF},
+ {0x3af00 & 0xFF, 0x3afff & 0xFF},
+ {0x3b000 & 0xFF, 0x3b0ff & 0xFF},
+ {0x3b100 & 0xFF, 0x3b1ff & 0xFF},
+ {0x3b200 & 0xFF, 0x3b2ff & 0xFF},
+ {0x3b300 & 0xFF, 0x3b3ff & 0xFF},
+ {0x3b400 & 0xFF, 0x3b4ff & 0xFF},
+ {0x3b500 & 0xFF, 0x3b5ff & 0xFF},
+ {0x3b600 & 0xFF, 0x3b6ff & 0xFF},
+ {0x3b700 & 0xFF, 0x3b7ff & 0xFF},
+ {0x3b800 & 0xFF, 0x3b8ff & 0xFF},
+ {0x3b900 & 0xFF, 0x3b9ff & 0xFF},
+ {0x3ba00 & 0xFF, 0x3baff & 0xFF},
+ {0x3bb00 & 0xFF, 0x3bbff & 0xFF},
+ {0x3bc00 & 0xFF, 0x3bcff & 0xFF},
+ {0x3bd00 & 0xFF, 0x3bdff & 0xFF},
+ {0x3be00 & 0xFF, 0x3beff & 0xFF},
+ {0x3bf00 & 0xFF, 0x3bfff & 0xFF},
+ {0x3c000 & 0xFF, 0x3c0ff & 0xFF},
+ {0x3c100 & 0xFF, 0x3c1ff & 0xFF},
+ {0x3c200 & 0xFF, 0x3c2ff & 0xFF},
+ {0x3c300 & 0xFF, 0x3c3ff & 0xFF},
+ {0x3c400 & 0xFF, 0x3c4ff & 0xFF},
+ {0x3c500 & 0xFF, 0x3c5ff & 0xFF},
+ {0x3c600 & 0xFF, 0x3c6ff & 0xFF},
+ {0x3c700 & 0xFF, 0x3c7ff & 0xFF},
+ {0x3c800 & 0xFF, 0x3c8ff & 0xFF},
+ {0x3c900 & 0xFF, 0x3c9ff & 0xFF},
+ {0x3ca00 & 0xFF, 0x3caff & 0xFF},
+ {0x3cb00 & 0xFF, 0x3cbff & 0xFF},
+ {0x3cc00 & 0xFF, 0x3ccff & 0xFF},
+ {0x3cd00 & 0xFF, 0x3cdff & 0xFF},
+ {0x3ce00 & 0xFF, 0x3ceff & 0xFF},
+ {0x3cf00 & 0xFF, 0x3cfff & 0xFF},
+ {0x3d000 & 0xFF, 0x3d0ff & 0xFF},
+ {0x3d100 & 0xFF, 0x3d1ff & 0xFF},
+ {0x3d200 & 0xFF, 0x3d2ff & 0xFF},
+ {0x3d300 & 0xFF, 0x3d3ff & 0xFF},
+ {0x3d400 & 0xFF, 0x3d4ff & 0xFF},
+ {0x3d500 & 0xFF, 0x3d5ff & 0xFF},
+ {0x3d600 & 0xFF, 0x3d6ff & 0xFF},
+ {0x3d700 & 0xFF, 0x3d7ff & 0xFF},
+ {0x3d800 & 0xFF, 0x3d8ff & 0xFF},
+ {0x3d900 & 0xFF, 0x3d9ff & 0xFF},
+ {0x3da00 & 0xFF, 0x3daff & 0xFF},
+ {0x3db00 & 0xFF, 0x3dbff & 0xFF},
+ {0x3dc00 & 0xFF, 0x3dcff & 0xFF},
+ {0x3dd00 & 0xFF, 0x3ddff & 0xFF},
+ {0x3de00 & 0xFF, 0x3deff & 0xFF},
+ {0x3df00 & 0xFF, 0x3dfff & 0xFF},
+ {0x3e000 & 0xFF, 0x3e0ff & 0xFF},
+ {0x3e100 & 0xFF, 0x3e1ff & 0xFF},
+ {0x3e200 & 0xFF, 0x3e2ff & 0xFF},
+ {0x3e300 & 0xFF, 0x3e3ff & 0xFF},
+ {0x3e400 & 0xFF, 0x3e4ff & 0xFF},
+ {0x3e500 & 0xFF, 0x3e5ff & 0xFF},
+ {0x3e600 & 0xFF, 0x3e6ff & 0xFF},
+ {0x3e700 & 0xFF, 0x3e7ff & 0xFF},
+ {0x3e800 & 0xFF, 0x3e8ff & 0xFF},
+ {0x3e900 & 0xFF, 0x3e9ff & 0xFF},
+ {0x3ea00 & 0xFF, 0x3eaff & 0xFF},
+ {0x3eb00 & 0xFF, 0x3ebff & 0xFF},
+ {0x3ec00 & 0xFF, 0x3ecff & 0xFF},
+ {0x3ed00 & 0xFF, 0x3edff & 0xFF},
+ {0x3ee00 & 0xFF, 0x3eeff & 0xFF},
+ {0x3ef00 & 0xFF, 0x3efff & 0xFF},
+ {0x3f000 & 0xFF, 0x3f0ff & 0xFF},
+ {0x3f100 & 0xFF, 0x3f1ff & 0xFF},
+ {0x3f200 & 0xFF, 0x3f2ff & 0xFF},
+ {0x3f300 & 0xFF, 0x3f3ff & 0xFF},
+ {0x3f400 & 0xFF, 0x3f4ff & 0xFF},
+ {0x3f500 & 0xFF, 0x3f5ff & 0xFF},
+ {0x3f600 & 0xFF, 0x3f6ff & 0xFF},
+ {0x3f700 & 0xFF, 0x3f7ff & 0xFF},
+ {0x3f800 & 0xFF, 0x3f8ff & 0xFF},
+ {0x3f900 & 0xFF, 0x3f9ff & 0xFF},
+ {0x3fa00 & 0xFF, 0x3faff & 0xFF},
+ {0x3fb00 & 0xFF, 0x3fbff & 0xFF},
+ {0x3fc00 & 0xFF, 0x3fcff & 0xFF},
+ {0x3fd00 & 0xFF, 0x3fdff & 0xFF},
+ {0x3fe00 & 0xFF, 0x3feff & 0xFF},
+ {0x3ff00 & 0xFF, 0x3fffd & 0xFF},
+ {0xe0001 & 0xFF, 0xe0001 & 0xFF},
+ {0xe0020 & 0xFF, 0xe007f & 0xFF},
+ {0xe0100 & 0xFF, 0xe01ef & 0xFF}};
+
+static const uint8_t unicode_classtab[]={
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_LF,
+ UNICODE_LB_BK,
+ UNICODE_LB_CR,
+ UNICODE_LB_CM,
+ UNICODE_LB_SP,
+ UNICODE_LB_EX,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_OP,
+ UNICODE_LB_CP,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_IS,
+ UNICODE_LB_HY,
+ UNICODE_LB_IS,
+ UNICODE_LB_SY,
+ UNICODE_LB_NU,
+ UNICODE_LB_IS,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_PR,
+ UNICODE_LB_CP,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_BA,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NL,
+ UNICODE_LB_CM,
+ UNICODE_LB_GL,
+ UNICODE_LB_OP,
+ UNICODE_LB_PO,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_GL,
+ UNICODE_LB_CM,
+ UNICODE_LB_GL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_IS,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_IS,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_EX,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_IS,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_EX,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_PO,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_IS,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_PR,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_GL,
+ UNICODE_LB_BB,
+ UNICODE_LB_BA,
+ UNICODE_LB_GL,
+ UNICODE_LB_EX,
+ UNICODE_LB_GL,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_BA,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_GL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_JL,
+ UNICODE_LB_JV,
+ UNICODE_LB_JT,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_BA,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_GL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_GL,
+ UNICODE_LB_BA,
+ UNICODE_LB_ZW,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_GL,
+ UNICODE_LB_BA,
+ UNICODE_LB_B2,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_OP,
+ UNICODE_LB_QU,
+ UNICODE_LB_OP,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_IN,
+ UNICODE_LB_BA,
+ UNICODE_LB_BK,
+ UNICODE_LB_CM,
+ UNICODE_LB_GL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_IS,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_WJ,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_PO,
+ UNICODE_LB_PR,
+ UNICODE_LB_PO,
+ UNICODE_LB_PR,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_EX,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_EX,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_QU,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_OP,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_AL,
+ UNICODE_LB_QU,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_BA,
+ UNICODE_LB_EX,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_NS,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_CM,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_CM,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_EX,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BB,
+ UNICODE_LB_EX,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_NU,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_JL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_CM,
+ UNICODE_LB_NU,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_H2,
+ UNICODE_LB_H3,
+ UNICODE_LB_JV,
+ UNICODE_LB_JT,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_IS,
+ UNICODE_LB_CL,
+ UNICODE_LB_IS,
+ UNICODE_LB_EX,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_IN,
+ UNICODE_LB_CM,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_NS,
+ UNICODE_LB_EX,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_PR,
+ UNICODE_LB_PO,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_WJ,
+ UNICODE_LB_EX,
+ UNICODE_LB_ID,
+ UNICODE_LB_PR,
+ UNICODE_LB_PO,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_NS,
+ UNICODE_LB_ID,
+ UNICODE_LB_EX,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_ID,
+ UNICODE_LB_CL,
+ UNICODE_LB_ID,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_NS,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_PO,
+ UNICODE_LB_PR,
+ UNICODE_LB_ID,
+ UNICODE_LB_PR,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CB,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_BA,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_OP,
+ UNICODE_LB_CL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_CM,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_NU,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_AL,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_ID,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM,
+ UNICODE_LB_CM};
+
+static const size_t unicode_indextab[]={
+ 0,
+ 56,
+ 57,
+ 64,
+ 76,
+ 79,
+ 96,
+ 124,
+ 139,
+ 151,
+ 188,
+ 224,
+ 262,
+ 295,
+ 323,
+ 355,
+ 403,
+ 426,
+ 429,
+ 443,
+ 452,
+ 454,
+ 455,
+ 463,
+ 487,
+ 502,
+ 517,
+ 526,
+ 545,
+ 560,
+ 563,
+ 564,
+ 582,
+ 636,
+ 644,
+ 647,
+ 651,
+ 654,
+ 655,
+ 656,
+ 692,
+ 693,
+ 725,
+ 726,
+ 728,
+ 737,
+ 752,
+ 776,
+ 778,
+ 858,
+ 863,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ 882,
+ 883,
+ 884,
+ 885,
+ 886,
+ 887,
+ 888,
+ 889,
+ 890,
+ 891,
+ 892,
+ 893,
+ 895,
+ 896,
+ 897,
+ 898,
+ 899,
+ 900,
+ 901,
+ 902,
+ 903,
+ 904,
+ 905,
+ 906,
+ 907,
+ 908,
+ 909,
+ 910,
+ 911,
+ 912,
+ 913,
+ 914,
+ 915,
+ 916,
+ 917,
+ 918,
+ 919,
+ 920,
+ 921,
+ 922,
+ 923,
+ 924,
+ 925,
+ 926,
+ 927,
+ 928,
+ 929,
+ 930,
+ 931,
+ 932,
+ 933,
+ 934,
+ 935,
+ 936,
+ 937,
+ 938,
+ 939,
+ 940,
+ 941,
+ 942,
+ 943,
+ 944,
+ 945,
+ 946,
+ 947,
+ 948,
+ 949,
+ 950,
+ 951,
+ 952,
+ 953,
+ 954,
+ 955,
+ 956,
+ 957,
+ 958,
+ 959,
+ 960,
+ 961,
+ 962,
+ 963,
+ 964,
+ 965,
+ 966,
+ 967,
+ 968,
+ 969,
+ 970,
+ 971,
+ 972,
+ 973,
+ 974,
+ 975,
+ 976,
+ 977,
+ 980,
+ 981,
+ 982,
+ 983,
+ 987,
+ 988,
+ 1004,
+ 1008,
+ 1030,
+ 1047,
+ 1070,
+ 1080,
+ 1100,
+ 1119,
+ 1138,
+ 1157,
+ 1176,
+ 1195,
+ 1214,
+ 1234,
+ 1253,
+ 1272,
+ 1291,
+ 1310,
+ 1329,
+ 1348,
+ 1368,
+ 1387,
+ 1406,
+ 1425,
+ 1444,
+ 1463,
+ 1482,
+ 1502,
+ 1521,
+ 1540,
+ 1559,
+ 1578,
+ 1597,
+ 1616,
+ 1636,
+ 1655,
+ 1674,
+ 1693,
+ 1712,
+ 1731,
+ 1750,
+ 1770,
+ 1789,
+ 1808,
+ 1827,
+ 1846,
+ 1865,
+ 1884,
+ 1904,
+ 1917,
+ 1918,
+ 1919,
+ 1920,
+ 1921,
+ 1922,
+ 1923,
+ 1924,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1925,
+ 1926,
+ 1927,
+ 1938,
+ 1939,
+ 1947,
+ 1997,
+ 2043,
+ 2050,
+ 2056,
+ 2058,
+ 2067,
+ 2069,
+ 2069,
+ 2069,
+ 2069,
+ 2077,
+ 2081,
+ 2094,
+ 2099,
+ 2100,
+ 2100,
+ 2101,
+ 2101,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2113,
+ 2114,
+ 2115,
+ 2116,
+ 2117,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2119,
+ 2120,
+ 2121,
+ 2132,
+ 2136,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2137,
+ 2138,
+ 2139,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2140,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2141,
+ 2142,
+ 2152,
+ 2155,
+ 2157,
+ 2167,
+ 2177,
+ 2179,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2181,
+ 2187,
+ 2192,
+ 2196,
+ 2203,
+ 2207,
+ 2210,
+ 2223,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2224,
+ 2225,
+ 2226,
+ 2227,
+ 2228,
+ 2229,
+ 2230,
+ 2231,
+ 2232,
+ 2233,
+ 2234,
+ 2235,
+ 2236,
+ 2237,
+ 2238,
+ 2239,
+ 2240,
+ 2241,
+ 2242,
+ 2243,
+ 2244,
+ 2245,
+ 2246,
+ 2247,
+ 2248,
+ 2249,
+ 2250,
+ 2251,
+ 2252,
+ 2253,
+ 2254,
+ 2255,
+ 2256,
+ 2257,
+ 2258,
+ 2259,
+ 2260,
+ 2261,
+ 2262,
+ 2263,
+ 2264,
+ 2265,
+ 2266,
+ 2267,
+ 2268,
+ 2269,
+ 2270,
+ 2271,
+ 2272,
+ 2273,
+ 2274,
+ 2275,
+ 2276,
+ 2277,
+ 2278,
+ 2279,
+ 2280,
+ 2281,
+ 2282,
+ 2283,
+ 2284,
+ 2285,
+ 2286,
+ 2287,
+ 2288,
+ 2289,
+ 2290,
+ 2291,
+ 2292,
+ 2293,
+ 2294,
+ 2295,
+ 2296,
+ 2297,
+ 2298,
+ 2299,
+ 2300,
+ 2301,
+ 2302,
+ 2303,
+ 2304,
+ 2305,
+ 2306,
+ 2307,
+ 2308,
+ 2309,
+ 2310,
+ 2311,
+ 2312,
+ 2313,
+ 2314,
+ 2315,
+ 2316,
+ 2317,
+ 2318,
+ 2319,
+ 2320,
+ 2321,
+ 2322,
+ 2323,
+ 2324,
+ 2325,
+ 2326,
+ 2327,
+ 2328,
+ 2329,
+ 2330,
+ 2331,
+ 2332,
+ 2333,
+ 2334,
+ 2335,
+ 2336,
+ 2337,
+ 2338,
+ 2339,
+ 2340,
+ 2341,
+ 2342,
+ 2343,
+ 2344,
+ 2345,
+ 2346,
+ 2347,
+ 2348,
+ 2349,
+ 2350,
+ 2351,
+ 2352,
+ 2353,
+ 2354,
+ 2355,
+ 2356,
+ 2357,
+ 2358,
+ 2359,
+ 2360,
+ 2361,
+ 2362,
+ 2363,
+ 2364,
+ 2365,
+ 2366,
+ 2367,
+ 2368,
+ 2369,
+ 2370,
+ 2371,
+ 2372,
+ 2373,
+ 2374,
+ 2375,
+ 2376,
+ 2377,
+ 2378,
+ 2379,
+ 2380,
+ 2381,
+ 2382,
+ 2383,
+ 2384,
+ 2385,
+ 2386,
+ 2387,
+ 2388,
+ 2389,
+ 2390,
+ 2391,
+ 2392,
+ 2393,
+ 2394,
+ 2395,
+ 2396,
+ 2397,
+ 2398,
+ 2399,
+ 2400,
+ 2401,
+ 2402,
+ 2403,
+ 2404,
+ 2405,
+ 2406,
+ 2407,
+ 2408,
+ 2409,
+ 2410,
+ 2411,
+ 2412,
+ 2413,
+ 2414,
+ 2415,
+ 2416,
+ 2417,
+ 2418,
+ 2419,
+ 2420,
+ 2421,
+ 2422,
+ 2423,
+ 2424,
+ 2425,
+ 2426,
+ 2427,
+ 2428,
+ 2429,
+ 2430,
+ 2431,
+ 2432,
+ 2433,
+ 2434,
+ 2435,
+ 2436,
+ 2437,
+ 2438,
+ 2439,
+ 2440,
+ 2441,
+ 2442,
+ 2443,
+ 2444,
+ 2445,
+ 2446,
+ 2447,
+ 2448,
+ 2449,
+ 2450,
+ 2451,
+ 2452,
+ 2453,
+ 2454,
+ 2455,
+ 2456,
+ 2457,
+ 2458,
+ 2459,
+ 2460,
+ 2461,
+ 2462,
+ 2463,
+ 2464,
+ 2465,
+ 2466,
+ 2467,
+ 2468,
+ 2469,
+ 2470,
+ 2471,
+ 2472,
+ 2473,
+ 2474,
+ 2475,
+ 2476,
+ 2477,
+ 2478,
+ 2479,
+ 2480,
+ 2481,
+ 2482,
+ 2483,
+ 2484,
+ 2485,
+ 2486,
+ 2487,
+ 2488,
+ 2489,
+ 2490,
+ 2491,
+ 2492,
+ 2493,
+ 2494,
+ 2495,
+ 2496,
+ 2497,
+ 2498,
+ 2499,
+ 2500,
+ 2501,
+ 2502,
+ 2503,
+ 2504,
+ 2505,
+ 2506,
+ 2507,
+ 2508,
+ 2509,
+ 2510,
+ 2511,
+ 2512,
+ 2513,
+ 2514,
+ 2515,
+ 2516,
+ 2517,
+ 2518,
+ 2519,
+ 2520,
+ 2521,
+ 2522,
+ 2523,
+ 2524,
+ 2525,
+ 2526,
+ 2527,
+ 2528,
+ 2529,
+ 2530,
+ 2531,
+ 2532,
+ 2533,
+ 2534,
+ 2535,
+ 2536,
+ 2537,
+ 2538,
+ 2539,
+ 2540,
+ 2541,
+ 2542,
+ 2543,
+ 2544,
+ 2545,
+ 2546,
+ 2547,
+ 2548,
+ 2549,
+ 2550,
+ 2551,
+ 2552,
+ 2553,
+ 2554,
+ 2555,
+ 2556,
+ 2557,
+ 2558,
+ 2559,
+ 2560,
+ 2561,
+ 2562,
+ 2563,
+ 2564,
+ 2565,
+ 2566,
+ 2567,
+ 2568,
+ 2569,
+ 2570,
+ 2571,
+ 2572,
+ 2573,
+ 2574,
+ 2575,
+ 2576,
+ 2577,
+ 2578,
+ 2579,
+ 2580,
+ 2581,
+ 2582,
+ 2583,
+ 2584,
+ 2585,
+ 2586,
+ 2587,
+ 2588,
+ 2589,
+ 2590,
+ 2591,
+ 2592,
+ 2593,
+ 2594,
+ 2595,
+ 2596,
+ 2597,
+ 2598,
+ 2599,
+ 2600,
+ 2601,
+ 2602,
+ 2603,
+ 2604,
+ 2605,
+ 2606,
+ 2607,
+ 2608,
+ 2609,
+ 2610,
+ 2611,
+ 2612,
+ 2613,
+ 2614,
+ 2615,
+ 2616,
+ 2617,
+ 2618,
+ 2619,
+ 2620,
+ 2621,
+ 2622,
+ 2623,
+ 2624,
+ 2625,
+ 2626,
+ 2627,
+ 2628,
+ 2629,
+ 2630,
+ 2631,
+ 2632,
+ 2633,
+ 2634,
+ 2635,
+ 2636,
+ 2637,
+ 2638,
+ 2639,
+ 2640,
+ 2641,
+ 2642,
+ 2643,
+ 2644,
+ 2645,
+ 2646,
+ 2647,
+ 2648,
+ 2649,
+ 2650,
+ 2651,
+ 2652,
+ 2653,
+ 2654,
+ 2655,
+ 2656,
+ 2657,
+ 2658,
+ 2659,
+ 2660,
+ 2661,
+ 2662,
+ 2663,
+ 2664,
+ 2665,
+ 2666,
+ 2667,
+ 2668,
+ 2669,
+ 2670,
+ 2671,
+ 2672,
+ 2673,
+ 2674,
+ 2675,
+ 2676,
+ 2677,
+ 2678,
+ 2679,
+ 2680,
+ 2681,
+ 2682,
+ 2683,
+ 2684,
+ 2685,
+ 2686,
+ 2687,
+ 2688,
+ 2689,
+ 2690,
+ 2691,
+ 2692,
+ 2693,
+ 2694,
+ 2695,
+ 2696,
+ 2697,
+ 2698,
+ 2699,
+ 2700,
+ 2701,
+ 2702,
+ 2703,
+ 2704,
+ 2705,
+ 2706,
+ 2707,
+ 2708,
+ 2709,
+ 2710,
+ 2711,
+ 2712,
+ 2713,
+ 2714,
+ 2715,
+ 2716,
+ 2717,
+ 2718,
+ 2719,
+ 2720,
+ 2721,
+ 2722,
+ 2723,
+ 2724,
+ 2725,
+ 2726,
+ 2727,
+ 2728,
+ 2729,
+ 2730,
+ 2731,
+ 2732,
+ 2733,
+ 2734,
+ 2735,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2736,
+ 2738,
+ 2739};
+
diff --git a/unicode/linebreaktab_internal.h b/unicode/linebreaktab_internal.h
new file mode 100644
index 0000000..921ef77
--- /dev/null
+++ b/unicode/linebreaktab_internal.h
@@ -0,0 +1,49 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#ifndef linebreaktab_internal_h
+#define linebreaktab_internal_h
+
+#define UNICODE_LB_BK 0x00
+#define UNICODE_LB_CR 0x01
+#define UNICODE_LB_LF 0x02
+#define UNICODE_LB_CM 0x03
+#define UNICODE_LB_NL 0x04
+#define UNICODE_LB_SG 0x05
+#define UNICODE_LB_WJ 0x06
+#define UNICODE_LB_ZW 0x07
+#define UNICODE_LB_GL 0x08
+#define UNICODE_LB_SP 0x09
+#define UNICODE_LB_B2 0x10
+#define UNICODE_LB_BA 0x11
+#define UNICODE_LB_BB 0x12
+#define UNICODE_LB_HY 0x13
+#define UNICODE_LB_CB 0x14
+#define UNICODE_LB_CL 0x20
+#define UNICODE_LB_CP 0x21
+#define UNICODE_LB_EX 0x22
+#define UNICODE_LB_IN 0x23
+#define UNICODE_LB_NS 0x24
+#define UNICODE_LB_OP 0x25
+#define UNICODE_LB_QU 0x26
+#define UNICODE_LB_IS 0x30
+#define UNICODE_LB_NU 0x31
+#define UNICODE_LB_PO 0x32
+#define UNICODE_LB_PR 0x33
+#define UNICODE_LB_SY 0x34
+#define UNICODE_LB_AI 0x40
+#define UNICODE_LB_AL 0x41
+#define UNICODE_LB_H2 0x42
+#define UNICODE_LB_H3 0x43
+#define UNICODE_LB_ID 0x44
+#define UNICODE_LB_JL 0x45
+#define UNICODE_LB_JV 0x46
+#define UNICODE_LB_JT 0x47
+#define UNICODE_LB_SA 0x48
+
+extern int unicode_lb_lookup(unicode_char ch);
+
+#endif
diff --git a/unicode/linebreaktest.C b/unicode/linebreaktest.C
new file mode 100644
index 0000000..0f20869
--- /dev/null
+++ b/unicode/linebreaktest.C
@@ -0,0 +1,201 @@
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <iomanip>
+#include <algorithm>
+#include <functional>
+#include <cstdlib>
+#include <list>
+#include <vector>
+
+static void testsuite()
+{
+ std::string buf;
+ int linenum=0;
+
+ std::ifstream fp("LineBreakTest.txt");
+
+ if (!fp.is_open())
+ exit(1);
+
+ while (1)
+ {
+ buf.clear();
+
+ if (std::getline(fp, buf).eof() && buf.empty())
+ break;
+
+ ++linenum;
+
+ buf.erase(std::find(buf.begin(), buf.end(), '#'), buf.end());
+
+ if (buf.empty())
+ continue;
+
+ std::list<std::string> words;
+
+ for (std::string::iterator b=buf.begin(), e=buf.end(); b != e;)
+ {
+ if (isspace(*b))
+ {
+ ++b;
+ continue;
+ }
+
+ std::string::iterator p=b;
+
+ while (b != e)
+ {
+ if (isspace(*b))
+ break;
+ ++b;
+ }
+
+ words.push_back(std::string(p, b));
+ }
+
+ std::vector<unicode_char> ubuf;
+ std::vector<int> status;
+
+ while (1)
+ {
+ if (!words.empty() && words.front().size() > 1)
+ {
+ int expected=UNICODE_LB_MANDATORY;
+
+ std::string s=words.front();
+
+ words.pop_front();
+
+ if ((unsigned char)s[0] ==
+ (unsigned char)0xc3)
+ switch ( (unsigned char)s[1] ) {
+ case (unsigned char)0x97:
+ expected=UNICODE_LB_NONE;
+ break;
+ case (unsigned char)0xb7:
+ expected=UNICODE_LB_ALLOWED;
+ break;
+ }
+
+ if (words.empty())
+ break;
+
+ status.push_back(expected);
+
+ std::istringstream i(words.front());
+
+ unicode_char uc;
+
+ i >> std::hex >> uc;
+
+ words.pop_front();
+
+ if (!i.fail())
+ {
+ ubuf.push_back(uc);
+ continue;
+ }
+ }
+
+ std::cerr << "Parse error, line " << linenum
+ << ": " << buf << std::endl;
+ exit(1);
+ }
+
+ std::vector<int> computed_status;
+
+ typedef std::vector<unicode_char>::const_iterator ubuf_iter;
+ typedef mail::linebreak_iter<ubuf_iter> lb_iter;
+
+ std::copy(lb_iter(ubuf.begin(), ubuf.end()), lb_iter(),
+ std::back_insert_iterator<std::vector<int> >
+ (computed_status));
+
+ std::replace(computed_status.begin(),
+ computed_status.end(),
+ UNICODE_LB_MANDATORY,
+ UNICODE_LB_ALLOWED);
+
+ if (computed_status != status)
+ {
+ std::cerr << "Regression, line " << linenum
+ << ": " << buf << std::endl;
+ exit(1);
+ }
+ }
+}
+
+static void testlinebreakc()
+{
+ static unicode_char str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303,
+ 0x0304, 0x0305, 0x0306, 0x0307, '1', '.',
+ '2', ' ', 'A'};
+
+ typedef std::vector<std::pair<int, unicode_char> > linebreakvec_t;
+
+ linebreakvec_t linebreakvec;
+
+ std::copy(mail::linebreakc_iter<unicode_char *>(str,
+ str + sizeof(str)
+ /sizeof(str[0])),
+ mail::linebreakc_iter<unicode_char *>(),
+ std::back_insert_iterator<linebreakvec_t>
+ (linebreakvec));
+
+ if (linebreakvec.size() == sizeof(str)/sizeof(str[0]))
+ {
+ size_t i;
+
+ for (i=0; i<sizeof(str)/sizeof(str[0]); ++i)
+ {
+ if (str[i] != linebreakvec[i].second ||
+ linebreakvec[i].first !=
+ (i < sizeof(str)/sizeof(str[0])-1
+ ? UNICODE_LB_NONE:UNICODE_LB_ALLOWED))
+ break;
+ }
+
+ if (i == sizeof(str)/sizeof(str[0]))
+ return;
+ }
+ std::cerr << "Line break test 1 failed" << std::endl;
+}
+
+int main(int argc, char **argv)
+{
+ testsuite();
+ testlinebreakc();
+
+ std::string convteststr="0000000000000000000000000000000\xe3\x82\xa2";
+
+ std::vector<unicode_char> uc;
+
+ mail::iconvert::tou
+ ::convert(convteststr, "utf-8", uc);
+
+ std::vector<unicode_char>::iterator e(uc.end()),
+ b(std::find_if(uc.begin(), e,
+ std::not1(std::bind2nd(std::equal_to<unicode_char>
+ (),
+ unicode_char('0')))));
+
+ if (b == e || *b++ != 0x30A2 || b != e)
+ {
+ std::cerr << "mail::iconvert::tou::convert failed"
+ << std::endl;
+ exit(1);
+ }
+
+ if (mail::iconvert::fromu::convert(uc, "utf-8") != convteststr)
+ {
+ std::cerr << "mail::iconvert::fromu::convert failed"
+ << std::endl;
+ exit(1);
+ }
+
+ return 0;
+}
diff --git a/unicode/mkcommon.pm b/unicode/mkcommon.pm
new file mode 100644
index 0000000..2969f32
--- /dev/null
+++ b/unicode/mkcommon.pm
@@ -0,0 +1,192 @@
+package mkcommon;
+
+use 5.012002;
+use strict;
+use warnings;
+
+require Exporter;
+
+our @ISA = qw(Exporter);
+
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+
+# This allows declaration use mkcommon ':all';
+# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
+# will save memory.
+our %EXPORT_TAGS = ( 'all' => [ qw(
+
+) ] );
+
+our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
+
+our @EXPORT = qw(
+
+);
+
+our $VERSION = '0.01';
+
+my $BLOCK_SIZE=256;
+
+# Preloaded methods go here.
+
+sub new {
+
+ my $this=shift;
+
+ my $class = ref($this) || $this;
+ my $self = {};
+ bless $self, $class;
+
+ $$self{'char_array'}=[];
+ $$self{'char_class'}=[];
+ $$self{'char_start'}=[0];
+
+ $$self{'last_block'}=-1;
+ $$self{'last'}="";
+ $$self{'last_f'}=0;
+ $$self{'last_l'}=0;
+
+ return $self;
+}
+
+sub _doemit_block {
+ my $this=shift;
+
+ my $f=shift;
+ my $l=shift;
+
+ push @{$$this{'char_array'}}, [$f, $l];
+ push @{$$this{'char_class'}}, $$this{'last'};
+}
+
+sub _doemit_endblock {
+
+ my $this=shift;
+
+ push @{$$this{'char_start'}}, $#{$$this{'char_array'}}+1;
+}
+
+# _doemit invokes _doemit_block() for each unicode char range with a given
+# linebreaking class. However, once a unicode char range starts in a different
+# $BLOCK_SIZE character class, call _doemit_endblock() before calling _doemit_block().
+#
+# If a single unicode char range crosses a $BLOCK_SIZE character class boundary,
+# split it at the boundary; call _doemit_endblock() to finish the current $BLOCK_SIZE
+# char boundary, call _doemit_endblock(), then call _doemit_block() for the
+# rest of the char range.
+
+
+sub _doemit {
+
+ my $this=shift;
+
+ $this->_doemit_endblock()
+ if int($$this{'last_f'} / $BLOCK_SIZE)
+ != $$this{'last_block'} && $$this{'last_block'} != -1;
+
+ if (int($$this{'last_f'} / $BLOCK_SIZE) != int($$this{'last_l'} / $BLOCK_SIZE))
+ {
+ while (int($$this{'last_f'} / $BLOCK_SIZE) != int($$this{'last_l'} / $BLOCK_SIZE))
+ {
+ my $n=int($$this{'last_f'} / $BLOCK_SIZE) * $BLOCK_SIZE + ($BLOCK_SIZE-1);
+
+ $this->_doemit_block($$this{'last_f'}, $n);
+ $this->_doemit_endblock();
+ $$this{'last_f'}=$n+1;
+ }
+ }
+ $this->_doemit_block($$this{'last_f'}, $$this{'last_l'});
+
+ $$this{'last_block'}=int($$this{'last_l'} / $BLOCK_SIZE);
+}
+
+#
+# Coalesce adjacent unicode char blocks that have the same linebreaking
+# property. Invoke _doemit() for the accumulate unicode char range once
+# a range with a different linebreaking class is seen.
+
+sub range {
+
+ my $this=shift;
+
+ my $f=shift;
+ my $l=shift;
+ my $t=shift;
+
+ if ($$this{'last_l'} + 1 == $f && $$this{'last'} eq $t)
+ {
+ $$this{'last_l'}=$l;
+ return;
+ }
+
+ $this->_doemit() if $$this{'last'}; # New linebreaking class
+
+ $$this{'last_f'}=$f;
+ $$this{'last_l'}=$l;
+ $$this{'last'}=$t;
+}
+
+sub output {
+ my $this=shift;
+
+ $this->_doemit(); # Emit last linebreaking unicode char range class
+
+ $this->_doemit_endblock(); # End of the most recent $BLOCK_SIZE char range class
+
+ print "static const uint8_t unicode_rangetab[][2]={\n";
+
+ my $comma="\t";
+
+ my $modulo=sprintf("0x%X", $BLOCK_SIZE-1);
+
+ foreach ( @{$$this{'char_array'}} )
+ {
+ print "${comma}{0x" . sprintf("%04x", $$_[0]) . " & $modulo, 0x"
+ . sprintf("%04x", $$_[1]) . " & $modulo}";
+ $comma=",\n\t";
+ }
+
+ print "};\n\n";
+
+ print "static const uint8_t unicode_classtab[]={\n";
+
+ $comma="\t";
+ foreach ( @{$$this{'char_class'}} )
+ {
+ print "${comma}$_";
+ $comma=",\n\t";
+ }
+
+ print "};\n\n";
+
+ print "static const size_t unicode_indextab[]={\n";
+
+ $comma="\t";
+
+ my $prev_block=-1;
+ foreach (@{$$this{'char_start'}})
+ {
+ my $sp=$_;
+ my $cnt=1;
+
+ if ($sp <= $#{$$this{'char_array'}})
+ {
+ my $block=int($$this{'char_array'}->[$sp]->[0] / $BLOCK_SIZE);
+
+ $cnt = $block - $prev_block;
+ $prev_block=$block;
+ }
+
+ foreach (1..$cnt)
+ {
+ print "$comma$sp";
+ $comma=",\n\t";
+ }
+ }
+
+ print "};\n\n";
+}
+
+1;
diff --git a/unicode/mkeastasianwidth.pl b/unicode/mkeastasianwidth.pl
new file mode 100644
index 0000000..0ddf800
--- /dev/null
+++ b/unicode/mkeastasianwidth.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+
+# USAGE: perl mkeastasianwidth.pl > charwidth.c
+
+use IO::File;
+
+my $fh=new IO::File "<EastAsianWidth.txt";
+
+my $pb=-1;
+my $pe=-1;
+
+print "static const unicode_char unicode_wcwidth_tab[][2]={\n";
+
+sub full($$) {
+ my $b=hex(shift);
+ my $e=hex(shift);
+
+ if ($b == $pe+1)
+ {
+ $pe=$e;
+ return;
+ }
+
+ printf ("{0x%04x, 0x%04x},\n", $pb, $pe) unless $pb < 0;
+
+ $pb=$b;
+ $pe=$e;
+}
+
+
+while (defined($_=<$fh>))
+{
+ chomp;
+ s/#.*//;
+
+ my @w=split(/;/);
+
+ grep {s/^\s*//; s/\s*$//; } @w;
+
+ next unless $w[1] eq "F" || $w[1] eq "W";
+
+ if ($w[0] =~ /(.*)\.\.(.*)/)
+ {
+ full($1, $2);
+ }
+ else
+ {
+ full($w[0], $w[0]);
+ }
+}
+
+printf ("{0x%04x, 0x%04x}\n};\n", $pb, $pe);
diff --git a/unicode/mkgraphemebreak.pl b/unicode/mkgraphemebreak.pl
new file mode 100644
index 0000000..3b3cbc6
--- /dev/null
+++ b/unicode/mkgraphemebreak.pl
@@ -0,0 +1,60 @@
+#! /usr/bin/perl
+#
+# Compile GraphemeBreak.txt into C array declarations.
+#
+# The array's structure is [firstchar, lastchar, class], giving the
+# linebreaking "class" for unicode character range firstchar-lastchar.
+#
+# The ranges are sorted in numerical order.
+#
+# An array gets generated for each block of 4096 unicode characters.
+#
+# Finally, two arrays get declared: a pointer to an array for each 4096
+# unicode character block, and the number of elements in the array.
+#
+# The pointer is NULL for each block of 4096 unicode characters that is not
+# defined in LineBreak.txt
+#
+# By definition, a unicode character that is not listed in the array is
+# class XX.
+
+use strict;
+use warnings;
+use mkcommon;
+
+open(F, "<GraphemeBreakProperty.txt") || die;
+
+# Read LineBreak.txt
+#
+# Invoke doclass() passing the first unicode char, the last unicode char,
+# and the linebreaking class for the given unicode char range.
+
+my @breaklist;
+
+while (defined($_=<F>))
+{
+ chomp;
+
+ next unless /^([0-9A-F]+)(\.\.([0-9A-F]+))?\s*\;\s*([^\s]+)\s*/;
+
+ my $f=$1;
+ my $l=$3;
+ my $t=$4;
+
+ $l=$f unless $l;
+
+ eval "\$f=0x$f";
+ eval "\$l=0x$l";
+
+ push @breaklist, [$f, $l, $t];
+}
+
+
+my $obj=mkcommon->new;
+
+foreach (sort { $$a[0] <=> $$b[0] } @breaklist)
+{
+ $obj->range($$_[0], $$_[1], "UNICODE_GRAPHEMEBREAK_$$_[2]");
+}
+
+$obj->output;
diff --git a/unicode/mkhtmlent.pl b/unicode/mkhtmlent.pl
new file mode 100644
index 0000000..7120ac7
--- /dev/null
+++ b/unicode/mkhtmlent.pl
@@ -0,0 +1,69 @@
+#! /usr/bin/perl
+#
+# Compile list of HTML 4.0/XHTML entities.
+
+my %ent=("amp" => 38, "lt" => 60, "gt" => 62);
+
+foreach ("xhtml-lat1.ent", "xhtml-special.ent", "xhtml-symbol.ent")
+{
+ open(F, "<$_") or die "$_: $!\n";
+
+ my $l;
+
+ while (defined($l=<F>))
+ {
+ chomp $l;
+ next unless $l =~ m/^<!ENTITY\s+([^\s]+)\s+"&#(\d+);">/;
+
+ $ent{$1}=$2;
+ }
+}
+
+print "static const char n[]={\n";
+
+my $prev="\t";
+
+foreach (sort keys %ent)
+{
+ my $n=$_;
+
+ my $str="";
+
+ print $prev;
+ $prev="";
+
+ foreach (0..length($n)-1)
+ {
+ $str .= $prev . ord(substr($n, $_, 1));
+ $prev=", ";
+ }
+
+ print $str;
+
+ $prev=",";
+
+ $prev .= (" " x (40 - length($str)))
+ if (length($str) < 40);
+
+ $prev .= " /* $n */\n\t";
+}
+
+substr($prev, 0, 1)=" ";
+
+$prev =~ s/\t//;
+
+print "$prev};\n\nstatic const struct i ii[]={";
+
+$prev="\n\t";
+
+my $n=0;
+
+foreach (sort keys %ent)
+{
+ print $prev . "{$n, " . length($_) . ", $ent{$_}" . "}";
+
+ $n += length($_);
+ $prev=",\n\t";
+}
+
+print "\n};\n";
diff --git a/unicode/mklinebreak.pl b/unicode/mklinebreak.pl
new file mode 100644
index 0000000..c9b75e0
--- /dev/null
+++ b/unicode/mklinebreak.pl
@@ -0,0 +1,86 @@
+#! /usr/bin/perl
+#
+# Compile LineBreak.txt into C array declarations.
+#
+# The array's structure is [firstchar, lastchar, class], giving the
+# linebreaking "class" for unicode character range firstchar-lastchar.
+#
+# The ranges are sorted in numerical order.
+#
+# An array gets generated for each block of 4096 unicode characters.
+#
+# Finally, two arrays get declared: a pointer to an array for each 4096
+# unicode character block, and the number of elements in the array.
+#
+# The pointer is NULL for each block of 4096 unicode characters that is not
+# defined in LineBreak.txt
+#
+# By definition, a unicode character that is not listed in the array is
+# class XX.
+
+use strict;
+use warnings;
+use mkcommon;
+
+my %general_category;
+
+open(UC, "<UnicodeData.txt") || die;
+
+while (defined($_=<UC>))
+{
+ chomp;
+
+ my @f=split(/;/);
+
+ my $cp;
+
+ eval "\$cp=0x$f[0]";
+
+ $general_category{$cp}=$f[2];
+}
+
+my $obj=mkcommon->new;
+
+open(F, "<LineBreak.txt") || die;
+
+while (defined($_=<F>))
+{
+ chomp;
+
+ next unless /^([0-9A-F]+)(\.\.([0-9A-F]+))?\;([^\s][^\s])\s*/;
+
+ my $f=$1;
+ my $l=$3;
+ my $t=$4;
+
+ $l=$f unless $l;
+
+ eval "\$f=0x$f";
+ eval "\$l=0x$l";
+
+ next if $t eq "XX";
+
+ if ($t eq "SA")
+ {
+ while ($f <= $l)
+ {
+ die "Cannot find general_category for $f\n"
+ unless exists $general_category{$f};
+
+ $obj->range($f, $f,
+ $general_category{$f} eq "Mn" ||
+ $general_category{$f} eq "Mc" ?
+ "UNICODE_LB_CM":"UNICODE_LB_AL");
+ # LB1 rule
+ ++$f;
+ }
+ }
+ else
+ {
+ $t="AL" if $t eq "AI" || $t eq "SG"; # LB1 rule
+
+ $obj->range($f, $l, "UNICODE_LB_$t");
+ }
+}
+
+$obj->output;
diff --git a/unicode/mkultcase.pl b/unicode/mkultcase.pl
new file mode 100644
index 0000000..805e887
--- /dev/null
+++ b/unicode/mkultcase.pl
@@ -0,0 +1,116 @@
+# Copyright 2000-2004 Double Precision, Inc.
+# See COPYING for distribution information.
+#
+#
+# Generate unicode upper/lower/titlecase translations.
+
+print '/*
+** Copyright 2000-2004 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode.h"
+
+';
+
+my $set=shift;
+
+open (U, "UnicodeData.txt") || die "$!\n";
+
+while (<U>)
+{
+ chomp;
+
+my @fields= split /;/;
+
+my ($code, $uc, $lc, $tc);
+
+ $code="0x$fields[0]";
+ eval "\$code=$code;";
+
+ $uc=$fields[12];
+ if ($uc ne "")
+ {
+ eval "\$uc=0x$uc;";
+ $UC{$code}=$uc;
+ $FLAG{$code}=1;
+ }
+
+ $lc=$fields[13];
+ if ($lc ne "")
+ {
+ eval "\$lc=0x$lc;";
+ $LC{$code}=$lc;
+ $FLAG{$code}=1;
+ }
+
+ $tc=$fields[14];
+ if ($tc ne "")
+ {
+ eval "\$tc=0x$tc;";
+ $TC{$code}=$tc;
+ $FLAG{$code}=1;
+ }
+}
+
+close(U);
+
+my $tabsize=2048;
+
+grep ($bucket[ $_ % $tabsize ] .= "$_\n", keys %FLAG);
+
+my $maxcnt=0;
+
+for ($i=0; $i < $tabsize; $i++)
+{
+ my $cnt=0;
+
+ grep ( ++$cnt, split (/\n/, $bucket[$i]));
+
+ $maxcnt=$cnt if $cnt > $maxcnt;
+}
+
+print "const unsigned unicode_case_hash=$tabsize;\n";
+print "/* unicode_case_maxbucket="
+ . ($maxcnt+2) . "*/\n";
+
+print "const unicode_char unicode_case_tab[][4]={\n";
+
+my $idx=0;
+
+for ($i=0; $i<$tabsize; $i++)
+{
+ $offset[$i]=$idx;
+
+ grep {
+ my $j=$_;
+ my $u=$UC{$j}+0;
+ my $l=$LC{$j}+0;
+ my $t=$TC{$j}+0;
+
+ if ($u || $l || $t)
+ {
+ $u=$j unless $u;
+ $l=$j unless $l;
+ $t=$u unless $t;
+
+ printf("{0x%04x,0x%04x,0x%04x,0x%04x},",$j,$u,$l,$t);
+ print "\n" if ($idx % 4) == 3;
+ ++$idx;
+ }
+ } split(/\n/, $bucket[$i]);
+}
+print "{0,0,0,0}};
+
+const unsigned unicode_case_offset[$tabsize]={
+";
+
+for ($i=0; $i<$tabsize;$i++)
+{
+ printf("%4d", $offset[$i]);
+ print "," if $i < $tabsize-1;
+
+ print "\n" if ($i % 16) == 15;
+}
+print "};\n";
diff --git a/unicode/mkwordbreak.pl b/unicode/mkwordbreak.pl
new file mode 100644
index 0000000..859050f
--- /dev/null
+++ b/unicode/mkwordbreak.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+#
+# Compile WordBreak.txt into C array declarations.
+#
+# The array's structure is [firstchar, lastchar, class], giving the
+# linebreaking "class" for unicode character range firstchar-lastchar.
+#
+# The ranges are sorted in numerical order.
+#
+# An array gets generated for each block of 4096 unicode characters.
+#
+# Finally, two arrays get declared: a pointer to an array for each 4096
+# unicode character block, and the number of elements in the array.
+#
+# The pointer is NULL for each block of 4096 unicode characters that is not
+# defined in WordBreak.txt
+
+use strict;
+use warnings;
+use mkcommon;
+
+my $obj=mkcommon->new;
+
+open(F, "<WordBreakProperty.txt") || die;
+
+my @table;
+
+while (defined($_=<F>))
+{
+ chomp;
+
+ next unless /^([0-9A-F]+)(\.\.([0-9A-F]+))?\s*\;\s*([^\s]+)\s*/;
+
+ my $f=$1;
+ my $l=$3;
+ my $t=$4;
+
+ $l=$f unless $l;
+
+ eval "\$f=0x$f";
+ eval "\$l=0x$l";
+
+ push @table, [$f, $l, $t];
+}
+
+grep {
+
+ $obj->range($$_[0], $$_[1], "UNICODE_WB_$$_[2]");
+
+} sort { $$a[0] <=> $$b[0] } @table;
+
+$obj->output;
diff --git a/unicode/unicode.c b/unicode/unicode.c
new file mode 100644
index 0000000..4ca098b
--- /dev/null
+++ b/unicode/unicode.c
@@ -0,0 +1,1643 @@
+/*
+** Copyright 2000-2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+#include "../rfc822/rfc822hdr.h"
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <iconv.h>
+#include <errno.h>
+#if HAVE_LOCALE_H
+#if HAVE_SETLOCALE
+#include <locale.h>
+#if USE_LIBCHARSET
+#if HAVE_LOCALCHARSET_H
+#include <localcharset.h>
+#elif HAVE_LIBCHARSET_H
+#include <libcharset.h>
+#endif /* HAVE_LOCALCHARSET_H */
+#elif HAVE_LANGINFO_CODESET
+#include <langinfo.h>
+#endif /* USE_LIBCHARSET */
+#endif /* HAVE_SETLOCALE */
+#endif /* HAVE_LOCALE_H */
+
+static char default_chset_buf[32];
+
+static void init_default_chset()
+{
+ const char *old_locale=NULL;
+ const char *chset=NULL;
+ char *locale_cpy=NULL;
+ char buf[sizeof(default_chset_buf)];
+
+ chset=getenv("MM_CHARSET");
+
+ if (chset == NULL)
+ chset=getenv("CHARSET");
+
+ if (chset == NULL)
+ {
+#if HAVE_LOCALE_H
+#if HAVE_SETLOCALE
+ old_locale=setlocale(LC_ALL, "");
+ locale_cpy=old_locale ? strdup(old_locale):NULL;
+#if USE_LIBCHARSET
+ chset = locale_charset();
+#elif HAVE_LANGINFO_CODESET
+ chset=nl_langinfo(CODESET);
+#endif
+#endif
+#endif
+ }
+
+ memset(buf, 0, sizeof(buf));
+
+ if (chset &&
+
+ /* Map GNU libc iconv oddity to us-ascii */
+
+ (strcmp(chset, "ANSI_X3.4") == 0 ||
+ strncmp(chset, "ANSI_X3.4-", 10) == 0))
+ chset="US-ASCII";
+
+ if (chset)
+ {
+ strncat(buf, chset, sizeof(buf)-1);
+ }
+ else
+ {
+ const char *p=getenv("LANG");
+
+ /* LANG is xx_yy.CHARSET@modifier */
+
+ if (p && *p && (p=strchr(p, '.')) != NULL)
+ {
+ const char *q=strchr(++p, '@');
+
+ if (!q)
+ q=p+strlen(p);
+
+ if (q-p >= sizeof(buf)-1)
+ q=p+sizeof(buf)-1;
+
+ memcpy(buf, p, q-p);
+ buf[q-p]=0;
+ }
+ else
+ strcpy(buf, "US-ASCII");
+ }
+
+ memcpy(default_chset_buf, buf, sizeof(buf));
+
+#if HAVE_LOCALE_H
+#if HAVE_SETLOCALE
+ if (locale_cpy)
+ {
+ setlocale(LC_ALL, locale_cpy);
+ free(locale_cpy);
+ }
+#endif
+#endif
+
+}
+
+const char *unicode_default_chset()
+{
+ if (default_chset_buf[0] == 0)
+ init_default_chset();
+
+ return default_chset_buf;
+}
+
+
+/*****************************************************************************/
+
+const char libmail_u_ucs4_native[]=
+#if WORDS_BIGENDIAN
+ "UCS-4BE"
+#else
+ "UCS-4LE"
+#endif
+ ;
+
+const char libmail_u_ucs2_native[]=
+#if WORDS_BIGENDIAN
+ "UCS-2BE"
+#else
+ "UCS-2LE"
+#endif
+ ;
+
+/* A stack of conversion modules */
+
+struct libmail_u_convert_hdr {
+
+ int (*convert_handler)(void *ptr,
+ const char *text, size_t cnt);
+ int (*deinit_handler)(void *ptr, int *errptr);
+ void *ptr;
+
+ struct libmail_u_convert_hdr *next;
+};
+
+/* Decoding table for modified UTF7-encoding as used in imap */
+
+static const char mbase64_lookup[]={
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,63,-1,-1,-1,
+ 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
+ -1,0,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,-1,-1,-1,-1,-1,
+ -1,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,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
+
+static const char mbase64[]=
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
+
+/*
+** Conversion wrapper for converting to modified-utf7 IMAP encoding.
+**
+** This is done by converting to UCS2, then stacking on a module that
+** takes that and converts UCS2 to modified-UTF7.
+**
+** init_nottoimaputf7() returns an opaque stack for converting to ucs2.
+*/
+
+static libmail_u_convert_handle_t
+init_nottoimaputf7(const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg);
+
+/*
+** The to modified UTF7 module
+*/
+
+struct libmail_u_convert_toimaputf7 {
+
+ struct libmail_u_convert_hdr hdr;
+
+ /* Accumulated output buffer */
+
+ char utf7encodebuf[1024];
+ size_t utf7encodebuf_cnt;
+
+ /* Accumulated bits for base64 encoding */
+ uint32_t utf7bits;
+
+ /* How many bits in utf7bits */
+ uint16_t utf7bitcount;
+
+ /* Flag: in base64mode */
+ uint16_t utfmode;
+
+ int errflag;
+
+ /* Any extra characters that should be munged */
+
+ char smapmunge[16];
+
+ /* Remembered output function */
+
+ int (*output_func)(const char *, size_t, void *);
+
+ /* Remembered arg to the output function */
+ void *convert_arg;
+};
+
+/* Macro - flush the output buffer */
+#define toimaputf7_encode_flush(p) do { \
+ int rc; \
+ \
+ rc=(*(p)->output_func)((p)->utf7encodebuf, \
+ (p)->utf7encodebuf_cnt, \
+ (p)->convert_arg); \
+ if (rc) \
+ return ((p)->errflag=(rc)); \
+ \
+ (p)->utf7encodebuf_cnt=0; \
+ } while (0)
+
+static int toimaputf7_encode_flushfinal(struct libmail_u_convert_toimaputf7 *p)
+{
+ if (p->utf7encodebuf_cnt > 0)
+ toimaputf7_encode_flush(p);
+ return 0;
+}
+
+/* Macro - add one char to the output buffer */
+
+#define toimaputf7_encode_add(p,c) do { \
+ if ((p)->utf7encodebuf_cnt >= sizeof((p)->utf7encodebuf)) \
+ toimaputf7_encode_flush((p)); \
+ \
+ (p)->utf7encodebuf[(p)->utf7encodebuf_cnt++]=(c); \
+ } while (0);
+
+static int deinit_toimaputf7(void *ptr, int *errptr);
+
+static int do_convert_toutf7(const char *text, size_t cnt, void *arg);
+static int convert_utf7_handler(void *ptr, const char *text, size_t cnt);
+
+/*
+** Create a conversion module stack
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_init(const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg)
+{
+ struct libmail_u_convert_toimaputf7 *toutf7;
+ libmail_u_convert_handle_t h;
+ const char *smapmunge;
+ size_t l=strlen(unicode_x_imap_modutf7);
+
+ if (strncmp(dst_chset, unicode_x_imap_modutf7, l) == 0 &&
+ (dst_chset[l] == 0 || dst_chset[l] == ' '))
+ {
+ smapmunge=dst_chset + l;
+
+ if (*smapmunge)
+ ++smapmunge;
+ }
+ else
+ return init_nottoimaputf7(src_chset, dst_chset,
+ output_func,
+ convert_arg);
+
+ toutf7=malloc(sizeof(struct libmail_u_convert_toimaputf7));
+
+ if (!toutf7)
+ return NULL;
+
+ memset(toutf7, 0, sizeof(*toutf7));
+
+ h=init_nottoimaputf7(src_chset, libmail_u_ucs2_native,
+ do_convert_toutf7, toutf7);
+ if (!h)
+ {
+ free(toutf7);
+ return (NULL);
+ }
+
+ toutf7->output_func=output_func;
+ toutf7->convert_arg=convert_arg;
+
+ strncat(toutf7->smapmunge, smapmunge, sizeof(toutf7->smapmunge)-1);
+
+ toutf7->hdr.convert_handler=convert_utf7_handler;
+ toutf7->hdr.deinit_handler=deinit_toimaputf7;
+ toutf7->hdr.ptr=toutf7;
+ toutf7->hdr.next=h;
+ return &toutf7->hdr;
+}
+
+/* Passthrough to the wrapped stack */
+
+static int convert_utf7_handler(void *ptr, const char *text, size_t cnt)
+{
+ struct libmail_u_convert_toimaputf7 *toutf7=
+ (struct libmail_u_convert_toimaputf7 *)ptr;
+
+ return (*toutf7->hdr.next->convert_handler)(toutf7->hdr.next->ptr,
+ text, cnt);
+}
+
+static int utf7off(struct libmail_u_convert_toimaputf7 *toutf7)
+{
+ if (!toutf7->utfmode)
+ return 0;
+ toutf7->utfmode=0;
+
+ if (toutf7->utf7bitcount > 0)
+ toimaputf7_encode_add(toutf7,
+ mbase64[(toutf7->utf7bits
+ << (6-toutf7->utf7bitcount))
+ & 63]);
+ toimaputf7_encode_add(toutf7, '-');
+ return 0;
+}
+
+
+static int do_convert_toutf7(const char *text, size_t cnt, void *arg)
+{
+ struct libmail_u_convert_toimaputf7 *toutf7=
+ (struct libmail_u_convert_toimaputf7 *)arg;
+
+ /* We better be getting UCS-2 here! */
+
+ const uint16_t *utext=(const uint16_t *)text;
+ cnt /= 2;
+
+ while (cnt)
+ {
+ if (toutf7->errflag)
+ return toutf7->errflag;
+
+ if (*utext >= 0x20 && *utext <= 0x7F
+ && strchr( toutf7->smapmunge, (char)*utext) == NULL)
+
+ /*
+ && (!toutf7->smapmunge || (*utext != '.' && *utext != '/' &&
+ *utext != '~' && *utext != ':')))
+ */
+ {
+ if (utf7off(toutf7))
+ return toutf7->errflag;
+
+ toimaputf7_encode_add(toutf7, *utext);
+
+ if (*utext == '&')
+ toimaputf7_encode_add(toutf7, '-');
+
+ ++utext;
+ --cnt;
+ continue;
+ }
+
+ if (!toutf7->utfmode)
+ {
+ toutf7->utfmode=1;
+ toutf7->utf7bitcount=0;
+ toimaputf7_encode_add(toutf7, '&');
+ continue;
+ }
+
+ toutf7->utf7bits = (toutf7->utf7bits << 16) |
+ (((uint32_t)*utext) & 0xFFFF);
+ toutf7->utf7bitcount += 16;
+
+ ++utext;
+ --cnt;
+
+ /* If there's at least 6 bits, output base64-encoded char */
+
+ while (toutf7->utf7bitcount >= 6)
+ {
+ uint32_t v;
+ int n;
+
+ if (toutf7->errflag)
+ return toutf7->errflag;
+
+ v=toutf7->utf7bits;
+ n=toutf7->utf7bitcount-6;
+ toutf7->utf7bitcount -= 6;
+
+ if (n > 0)
+ v >>= n;
+
+ toimaputf7_encode_add(toutf7, mbase64[v & 63]);
+ }
+ }
+
+ return 0;
+}
+
+static int deinit_toimaputf7(void *ptr, int *errptr)
+{
+ int rc;
+
+ struct libmail_u_convert_toimaputf7 *toutf7=
+ (struct libmail_u_convert_toimaputf7 *)ptr;
+
+ /* Flush out the downstream stack */
+ rc=(*toutf7->hdr.next->deinit_handler)(toutf7->hdr.next->ptr, errptr);
+
+ /* Make sure we're out of modified base64 */
+
+ if (rc == 0)
+ rc=utf7off(toutf7);
+
+ if (rc == 0 && toutf7->utf7encodebuf_cnt > 0)
+ rc=toimaputf7_encode_flushfinal(toutf7);
+
+ free(toutf7);
+ return rc;
+}
+
+/************/
+
+/*
+** Convert from modified-utf7 IMAP encoding.
+**
+** This module converts it to UCS-2, then this is attached to a stack that
+** converts UCS-2 to the requested charset.
+*/
+
+static libmail_u_convert_handle_t
+init_notfromimaputf7(const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg);
+
+struct libmail_u_convert_fromimaputf7 {
+
+ struct libmail_u_convert_hdr hdr;
+
+ /* Accumulated UCS-2 stream */
+ uint16_t convbuf[512];
+ size_t convbuf_cnt;
+
+ /* Accumulated base64 bits */
+ uint32_t modbits;
+
+ /* How many bits extracted from a base64 stream */
+
+ short modcnt;
+
+ /* Flag: seen the & */
+ char seenamp;
+
+ /* Flag: seen the &, and the next char wasn't - */
+
+ char inmod;
+ int errflag;
+ int converr;
+};
+
+/* Flush the accumulated UCS-2 stream */
+
+#define convert_fromutf7_flush(p) do { \
+ (p)->errflag=(*(p)->hdr.next->convert_handler) \
+ ((p)->hdr.next->ptr, \
+ (const char *)(p)->convbuf, \
+ (p)->convbuf_cnt * \
+ sizeof((p)->convbuf[0])); \
+ (p)->convbuf_cnt=0; \
+ } while (0)
+
+/* Accumulated a UCS-2 char */
+
+#define convert_fromutf7_add(p,c) do { \
+ if ((p)->convbuf_cnt >= \
+ sizeof((p)->convbuf)/sizeof((p)->convbuf[0])) \
+ convert_fromutf7_flush((p)); \
+ (p)->convbuf[(p)->convbuf_cnt++]=(c); \
+ } while (0)
+
+
+static int convert_fromutf7(void *ptr,
+ const char *text, size_t cnt);
+static int deinit_fromutf7(void *ptr, int *errptr);
+
+static libmail_u_convert_handle_t
+init_nottoimaputf7(const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg)
+{
+ struct libmail_u_convert_fromimaputf7 *fromutf7;
+ libmail_u_convert_handle_t h;
+ size_t l=strlen(unicode_x_imap_modutf7);
+
+ if (strncmp(src_chset, unicode_x_imap_modutf7, l) == 0 &&
+ (src_chset[l] == 0 || src_chset[l] == ' '))
+ ;
+ else
+ return init_notfromimaputf7(src_chset, dst_chset,
+ output_func,
+ convert_arg);
+
+ fromutf7=(struct libmail_u_convert_fromimaputf7 *)
+ malloc(sizeof(struct libmail_u_convert_fromimaputf7));
+
+ if (!fromutf7)
+ return NULL;
+
+ memset(fromutf7, 0, sizeof(*fromutf7));
+
+ /* Create a stack for converting UCS-2 to the dest charset */
+
+ h=init_notfromimaputf7(libmail_u_ucs2_native, dst_chset,
+ output_func, convert_arg);
+
+ if (!h)
+ {
+ free(fromutf7);
+ return (NULL);
+ }
+
+ fromutf7->hdr.next=h;
+ fromutf7->hdr.convert_handler=convert_fromutf7;
+ fromutf7->hdr.deinit_handler=deinit_fromutf7;
+ fromutf7->hdr.ptr=fromutf7;
+ return &fromutf7->hdr;
+}
+
+static int convert_fromutf7(void *ptr,
+ const char *text, size_t cnt)
+{
+ struct libmail_u_convert_fromimaputf7 *fromutf7=
+ (struct libmail_u_convert_fromimaputf7 *)ptr;
+ int bits;
+
+ while (cnt)
+ {
+ if (fromutf7->errflag)
+ return fromutf7->errflag;
+
+ if (!fromutf7->seenamp && *text == '&')
+ {
+ fromutf7->seenamp=1;
+ fromutf7->inmod=0;
+ fromutf7->modcnt=0;
+ ++text;
+ --cnt;
+ continue;
+ }
+
+ if (fromutf7->seenamp)
+ {
+ if (*text == '-')
+ {
+ convert_fromutf7_add(fromutf7, '&');
+ ++text;
+ --cnt;
+ fromutf7->seenamp=0;
+ continue;
+ }
+ fromutf7->seenamp=0;
+ fromutf7->inmod=1;
+ }
+
+ if (!fromutf7->inmod)
+ {
+ /* Not in the base64 encoded stream */
+
+ convert_fromutf7_add(fromutf7,
+ ((uint16_t)*text) & 0xFFFF);
+ ++text;
+ --cnt;
+ continue;
+ }
+
+ if (*text == '-')
+ {
+ /* End of the base64 encoded stream */
+ fromutf7->inmod=0;
+ ++text;
+ --cnt;
+ continue;
+ }
+
+ /* Got 6 more bits */
+
+ bits=mbase64_lookup[(unsigned char)*text];
+
+ ++text;
+ --cnt;
+
+ if (bits < 0)
+ {
+ errno=EILSEQ;
+ return fromutf7->errflag=-1;
+ }
+
+ fromutf7->modbits = (fromutf7->modbits << 6) | bits;
+ fromutf7->modcnt += 6;
+
+ if (fromutf7->modcnt >= 16)
+ {
+ /* Got a UCS-2 char */
+
+ int shiftcnt=fromutf7->modcnt - 16;
+ uint32_t v=fromutf7->modbits;
+
+ if (shiftcnt)
+ v >>= shiftcnt;
+
+ fromutf7->modcnt -= 16;
+
+ convert_fromutf7_add(fromutf7, v);
+ }
+ }
+ return 0;
+}
+
+static int deinit_fromutf7(void *ptr, int *errptr)
+{
+ struct libmail_u_convert_fromimaputf7 *fromutf7=
+ (struct libmail_u_convert_fromimaputf7 *)ptr;
+ int rc;
+
+ if (fromutf7->seenamp || fromutf7->inmod)
+ {
+ if (fromutf7->errflag == 0)
+ {
+ fromutf7->errflag= -1;
+ errno=EILSEQ;
+ }
+ }
+
+ if (fromutf7->convbuf_cnt)
+ convert_fromutf7_flush(fromutf7);
+
+ rc=fromutf7->hdr.next->deinit_handler(fromutf7->hdr.next->ptr, errptr);
+
+ if (fromutf7->errflag && rc == 0)
+ rc=fromutf7->errflag;
+
+ if (errptr && fromutf7->converr)
+ *errptr=1;
+
+ free(fromutf7);
+ return rc;
+}
+
+/************/
+
+/* A real conversion module, via iconv */
+
+struct libmail_u_convert_iconv {
+
+ struct libmail_u_convert_hdr hdr;
+
+ iconv_t h;
+ int errflag; /* Accumulated errors */
+
+ int (*output_func)(const char *, size_t, void *);
+ void *convert_arg;
+
+ char buffer[1024]; /* Input buffer */
+ size_t bufcnt; /* Accumulated input in buffer */
+ char skipcnt; /* Skip this many bytes upon encountering EILSEQ */
+ char skipleft; /* How many bytes are currently left to skip */
+ char converr; /* Flag - an EILSEQ was encountered */
+} ;
+
+static int init_iconv(struct libmail_u_convert_iconv *h,
+ const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg);
+
+static libmail_u_convert_handle_t
+init_notfromimaputf7(const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg)
+{
+
+
+ struct libmail_u_convert_iconv *h=
+ malloc(sizeof(struct libmail_u_convert_iconv));
+
+ if (!h)
+ return NULL;
+
+ memset(h, 0, sizeof(*h));
+
+ if (init_iconv(h, src_chset, dst_chset, output_func, convert_arg))
+ {
+ free(h);
+ return NULL;
+ }
+ return &h->hdr;
+}
+
+/* Run the stack */
+
+int libmail_u_convert(libmail_u_convert_handle_t h,
+ const char *text, size_t cnt)
+{
+ return (*h->convert_handler)(h->ptr, text, cnt);
+}
+
+/* Destroy the stack */
+
+int libmail_u_convert_deinit(libmail_u_convert_handle_t h, int *errptr)
+{
+ return (*h->deinit_handler)(h, errptr);
+}
+
+static int deinit_iconv(void *ptr, int *errptr);
+static int convert_iconv(void *ptr,
+ const char *text, size_t cnt);
+
+/* Initialize a single conversion module, in the stack */
+
+static int init_iconv(struct libmail_u_convert_iconv *h,
+ const char *src_chset,
+ const char *dst_chset,
+ int (*output_func)(const char *, size_t, void *),
+ void *convert_arg)
+{
+ if ((h->h=iconv_open(dst_chset, src_chset)) == (iconv_t)-1)
+ return -1;
+
+ h->hdr.convert_handler=convert_iconv;
+ h->hdr.deinit_handler=deinit_iconv;
+ h->hdr.ptr=h;
+
+ h->output_func=output_func;
+ h->convert_arg=convert_arg;
+
+ /* Heuristically determine how many octets to skip upon an EILSEQ */
+
+ h->skipcnt=1;
+ switch (src_chset[0]) {
+ case 'u':
+ case 'U':
+ switch (src_chset[1]) {
+ case 'c':
+ case 'C':
+ switch (src_chset[2]) {
+ case 's':
+ case 'S':
+ if (src_chset[3] == '-')
+ switch (src_chset[4]) {
+ case '4':
+ /* UCS-4 */
+ h->skipcnt=4;
+ break;
+ case '2':
+ /* UCS-2 */
+ h->skipcnt=2;
+ break;
+ }
+ }
+ break;
+ case 't':
+ case 'T':
+ switch (src_chset[2]) {
+ case 'f':
+ case 'F':
+ if (src_chset[3] == '-')
+ switch (src_chset[4]) {
+ case '3':
+ /* UTF-32 */
+ h->skipcnt=4;
+ break;
+ case '1':
+ /* UTF-16 */
+ h->skipcnt=2;
+ break;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+static void convert_flush(struct libmail_u_convert_iconv *);
+static void convert_flush_iconv(struct libmail_u_convert_iconv *, const char **,
+ size_t *);
+
+/*
+** iconv conversion module. Accumulate input in an input buffer. When the
+** input buffer is full, invoke convert_flush().
+*/
+
+static int convert_iconv(void *ptr,
+ const char *text, size_t cnt)
+{
+ struct libmail_u_convert_iconv *h=(struct libmail_u_convert_iconv *)ptr;
+
+ while (cnt && h->errflag == 0)
+ {
+ if (h->bufcnt >= sizeof(h->buffer)-1)
+ {
+ convert_flush(h);
+
+ if (h->errflag)
+ break;
+ }
+
+ h->buffer[h->bufcnt++]= *text++;
+ --cnt;
+ }
+
+ return h->errflag;
+}
+
+/*
+** Finish an iconv conversion module. Invoke convert_flush() to flush any
+** buffered input. Invoke convert_flush_iconv() to return state to the initial
+** conversion state.
+*/
+
+static int deinit_iconv(void *ptr, int *errptr)
+{
+ int rc;
+ int converr;
+ struct libmail_u_convert_iconv *h=(struct libmail_u_convert_iconv *)ptr;
+ libmail_u_convert_handle_t next;
+
+ if (h->errflag == 0)
+ convert_flush(h);
+
+ if (h->bufcnt && h->errflag == 0)
+ h->converr=1;
+
+ if (h->errflag == 0)
+ convert_flush_iconv(h, NULL, NULL);
+
+ rc=h->errflag;
+ converr=h->converr != 0;
+ iconv_close(h->h);
+ next=h->hdr.next;
+ free(h);
+ if (errptr)
+ *errptr=converr;
+
+ /* If there's another module in the stack, clean that up */
+
+ if (next)
+ {
+ int converrnext;
+ int rcnext=libmail_u_convert_deinit(next, &converrnext);
+
+ if (converrnext && errptr && *errptr == 0)
+ *errptr=converr;
+
+ if (rcnext && rc == 0)
+ rc=rcnext;
+ }
+ return rc;
+}
+
+/*
+** Invoke convert_flush_iconv() to flush the input buffer. If there's
+** unconverted text remaining, reposition it at the beginning of the input
+** buffer.
+*/
+
+static void convert_flush(struct libmail_u_convert_iconv *h)
+{
+ const char *p;
+ size_t n;
+
+ if (h->bufcnt == 0 || h->errflag)
+ return;
+
+ p=h->buffer;
+ n=h->bufcnt;
+
+ convert_flush_iconv(h, &p, &n);
+
+ if (h->errflag)
+ return;
+
+ if (h->bufcnt == n)
+ n=0; /* Unexpected error, dunno what to do, punt */
+
+ h->bufcnt=0;
+
+ while (n)
+ {
+ h->buffer[h->bufcnt]= *p;
+
+ ++h->bufcnt;
+ ++p;
+ --n;
+ }
+}
+
+/*
+** Convert text via iconv.
+*/
+
+static void convert_flush_iconv(struct libmail_u_convert_iconv *h,
+ const char **inbuf, size_t *inbytesleft)
+{
+ int save_errno;
+
+ while (1)
+ {
+ char outbuf[1024];
+ char *outp;
+ size_t outleft;
+ size_t n;
+ size_t origin=0;
+
+ if (inbytesleft)
+ {
+ if ((origin=*inbytesleft) == 0)
+ return;
+
+ if (inbuf && h->skipleft && origin)
+ {
+ /* Skipping after an EILSEQ */
+
+ --h->skipleft;
+ --*inbytesleft;
+ ++*inbuf;
+ continue;
+ }
+
+ }
+
+ if (h->errflag)
+ {
+ /* Quietly eat everything after a previous error */
+
+ if (inbytesleft)
+ *inbytesleft=0;
+
+ return;
+ }
+
+ outp=outbuf;
+ outleft=sizeof(outbuf);
+
+ n=iconv(h->h, (char **)inbuf, inbytesleft, &outp, &outleft);
+
+ save_errno=errno;
+
+ /* Anything produced by iconv() gets pushed down the stack */
+
+ if (outp > outbuf)
+ {
+ int rc=(*h->output_func)(outbuf, outp-outbuf,
+ h->convert_arg);
+ if (rc)
+ {
+ h->errflag=rc;
+ return;
+ }
+ }
+
+ if (n != (size_t)-1)
+ {
+ /* iconv(3) reason #2 */
+
+ break;
+ }
+
+ if (inbytesleft == 0)
+ {
+ /*
+ ** An error when generating the shift sequence to
+ ** return to the initial state. We don't know what to
+ ** do, now.
+ */
+
+ errno=EINVAL;
+ h->errflag= -1;
+ return;
+ }
+
+ /*
+ ** convert_flush() gets invoked when the 1024 char input buffer
+ ** fills or to convert input that has been buffered when
+ ** convert_chset_end() gets invoked.
+ **
+ ** A return code of EINVAL from iconv() is iconv() encountering
+ ** an incomplete multibyte sequence.
+ **
+ ** If iconv() failed without consuming any input:
+ **
+ ** - iconv(3) reason #1, EILSEQ, invalid multibyte sequence
+ ** that starts at the beginning of the string we wish to
+ ** convert. Discard one character, and try again.
+ **
+ ** - iconv(3) reason #3, EINVAL, incomplete multibyte sequence.
+ ** If it's possible to have an incomplete 1024 character long
+ ** multibyte sequence, we're in trouble. Or we've encountered
+ ** an EINVAL when flushing out the remaining buffered input,
+ ** in convert_chset_end(). In either case, it's ok to sicard
+ ** one character at a time, until we either reach the end,
+ ** or get some other result.
+ **
+ ** - iconv(3) reason #4, E2BIG. If the 1024 character output
+ ** buffer, above, is insufficient to produce the output from a
+ ** single converted character, we're in trouble.
+ */
+
+ if (*inbytesleft == origin)
+ {
+ h->skipleft=h->skipcnt;
+ h->converr=1;
+ }
+
+ /*
+ ** Stopped at an incomplete multibyte sequence, try again on
+ ** the next round.
+ */
+ else if (save_errno == EINVAL)
+ break;
+
+ if (save_errno == EILSEQ)
+ h->converr=1; /* Another possibility this can happen */
+
+ /*
+ ** If we get here because of iconv(3) reason #4, filled out
+ ** the output buffer, we should continue with the conversion.
+ ** Otherwise, upon encountering any other error condition,
+ ** reset the conversion state.
+ */
+ if (save_errno != E2BIG)
+ iconv(h->h, NULL, NULL, NULL, NULL);
+ }
+}
+
+/*****************************************************************************/
+
+/*
+** A wrapper for libmail_u_convert() that collects the converted character
+** text into a buffer. This is done by passing an output function to
+** libmail_u_convert() that saves converted text in a linked-list
+** of buffers.
+**
+** Then, in the deinitialization function, the buffers get concatenated into
+** the final character buffer.
+*/
+
+struct libmail_u_convert_cbuf {
+ struct libmail_u_convert_cbuf *next;
+ char *fragment;
+ size_t fragment_size;
+};
+
+struct libmail_u_convert_tocbuf {
+ struct libmail_u_convert_hdr hdr;
+
+ char **cbufptr_ret;
+ size_t *cbufsize_ret;
+ int errflag;
+ size_t tot_size;
+ int nullterminate;
+
+ struct libmail_u_convert_cbuf *first, **last;
+};
+
+static int save_tocbuf(const char *, size_t, void *);
+static int convert_tocbuf(void *ptr,
+ const char *text, size_t cnt);
+static int deinit_tocbuf(void *ptr, int *errptr);
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_init(const char *src_chset,
+ const char *dst_chset,
+ char **cbufptr_ret,
+ size_t *cbufsize_ret,
+ int nullterminate
+ )
+{
+ struct libmail_u_convert_tocbuf *p=
+ malloc(sizeof(struct libmail_u_convert_tocbuf));
+ libmail_u_convert_handle_t h;
+
+ if (!p)
+ return NULL;
+
+ memset(p, 0, sizeof(*p));
+
+ h=libmail_u_convert_init(src_chset, dst_chset, save_tocbuf, p);
+
+ if (!h)
+ {
+ free(p);
+ return NULL;
+ }
+
+ p->cbufptr_ret=cbufptr_ret;
+ p->cbufsize_ret=cbufsize_ret;
+ p->last= &p->first;
+ p->nullterminate=nullterminate;
+ p->hdr.next=h;
+ p->hdr.convert_handler=convert_tocbuf;
+ p->hdr.deinit_handler=deinit_tocbuf;
+ p->hdr.ptr=p;
+ return &p->hdr;
+}
+
+/* Capture the output of the conversion stack */
+
+static int save_tocbuf(const char *text, size_t cnt, void *ptr)
+{
+ struct libmail_u_convert_tocbuf *p=
+ (struct libmail_u_convert_tocbuf *)ptr;
+ struct libmail_u_convert_cbuf *fragment=
+ malloc(sizeof(struct libmail_u_convert_cbuf)+cnt);
+ size_t tot_size;
+
+ if (!fragment)
+ {
+ p->errflag=1;
+ return 1;
+ }
+
+ fragment->next=NULL;
+ fragment->fragment=(char *)(fragment+1);
+ if ((fragment->fragment_size=cnt) > 0)
+ memcpy(fragment->fragment, text, cnt);
+
+ *(p->last)=fragment;
+ p->last=&fragment->next;
+
+ tot_size=p->tot_size + cnt; /* Keep track of the total size saved */
+
+ if (tot_size < p->tot_size) /* Overflow? */
+ {
+ errno=E2BIG;
+ return 1;
+ }
+ p->tot_size=tot_size;
+ return 0;
+}
+
+/* Punt converted text down the stack */
+
+static int convert_tocbuf(void *ptr, const char *text, size_t cnt)
+{
+ struct libmail_u_convert_tocbuf *p=
+ (struct libmail_u_convert_tocbuf *)ptr;
+
+ return libmail_u_convert(p->hdr.next, text, cnt);
+}
+
+/*
+** Destroy the conversion stack. Destroy the downstream, then assemble the
+** final array.
+*/
+
+static int deinit_tocbuf(void *ptr, int *errptr)
+{
+ struct libmail_u_convert_tocbuf *p=
+ (struct libmail_u_convert_tocbuf *)ptr;
+ int rc=libmail_u_convert_deinit(p->hdr.next, errptr);
+ struct libmail_u_convert_cbuf *bufptr;
+
+ if (rc == 0 && p->nullterminate)
+ {
+ char zero=0;
+
+ rc=save_tocbuf( &zero, sizeof(zero), p->hdr.ptr);
+ }
+
+ if (rc == 0)
+ {
+ if (((*p->cbufptr_ret)=malloc(p->tot_size ? p->tot_size:1)) !=
+ NULL)
+ {
+ size_t i=0;
+
+ for (bufptr=p->first; bufptr; bufptr=bufptr->next)
+ {
+ if (bufptr->fragment_size)
+ memcpy(&(*p->cbufptr_ret)[i],
+ bufptr->fragment,
+ bufptr->fragment_size);
+ i += bufptr->fragment_size;
+ }
+ (*p->cbufsize_ret)=i;
+ }
+ else
+ {
+ rc= -1;
+ }
+ }
+
+ for (bufptr=p->first; bufptr; )
+ {
+ struct libmail_u_convert_cbuf *b=bufptr;
+
+ bufptr=bufptr->next;
+
+ free(b);
+ }
+ free(p);
+
+ return rc;
+}
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_toutf8_init(const char *src_chset,
+ char **cbufptr_ret,
+ size_t *cbufsize_ret,
+ int nullterminate
+ )
+{
+ return libmail_u_convert_tocbuf_init(src_chset, "utf-8",
+ cbufptr_ret, cbufsize_ret,
+ nullterminate);
+}
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_fromutf8_init(const char *dst_chset,
+ char **cbufptr_ret,
+ size_t *cbufsize_ret,
+ int nullterminate
+ )
+{
+ return libmail_u_convert_tocbuf_init("utf-8", dst_chset,
+ cbufptr_ret, cbufsize_ret,
+ nullterminate);
+}
+
+char *libmail_u_convert_toutf8(const char *text,
+ const char *charset,
+ int *error)
+{
+ char *cbufptr;
+ size_t cbufsize;
+ libmail_u_convert_handle_t h=
+ libmail_u_convert_tocbuf_toutf8_init(charset,
+ &cbufptr,
+ &cbufsize, 1);
+
+ if (!h)
+ return NULL;
+
+ libmail_u_convert(h, text, strlen(text));
+
+ if (libmail_u_convert_deinit(h, error) == 0)
+ return cbufptr;
+
+ return NULL;
+}
+
+char *libmail_u_convert_fromutf8(const char *text,
+ const char *charset,
+ int *error)
+{
+ char *cbufptr;
+ size_t cbufsize;
+ libmail_u_convert_handle_t h=
+ libmail_u_convert_tocbuf_fromutf8_init(charset,
+ &cbufptr,
+ &cbufsize, 1);
+
+ if (!h)
+ return NULL;
+
+ libmail_u_convert(h, text, strlen(text));
+
+ if (libmail_u_convert_deinit(h, error) == 0)
+ return cbufptr;
+
+ return NULL;
+}
+
+char *libmail_u_convert_tobuf(const char *text,
+ const char *charset,
+ const char *dstcharset,
+ int *error)
+{
+ char *cbufptr;
+ size_t cbufsize;
+ libmail_u_convert_handle_t h=
+ libmail_u_convert_tocbuf_init(charset,
+ dstcharset,
+ &cbufptr,
+ &cbufsize, 1);
+
+ if (!h)
+ return NULL;
+
+ libmail_u_convert(h, text, strlen(text));
+
+ if (libmail_u_convert_deinit(h, error) == 0)
+ return cbufptr;
+
+ return NULL;
+}
+
+/*****************************************************************************/
+
+/*
+** Convert text to unicode_chars. Same basic approach as
+** libmail_u_convert_tocbuf_init(). The output character set gets specified
+** as UCS-4, the final output size is divided by 4, and the output buffer gets
+** typed as a unicode_char array.
+*/
+
+struct libmail_u_convert_buf {
+ struct libmail_u_convert_buf *next;
+ unicode_char *fragment;
+ size_t fragment_size;
+ size_t max_fragment_size;
+};
+
+struct libmail_u_convert_tou {
+ struct libmail_u_convert_hdr hdr;
+
+ unicode_char **ucptr_ret;
+ size_t *ucsize_ret;
+ int errflag;
+ size_t tot_size;
+ int nullterminate;
+
+ struct libmail_u_convert_buf *first, *tail, **last;
+};
+
+static int save_unicode(const char *, size_t, void *);
+static int convert_tounicode(void *ptr,
+ const char *text, size_t cnt);
+static int deinit_tounicode(void *ptr, int *errptr);
+
+libmail_u_convert_handle_t
+libmail_u_convert_tou_init(const char *src_chset,
+ unicode_char **ucptr_ret,
+ size_t *ucsize_ret,
+ int nullterminate
+ )
+{
+ struct libmail_u_convert_tou *p=
+ malloc(sizeof(struct libmail_u_convert_tou));
+ libmail_u_convert_handle_t h;
+
+ if (!p)
+ return NULL;
+
+ memset(p, 0, sizeof(*p));
+
+ h=libmail_u_convert_init(src_chset, libmail_u_ucs4_native,
+ save_unicode, p);
+
+ if (!h)
+ {
+ free(p);
+ return NULL;
+ }
+
+ p->ucptr_ret=ucptr_ret;
+ p->ucsize_ret=ucsize_ret;
+ p->last= &p->first;
+ p->nullterminate=nullterminate;
+ p->hdr.next=h;
+ p->hdr.convert_handler=convert_tounicode;
+ p->hdr.deinit_handler=deinit_tounicode;
+ p->hdr.ptr=p;
+ return &p->hdr;
+}
+
+libmail_u_convert_handle_t
+libmail_u_convert_fromu_init(const char *dst_chset,
+ char **cbufptr_ret,
+ size_t *csize_ret,
+ int nullterminate
+ )
+{
+ return libmail_u_convert_tocbuf_init(libmail_u_ucs4_native,
+ dst_chset,
+ cbufptr_ret,
+ csize_ret,
+ nullterminate);
+}
+
+int libmail_u_convert_uc(libmail_u_convert_handle_t handle,
+ const unicode_char *text,
+ size_t cnt)
+{
+ return libmail_u_convert(handle, (const char *)text,
+ cnt * sizeof(*text));
+}
+
+/* Capture the output of the conversion stack */
+
+static int save_unicode(const char *text, size_t cnt, void *ptr)
+{
+ struct libmail_u_convert_tou *p=
+ (struct libmail_u_convert_tou *)ptr;
+ struct libmail_u_convert_buf *fragment;
+ size_t tot_size;
+
+ cnt /= sizeof(unicode_char);
+
+ tot_size=p->tot_size + cnt*sizeof(unicode_char);
+ /* Keep track of the total size saved */
+
+ if (p->tail)
+ {
+ size_t n=p->tail->max_fragment_size-p->tail->fragment_size;
+
+ if (n > cnt)
+ n=cnt;
+
+ if (n)
+ {
+ memcpy(p->tail->fragment+p->tail->fragment_size,
+ text, n*sizeof(unicode_char));
+
+ cnt -= n;
+ text += n*sizeof(unicode_char);
+ p->tail->fragment_size += n;
+ }
+ }
+
+ if (cnt > 0)
+ {
+ size_t cnt_alloc=cnt;
+
+ if (cnt_alloc < 16)
+ cnt_alloc=16;
+
+ if ((fragment=malloc(sizeof(struct libmail_u_convert_buf)
+ +cnt_alloc*sizeof(unicode_char)))
+ == NULL)
+ {
+ p->errflag=1;
+ return 1;
+ }
+
+ fragment->next=NULL;
+ fragment->fragment=(unicode_char *)(fragment+1);
+ fragment->max_fragment_size=cnt_alloc;
+ fragment->fragment_size=cnt;
+ memcpy(fragment->fragment, text, cnt*sizeof(unicode_char));
+
+ *(p->last)=fragment;
+ p->last=&fragment->next;
+ p->tail=fragment;
+ }
+
+ if (tot_size < p->tot_size) /* Overflow? */
+ {
+ errno=E2BIG;
+ return 1;
+ }
+ p->tot_size=tot_size;
+ return 0;
+}
+
+/* Punt converted text down the stack */
+
+static int convert_tounicode(void *ptr,
+ const char *text, size_t cnt)
+{
+ struct libmail_u_convert_tou *p=
+ (struct libmail_u_convert_tou *)ptr;
+
+ return libmail_u_convert(p->hdr.next, text, cnt);
+}
+
+/*
+** Destroy the conversion stack. Destroy the downstream, then assemble the
+** final array.
+*/
+
+static int deinit_tounicode(void *ptr, int *errptr)
+{
+ struct libmail_u_convert_tou *p=
+ (struct libmail_u_convert_tou *)ptr;
+ int rc=libmail_u_convert_deinit(p->hdr.next, errptr);
+ struct libmail_u_convert_buf *bufptr;
+
+ if (rc == 0 && p->nullterminate)
+ {
+ unicode_char zero=0;
+
+ rc=save_unicode( (const char *)&zero, sizeof(zero),
+ p->hdr.ptr);
+ }
+
+ if (rc == 0)
+ {
+ if (((*p->ucptr_ret)=malloc(p->tot_size ? p->tot_size:1)) !=
+ NULL)
+ {
+ size_t i=0;
+
+ for (bufptr=p->first; bufptr; bufptr=bufptr->next)
+ {
+ if (bufptr->fragment_size)
+ memcpy(&(*p->ucptr_ret)[i],
+ bufptr->fragment,
+ bufptr->fragment_size
+ *sizeof(*bufptr->fragment));
+ i += bufptr->fragment_size;
+ }
+ (*p->ucsize_ret)=i;
+ }
+ else
+ {
+ rc= -1;
+ }
+ }
+
+ for (bufptr=p->first; bufptr; )
+ {
+ struct libmail_u_convert_buf *b=bufptr;
+
+ bufptr=bufptr->next;
+
+ free(b);
+ }
+ free(p);
+
+ return rc;
+}
+
+int libmail_u_convert_tou_tobuf(const char *text,
+ size_t text_l,
+ const char *charset,
+ unicode_char **uc,
+ size_t *ucsize,
+ int *err)
+{
+ libmail_u_convert_handle_t h;
+
+ if ((h=libmail_u_convert_tou_init(charset, uc, ucsize, 0)) == NULL)
+ return -1;
+
+ if (libmail_u_convert(h, text, text_l) < 0)
+ {
+ libmail_u_convert_deinit(h, NULL);
+ return -1;
+ }
+
+ if (libmail_u_convert_deinit(h, err))
+ return -1;
+
+ return 0;
+}
+
+int libmail_u_convert_fromu_tobuf(const unicode_char *utext,
+ size_t utext_l,
+ const char *charset,
+ char **c,
+ size_t *csize,
+ int *err)
+{
+ libmail_u_convert_handle_t h;
+
+ if (utext_l == (size_t)-1)
+ {
+ for (utext_l=0; utext[utext_l]; ++utext_l)
+ ;
+ }
+
+ if ((h=libmail_u_convert_fromu_init(charset, c, csize, 1)) == NULL)
+ return -1;
+
+ if (libmail_u_convert_uc(h, utext, utext_l) < 0)
+ {
+ libmail_u_convert_deinit(h, NULL);
+ return -1;
+ }
+
+ if (libmail_u_convert_deinit(h, err))
+ return -1;
+
+ return 0;
+}
+
+char *libmail_u_convert_tocase(const char *str,
+ const char *charset,
+ unicode_char (*first_char_func)(unicode_char),
+ unicode_char (*char_func)(unicode_char))
+{
+ unicode_char *uc;
+ size_t ucsize;
+ size_t i;
+ int err;
+ char *c;
+ size_t csize;
+
+ if (libmail_u_convert_tou_tobuf(str, strlen(str),
+ charset, &uc, &ucsize, &err))
+ return NULL;
+
+ if (err)
+ {
+ free(uc);
+ return NULL;
+ }
+
+ for (i=0; i<ucsize; ++i)
+ {
+ uc[i]=(*first_char_func)(uc[i]);
+
+ if (char_func)
+ first_char_func=char_func;
+ }
+
+ if (libmail_u_convert_fromu_tobuf(uc, ucsize,
+ charset,
+ &c, &csize, &err))
+ {
+ free(uc);
+ return NULL;
+ }
+
+ free(uc);
+
+ if (err)
+ {
+ free(c);
+ return NULL;
+ }
+
+ return c;
+}
diff --git a/unicode/unicode.h b/unicode/unicode.h
new file mode 100644
index 0000000..4e018b7
--- /dev/null
+++ b/unicode/unicode.h
@@ -0,0 +1,1692 @@
+#ifndef unicode_h
+#define unicode_h
+
+/*
+** Copyright 2000-2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#ifdef __cplusplus
+
+#include <string>
+#include <vector>
+#include <list>
+
+extern "C" {
+#endif
+
+#if 0
+}
+#endif
+
+#include "unicode/unicode_config.h"
+
+#include <stdlib.h>
+
+#include <stdio.h>
+#if HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#if HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+#include <stdint.h>
+
+#include <sys/types.h>
+
+typedef uint32_t unicode_char;
+
+/*
+** The system default character set, from the locale.
+*/
+
+extern const char *unicode_default_chset();
+
+/* Unicode upper/lower/title case conversion functions */
+
+extern unicode_char unicode_uc(unicode_char);
+extern unicode_char unicode_lc(unicode_char);
+extern unicode_char unicode_tc(unicode_char);
+
+/*
+** Look up HTML 4.0/XHTML entity.
+**
+** n="amp", etc...
+**
+** Returns the unicode entity value, or 0 if no such entity is defined.
+*/
+
+unicode_char unicode_html40ent_lookup(const char *n);
+
+/*
+**
+** Return "width" of unicode character.
+**
+** This is defined as follows: for characters having the F or W property in
+** tr11 (EastAsianWidth), unicode_wcwidth() returns 2.
+**
+** Otherwise, characters having the BK, CR, LF, CM, NL, WJ, and ZW line
+** breaking property as per tr14, unicode_wcwdith() returns 0. For all other
+** cases, 1.
+**
+** This provides a rough estimate of the "width" of the character if its
+** shown on a text console.
+*/
+
+extern int unicode_wcwidth(unicode_char c);
+extern size_t unicode_wcwidth_str(const unicode_char *c);
+
+/*
+** The unicode-ish isspace()
+*/
+extern int unicode_isspace(unicode_char ch);
+
+/* Internal unicode table lookup function */
+
+extern uint8_t unicode_tab_lookup(unicode_char ch,
+ const size_t *unicode_indextab,
+ size_t unicode_indextab_sizeof,
+ const uint8_t (*unicode_rangetab)[2],
+ const uint8_t *unicode_classtab,
+ uint8_t uclass);
+
+/*
+** Implementation of grapheme cluster boundary rules, as per tr29,
+** including GB9a and GB9b.
+**
+** Returns non-zero if there's a grapheme break between the two referenced
+** characters.
+*/
+
+int unicode_grapheme_break(unicode_char a, unicode_char b);
+
+/*
+** Implementation of line break rules, as per tr14.
+**
+** Invoke unicode_lb_init() to initialize the linebreaking algorithm. The
+** first parameter is a callback function that gets invoked with two
+** arguments: UNICODE_LB_{MANDATORY|NONE|ALLOWED}, and a passthrough argument.
+** The second parameter to unicode_lb_init() is the opaque passthrough
+** pointer, that is passed as the second argument to the callback function
+** with no further interpretation.
+**
+** unicode_lb_init() returns an opaque handle. Invoke unicode_lb_next(),
+** passing the handle and one unicode character. Repeatedly invoke
+** unicode_lb_next() to specify the input string for the linebreaking
+** algorithm, then invoke unicode_lb_end() to finish calculating the
+** linebreaking algorithm, and deallocate the opaque linebreaking handle.
+**
+** The callback function gets invoked once for each invocation of
+** unicode_lb_next(). The contract is that before unicode_lb_end() returns,
+** the callback function will get invoked the exact number of times that
+** unicode_lb_next(), as long as each invocation of the callback function
+** returned 0; nothing more, nothing less. The first parameter to the callback
+** function will be one of the following values:
+**
+** UNICODE_LB_MANDATORY - a linebreak is MANDATORY before the corresponding
+** character.
+** UNICODE_LB_NONE - a linebreak is PROHIBITED before the corresponding
+** character.
+** UNICODE_LB_ALLOWED - a linebreak is OPTIONAL before the corresponding
+** character (the preceding character is a space, or an equivalent).
+**
+** The callback function should return 0. A non-zero value indicates an
+** error, which gets propagated up to the caller. The contract that the
+** callback function gets invoked the same number of times that
+** unicode_lb_next() gets invoked is now broken.
+*/
+
+#define UNICODE_LB_MANDATORY -1
+#define UNICODE_LB_NONE 0
+#define UNICODE_LB_ALLOWED 1
+
+struct unicode_lb_info;
+
+typedef struct unicode_lb_info *unicode_lb_info_t;
+
+/*
+** Allocate a linebreaking handle.
+*/
+extern unicode_lb_info_t unicode_lb_init(int (*cb_func)(int, void *),
+ void *cb_arg);
+
+/*
+** Feed the next character through the linebreaking algorithm.
+** A non-zero return code indicates that the callback function was invoked
+** and it returned a non-zero return code (which is propagated as a return
+** value). unicode_lb_end() must still be invoked, in this case.
+**
+** A zero return code indicates that if the callback function was invoked,
+** it returned 0.
+*/
+
+extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch);
+
+/*
+** Convenience function that invokes unicode_lb_next() with a list of
+** unicode chars. Returns 0 if all invocations of unicode_lb_next() returned
+** 0, or the first non-zero return value from unicode_lb_next().
+*/
+
+extern int unicode_lb_next_cnt(unicode_lb_info_t i,
+ const unicode_char *chars,
+ size_t cnt);
+
+/*
+** Finish the linebreaking algorithm.
+**
+** A non-zero return code indicates that the callback function was invoked
+** and it returned a non-zero return code (which is propagated as a return
+** value).
+**
+** A zero return code indicates that if the callback function was invoked,
+** it returned 0, and that the callback function was invoked exactly the same
+** number of times that unicode_lb_next() was invoked.
+**
+** In all case, the linebreak handle will no longer be valid when this
+** function returns.
+*/
+
+extern int unicode_lb_end(unicode_lb_info_t i);
+
+/*
+** An alternative linebreak API where the callback function receives the
+** original unicode character in addition to its linebreak value.
+**
+** User unicode_lbc_init(), unicode_lbc_next(), and unicode_lbc_end(), whose
+** semantics are the same as their _lb_ counterparts.
+*/
+
+struct unicode_lbc_info;
+
+typedef struct unicode_lbc_info *unicode_lbc_info_t;
+
+extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char,
+ void *),
+ void *cb_arg);
+extern int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch);
+extern int unicode_lbc_end(unicode_lbc_info_t i);
+
+/*
+** Set linebreaking options.
+**
+** OPTIONS SUBJECT TO CHANGE.
+*/
+
+extern void unicode_lb_set_opts(unicode_lb_info_t i, int opts);
+
+extern void unicode_lbc_set_opts(unicode_lbc_info_t i, int opts);
+
+/*
+** Tailorization of LB24: Prevent pluses, as in "C++", from breaking.
+**
+** Adds the following to LB24:
+**
+** PR x PR
+**
+** AL x PR
+**
+** ID x PR
+**/
+#define UNICODE_LB_OPT_PRBREAK 0x0001
+
+
+/*
+** Tailored / breaking rules.
+**
+** Adds the following rule to LB13:
+**
+** SY x EX
+**
+** SY x AL
+**
+** SY x ID
+**
+** SP ÷ SY, which takes precedence over "x SY".
+*/
+#define UNICODE_LB_OPT_SYBREAK 0x0002
+
+/*
+** Tailored / breaking rules.
+**
+** This reclassifies U+2013 and U+2014 as class WJ, prohibiting breaks before
+** and after mdash and ndash.
+*/
+#define UNICODE_LB_OPT_DASHWJ 0x0004
+
+/*
+** Implemention of word break rules, as per tr29.
+**
+** Invoke unicode_wb_init() to initialize the wordbreaking algorithm. The
+** first parameter is a callback function that gets invoked with two
+** arguments: an int flag, and a passthrough argument. The second parameter to
+** unicode_wb_init() is the opaque passthrough pointer, that is passed as the
+** second argument to the callback function with no further interpretation.
+**
+** unicode_wb_init() returns an opaque handle. Invoke unicode_wb_next(),
+** passing the handle and one unicode character. Repeatedly invoke
+** unicode_wb_next() to specify the input string for the wordbreaking
+** algorithm, then invoke unicode_wb_end() to finish calculating the
+** wordbreaking algorithm, and deallocate the opaque wordbreaking handle.
+**
+** The callback function gets invoked once for each invocation of
+** unicode_wb_next(). The contract is that before unicode_wb_end() returns,
+** the callback function will get invoked the exact number of times that
+** unicode_wb_next(), as long as each invocation of the callback function
+** returned 0; nothing more, nothing less. The first parameter to the callback
+** function will be an int. A non-zero value indicates that there is a word
+** break between this character and the preceding one.
+**
+** The callback function should return 0. A non-zero value indicates an
+** error, which gets propagated up to the caller. The contract that the
+** callback function gets invoked the same number of times that
+** unicode_lb_next() gets invoked is now broken.
+*/
+
+struct unicode_wb_info;
+
+typedef struct unicode_wb_info *unicode_wb_info_t;
+
+/*
+** Allocate a wordbreaking handle.
+*/
+extern unicode_wb_info_t unicode_wb_init(int (*cb_func)(int, void *),
+ void *cb_arg);
+
+/*
+** Feed the next character through the wordbreaking algorithm.
+** A non-zero return code indicates that the callback function was invoked
+** and it returned a non-zero return code (which is propagated as a return
+** value). unicode_wb_end() must still be invoked, in this case.
+**
+** A zero return code indicates that if the callback function was invoked,
+** it returned 0.
+*/
+
+extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch);
+
+/*
+** Convenience function that invokes unicode_wb_next() with a list of
+** unicode chars. Returns 0 if all invocations of unicode_wb_next() returned
+** 0, or the first non-zero return value from unicode_wb_next().
+*/
+
+extern int unicode_wb_next_cnt(unicode_wb_info_t i,
+ const unicode_char *chars,
+ size_t cnt);
+
+/*
+** Finish the wordbreaking algorithm.
+**
+** A non-zero return code indicates that the callback function was invoked
+** and it returned a non-zero return code (which is propagated as a return
+** value).
+**
+** A zero return code indicates that if the callback function was invoked,
+** it returned 0, and that the callback function was invoked exactly the same
+** number of times that unicode_wb_next() was invoked.
+**
+** In all case, the wordbreak handle will no longer be valid when this
+** function returns.
+*/
+
+extern int unicode_wb_end(unicode_wb_info_t i);
+
+/*
+** Search for a word boundary.
+**
+** Obtain a handle by calling unicode_wbscan_init(), then invoke
+** unicode_wbscan_next() to provide a unicode stream, then invoke
+** unicode_wbscan_end(). unicode_wbscan_end() returns the number of unicode
+** characters from the beginning of the stream until the first word boundary.
+**
+** You may prematurely stop calling unicode_wbscan_next() once it returns a
+** non-0 value, which means that there is sufficient context to compute the
+** first word boundary, and all further calls to unicode_wbscan_next() will
+** be internal no-ops.
+*/
+
+struct unicode_wbscan_info;
+
+typedef struct unicode_wbscan_info *unicode_wbscan_info_t;
+
+unicode_wbscan_info_t unicode_wbscan_init();
+
+int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch);
+
+size_t unicode_wbscan_end(unicode_wbscan_info_t i);
+
+/*
+** A buffer that holds unicode characters, and dynamically grows as needed.
+*/
+
+struct unicode_buf {
+ unicode_char *ptr; /* The unicode characters */
+ size_t size, /* Buffer size */
+ len, /* How many characters in ptr are initialized */
+ max; /* Maximum size the buffer can grow to */
+};
+
+/*
+** Initialize a buffer. Constructor.
+*/
+
+void unicode_buf_init(/* Initialize this structure. ptr, size, len cleared */
+ struct unicode_buf *p,
+
+ /*
+ ** Maximum size the buffer can grow to. (size_t)-1
+ ** means unlimited.
+ */
+ size_t max);
+/*
+** Like unicode_buf_init, and initialize the new buffer with the contents of
+** another buffer. The maximum size of the initialized buffer is exactly the
+** number of characters in the existing buffer. This copies a buffer using
+** the minimum amount of heap space.
+*/
+
+#define unicode_buf_init_copy(a,b) \
+ do { \
+ unicode_buf_init((a), unicode_buf_len(b)); \
+ unicode_buf_append_buf((a),(b)); \
+ } while (0)
+
+/*
+** Deinitialize the buffer. Destructor. Frees memory.
+*/
+
+void unicode_buf_deinit(struct unicode_buf *p);
+
+/*
+** Official way to access the characters in the unicode buffer.
+*/
+#define unicode_buf_ptr(p) ((p)->ptr)
+
+/*
+** Official way of obtaining the number of characters in the unicode buffer.
+*/
+#define unicode_buf_len(p) ((p)->len)
+
+/*
+** Remove all existing characters from an initialized buffer. Sets len to 0.
+*/
+
+#define unicode_buf_clear(p) ((p)->len=0)
+
+/*
+** Append characters to the existing characters in the unicode buffer.
+** The buffer grows, if needed. If the buffer would exceed its maximum size,
+** the extra characters get truncated.
+**
+** Returns 0 if the characters were appended. -1 for a malloc failure.
+*/
+
+int unicode_buf_append(struct unicode_buf *p, /* The buffer */
+ const unicode_char *uc, /* Characters to append */
+ size_t l); /* How many of them */
+
+/*
+** Convert an iso-8859-1 char string and invoke unicode_buf_append().
+*/
+
+void unicode_buf_append_char(struct unicode_buf *dst,
+ const char *str,
+ size_t cnt);
+
+/*
+** Remove some portion of the unicode buffer
+*/
+
+void unicode_buf_remove(struct unicode_buf *p, /* The buffer */
+ size_t pos, /* Offset in buffer */
+ size_t cnt); /* How many to remove */
+
+/*
+** Append the contents of an existing buffer to another one.
+*/
+
+#define unicode_buf_append_buf(a,b) \
+ unicode_buf_append((a), unicode_buf_ptr(b), unicode_buf_len(b))
+
+
+/*
+** The equivalent of strcmp() for unicode buffers.
+*/
+
+int unicode_buf_cmp(const struct unicode_buf *a,
+ const struct unicode_buf *b);
+
+/*
+** The equivalent of unicode_buf_cmp, except that the second buffer is an
+** iso-8859-1 string.
+*/
+
+int unicode_buf_cmp_str(const struct unicode_buf *p,
+ const char *c, /* iso-8859-1 string */
+ size_t cl); /* Number of chars in c */
+
+/*
+** A wrapper for iconv(3). This wrapper provides a different API for iconv(3).
+** A handle gets created by libmail_u_convert_init().
+** libmail_u_convert_init() receives a pointer to the output function
+** which receives converted character text.
+**
+** The output function receives a pointer to the converted character text, and
+** the number of characters in the converted text.
+**
+** The character text to convert gets passed, repeatedly, to
+** libmail_u_convert(). Each call to libmail_u_convert() results in
+** the output function being invoked, zero or more times, with the converted
+** text. Finally, libmail_u_convert_deinit() stops the conversion and
+** deallocates the conversion handle.
+**
+** Internal buffering takes place. libmail_u_convert_deinit() may result
+** in the output function being called one or more times, to receive the final
+** part of the converted character stream.
+**
+** The output function should return 0. A non-0 value causes
+** libmail_u_convert() and/or libmail_u_convert_deinit() returning
+** non-0.
+*/
+
+struct libmail_u_convert_hdr;
+
+typedef struct libmail_u_convert_hdr *libmail_u_convert_handle_t;
+
+/*
+** libmail_u_convert_init() returns a non-NULL handle for the requested
+** conversion, or NULL if the requested conversion is not available.
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_init(/* Convert from this chset */
+ const char *src_chset,
+
+ /* Convert to this chset */
+ const char *dst_chset,
+
+ /* The output function */
+
+ int (*output_func)(const char *, size_t, void *),
+
+ /* Passthrough arg */
+ void *convert_arg);
+
+/*
+** Repeatedly pass the character text to convert to libmail_u_convert().
+**
+** Returns non-0 if the output function returned non-0, or 0 if all invocations
+** of the output function returned 0.
+*/
+
+int libmail_u_convert(/* The conversion handle */
+ libmail_u_convert_handle_t handle,
+
+ /* Text to convert */
+ const char *text,
+
+ /* Number of bytes to convert */
+ size_t cnt);
+
+/*
+** Finish character set conversion. The handle gets deallocated.
+**
+** May still result in one or more invocations of the output function.
+** Returns non-zero if any previous invocation of the output function returned
+** non-zero (this includes any invocations of the output function resulting
+** from this call, or prior libmail_u_convert() calls), or 0 if all
+** invocations of the output function returned 0.
+**
+** If the errptr is not NULL, *errptr is set to non-zero if there were any
+** conversion errors -- if there was any text that could not be converted to
+** the destination character text.
+*/
+
+int libmail_u_convert_deinit(libmail_u_convert_handle_t handle,
+ int *errptr);
+
+
+/*
+** Specialization: save converted character text in a buffer.
+**
+** Implementation: call libmail_u_convert_tocbuf_init() instead of
+** libmail_u_convert_init(), then call libmail_u_convert() and
+** libmail_u_convert_deinit(), as usual.
+**
+** If libmail_u_convert_deinit() returns 0, *cbufptr_ret gets initialized to a
+** malloc()ed buffer, and the number of converted characters, the size of the
+** malloc()ed buffer, are placed into *csize_ret arguments, that were passed
+** to libmail_u_convert_tou_init().
+**
+** Note: if the converted string is an empty string, *cbufsize_ret is set to 0,
+** but *cbufptr_ptr still gets initialized (to a dummy malloced buffer).
+**
+** The optional nullterminate places a trailing \0 character after the
+** converted string (this is included in *cbufsize_ret).
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_init(/* Convert from this chset */
+ const char *src_chset,
+
+ /* Convert to this chset */
+ const char *dst_chset,
+
+ /* malloced buffer */
+ char **cbufptr_ret,
+
+ /* size of the malloced buffer */
+ size_t *cbufsize_ret,
+
+ /* null terminate the resulting string */
+ int nullterminate
+ );
+
+
+/*
+** Specialization: convert some character text to a unicode_char array.
+**
+** This is like libmail_u_convert_tocbuf_init(), but converts to a unicode_char
+** array.
+**
+** The returned *ucsize_ret is initialized with the number of unicode_chars,
+** rather than the byte count.
+**
+** In all other ways, this function behaves identically to
+** libmail_u_convert_tocbuf_init().
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_tou_init(/* Convert from this chset */
+ const char *src_chset,
+
+ /* malloc()ed buffer pointer, on exit. */
+ unicode_char **ucptr_ret,
+
+ /* size of the malloc()ed buffer, upon exit */
+ size_t *ucsize_ret,
+
+ /* If true, terminate with U+0x0000, for convenience */
+ int nullterminate
+ );
+
+/*
+** Specialization: convert a unicode_char array to some character text.
+**
+** This is the opposite of libmail_u_convert_tou_init(). Call this to
+** initialize the conversion handle, then use libmail_u_convert_uc()
+** instead of libmail_u_convert.
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_fromu_init(/* Convert to this chset */
+ const char *dst_chset,
+
+ /* malloc()ed buffer pointer, on exit. */
+ char **cbufptr_ret,
+
+ /* size of the malloc()ed buffer, upon exit */
+ size_t *cbufsize_ret,
+
+ /* If true, terminate with U+0x0000, for convenience */
+ int nullterminate
+ );
+
+int libmail_u_convert_uc(/* The conversion handle */
+ libmail_u_convert_handle_t handle,
+
+ /* Text to convert */
+ const unicode_char *text,
+
+ /* Number of bytes to convert */
+ size_t cnt);
+
+/*
+** Initialize conversion to UTF-8.
+**
+** This is a wrapper for libmail_u_convert_tocbuf_init() that specifies the
+** destination charset as UTF-8.
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_toutf8_init(const char *src_chset,
+ char **cbufptr_ret,
+ size_t *cbufsize_ret,
+ int nullterminate);
+
+/*
+** Initialize conversion from UTF-8.
+**
+** This is a wrapper for libmail_u_convert_tocbuf_init() that specifies the
+** source charset as UTF-8.
+*/
+
+libmail_u_convert_handle_t
+libmail_u_convert_tocbuf_fromutf8_init(const char *dst_chset,
+ char **cbufptr_ret,
+ size_t *cbufsize_ret,
+ int nullterminate);
+
+/*
+** Convert a character string to UTF-8.
+**
+** Returns a malloc-ed buffer holding the UTF-8 string, or NULL if an
+** error occured.
+*/
+char *libmail_u_convert_toutf8(/* Text to convert to UTF-8 */
+ const char *text,
+
+ /* Character set to convert to UTF-8 */
+ const char *charset,
+
+ /*
+ ** If non-NULL, and a non-NULL pointer is
+ ** returned, *error is set to non-zero if
+ ** a character conversion error has occured.
+ */
+ int *error);
+
+/*
+** Convert UTF-8 text to another character set.
+**
+** Returns a malloc-ed buffer holding the string converted to the specified
+** character set, or NULL if an error occured.
+*/
+
+char *libmail_u_convert_fromutf8(/* A UTF-8 string */
+ const char *text,
+
+ /*
+ ** Convert the UTF-8 string to this character
+ ** set.
+ */
+
+ const char *charset,
+
+ /*
+ ** If non-NULL, and a non-NULL pointer is
+ ** returned, *error is set to non-zero if
+ ** a character conversion error has occured.
+ */
+ int *error);
+
+/*
+** Convert one charset to another charset, placing the result in a malloc-ed
+** buffer.
+**
+** Returns a malloc-ed buffer holding the string converted to the specified
+** character set, or NULL if an error occured.
+*/
+
+char *libmail_u_convert_tobuf(/* A string to convert */
+ const char *text,
+
+ /*
+ ** String's charset.
+ */
+
+ const char *charset,
+
+ /*
+ ** Destination charset
+ */
+ const char *dstcharset,
+
+ /*
+ ** If non-NULL, and a non-NULL pointer is
+ ** returned, *error is set to non-zero if
+ ** a character conversion error has occured.
+ */
+ int *error);
+
+/*
+** Convenience function: call libmail_u_convert_tou_init(), feed the
+** character string through libmail_u_convert(), then call
+** libmail_u_convert_deinit().
+**
+** If this function returns 0, *uc and *ucsize is set to a malloced buffer+size
+** holding the unicode char array.
+*/
+
+int libmail_u_convert_tou_tobuf(/* Character text to convert */
+ const char *text,
+
+ /* Number of characters */
+ size_t text_l,
+
+ /* text's charset */
+ const char *charset,
+
+ /*
+ ** If this function returns 0, this gets
+ ** initialized
+ */
+ unicode_char **uc,
+
+ /*
+ ** Size of the allocated buffer
+ */
+ size_t *ucsize,
+
+ /*
+ ** If not null and this function returns 0,
+ ** this is set to non-0 if there
+ ** was a conversion error (but the output
+ ** buffer gets still allocated and
+ ** initialized)
+ */
+ int *err);
+
+/*
+** Convenience function: call libmail_u_convert_fromu_init(), feed the
+** unicode_array through libmail_u_convert_uc(), then call
+** libmail_u_convert_deinit().
+**
+** If this function returns 0, *uc and *ucsize is set to a malloced buffer+size
+** holding the converted character string
+*/
+
+int libmail_u_convert_fromu_tobuf(/* Unicode array to convert to a char str */
+ const unicode_char *utext,
+
+ /*
+ ** Size of the unicode array.
+ ** If this is (size_t)-1, utext is a
+ ** 0-terminated array.
+ */
+ size_t utext_l,
+
+ /*
+ ** Convert the unicode array to this charset.
+ */
+ const char *charset,
+
+ /*
+ ** If libmail_u_convert_fromu_tobuf()
+ ** returns 0, this is initialized to a
+ ** malloced buffer with a 0-terminated
+ ** string is kept.
+ */
+ char **c,
+
+ /*
+ ** Size of the initialized array, including
+ ** the 0-terminator.
+ */
+ size_t *csize,
+
+ /*
+ ** If libmail_u_convert_fromu_tobuf()
+ ** returns 0 and this is not NULL,
+ ** *err is set to non-0 if there was a
+ ** conversion error to the requested
+ ** character set.
+ */
+ int *err);
+
+/*
+** Convenience function: convert a string in a given character set
+** to/from uppercase, lowercase, or something else.
+**
+** This is done by calling libmail_u_convert_tou_tobuf() first,
+** applying the title_func and char_func, then using
+** libmail_u_convert_fromu_tobuf().
+**
+** A NULL return indicates that the requested conversion cannot be performed.
+*/
+
+char *libmail_u_convert_tocase( /* String to convert */
+ const char *str,
+
+ /* String's character set */
+
+ const char *charset,
+
+ /*
+ ** Conversion of the first character in
+ ** str: unicode_uc, unicode_lc, or unicode_tc:
+ */
+
+ unicode_char (*first_char_func)(unicode_char),
+
+ /*
+ ** Conversion of the second and the remaining
+ ** character in str. If NULL, same as
+ ** first_char_func.
+ */
+ unicode_char (*char_func)(unicode_char));
+
+
+
+/* Either UCS-4BE or UCS-4LE, matching the native unicode_char endianness */
+
+extern const char libmail_u_ucs4_native[];
+
+/* Either UCS-2BE or UCS-2LE, matching the native unicode_char endianness */
+
+extern const char libmail_u_ucs2_native[];
+
+/*
+** Modified-UTF7 encoding used for IMAP folder names. Pass it for a charset
+** parameter.
+**
+** This can be followed by a " " and up to 15 characters to be escaped in
+** addition to unicode chars.
+*/
+
+#define unicode_x_imap_modutf7 "x-imap-modutf7"
+
+#if 0
+{
+#endif
+
+#ifdef __cplusplus
+}
+
+extern size_t unicode_wcwidth(const std::vector<unicode_char> &uc);
+
+namespace mail {
+
+ /*
+ ** Interface to iconv.
+ **
+ ** Subclass converted(). Invoke begin(), then operator(), repeatedly,
+ ** then end().
+ **
+ ** converted() receives the converted text.
+ */
+
+ class iconvert {
+
+ libmail_u_convert_handle_t handle;
+
+ public:
+ iconvert();
+ virtual ~iconvert();
+
+ /* Start conversion.
+ ** Returns false if the requested conversion cannot be done.
+ **/
+
+ bool begin(/* Convert from */
+ const std::string &src_chset,
+
+ /* Convert to */
+ const std::string &dst_chset);
+
+ /* Feed iconv(3). Returns false if the conversion was aborted.
+ */
+
+ bool operator()(const char *, size_t);
+
+ bool operator()(const unicode_char *, size_t);
+
+ /*
+ ** Get the results here. If the subclass returns a non-0
+ ** value, the conversion is aborted.
+ */
+
+ virtual int converted(const char *, size_t);
+
+ /*
+ ** End of conversion.
+ **
+ ** Returns true if all calls to converted() returned 0,
+ ** false if the conversion was aborted.
+ **
+ ** errflag is set to true if there was a character that could
+ ** not be converted, and passed to converted().
+ */
+
+ bool end(bool &errflag)
+ {
+ return end(&errflag);
+ }
+
+ bool end()
+ {
+ return end(NULL);
+ }
+
+ /* Convert between two different charsets */
+
+ static std::string convert(const std::string &text,
+ const std::string &charset,
+ const std::string &dstcharset,
+ bool &errflag);
+
+ /* Convert between two different charsets */
+
+ static std::string convert(const std::string &text,
+ const std::string &charset,
+ const std::string &dstcharset)
+ {
+ bool dummy;
+
+ return convert(text, charset, dstcharset, dummy);
+ }
+
+ /* Convert from unicode to a charset */
+
+ static std::string convert(const std::vector<unicode_char> &uc,
+ const std::string &dstcharset,
+ bool &errflag);
+
+ /* Convert from unicode to a charset */
+
+ static std::string convert(const std::vector<unicode_char> &uc,
+ const std::string &dstcharset)
+ {
+ bool dummy;
+
+ return convert(uc, dstcharset, dummy);
+ }
+
+ /* Convert charset to unicode */
+
+ static bool convert(const std::string &text,
+ const std::string &charset,
+ std::vector<unicode_char> &uc);
+
+
+ /* Convert to upper/lower/title case */
+
+ static std::string
+ convert_tocase(/* Text string */
+ const std::string &text,
+
+ /* Its charset */
+ const std::string &charset,
+
+ /* First character: unicode_uc, unicode_lc, or unicode_tc */
+ unicode_char (*first_char_func)(unicode_char),
+
+ /* If not NULL, second and subsequent chars */
+ unicode_char (*char_func)(unicode_char)
+ =NULL)
+ {
+ bool dummy;
+
+ return convert_tocase(text, charset, dummy,
+ first_char_func,
+ char_func);
+ }
+
+ /* Convert to upper/lower/title case */
+
+ static std::string
+ convert_tocase(/* Text string */
+ const std::string &text,
+
+ /* Its charset */
+ const std::string &charset,
+
+ /* Set if there's a conversion error */
+ bool &err,
+
+ /* First character: unicode_uc, unicode_lc, or unicode_tc */
+ unicode_char (*first_char_func)(unicode_char),
+
+ /* If not NULL, second and subsequent chars */
+ unicode_char (*char_func)(unicode_char)
+ =NULL);
+ private:
+ bool end(bool *);
+
+ public:
+ class tou;
+ class fromu;
+ };
+
+ /* Convert output of iconvert to unicode_chars. */
+
+ class iconvert::tou : public iconvert {
+
+ public:
+ bool begin(const std::string &chset);
+
+ virtual int converted(const unicode_char *, size_t);
+
+ using iconvert::operator();
+ private:
+ int converted(const char *ptr, size_t cnt);
+
+ public:
+ template<typename iter_t> class to_iter_class;
+
+ template<typename input_iter_t,
+ typename output_iter_t>
+ static output_iter_t convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ output_iter_t out_iter);
+
+ template<typename input_iter_t>
+ static void convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ std::vector<unicode_char> &out_buf)
+ {
+ out_buf.clear();
+ std::back_insert_iterator<std::vector<unicode_char> >
+ insert_iter(out_buf);
+
+ convert(from_iter, to_iter, chset, insert_iter);
+ }
+
+ static void convert(const std::string &str,
+ const std::string &chset,
+ std::vector<unicode_char> &out_buf);
+ };
+
+ /* Helper class that saves unicode output into an output iterator */
+
+ template<typename iter_t>
+ class iconvert::tou::to_iter_class : public iconvert::tou {
+
+ iter_t iter;
+ public:
+
+ to_iter_class(iter_t iterValue)
+ : iter(iterValue) {}
+
+ using tou::operator();
+
+ operator iter_t() const { return iter; }
+
+ private:
+ int converted(const unicode_char *ptr, size_t cnt)
+ {
+ while (cnt)
+ {
+ *iter=*ptr;
+
+ ++iter;
+ ++ptr;
+ --cnt;
+ }
+ return 0;
+ }
+ };
+
+ template<typename input_iter_t,
+ typename output_iter_t>
+ output_iter_t iconvert::tou::convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ output_iter_t out_iter)
+ {
+ class to_iter_class<output_iter_t> out(out_iter);
+
+ if (!out.begin(chset))
+ return out;
+
+ std::vector<char> string;
+
+ while (from_iter != to_iter)
+ {
+ string.push_back(*from_iter++);
+
+ if (string.size() > 31)
+ {
+ out(&string[0], string.size());
+ string.clear();
+ }
+ }
+
+ if (string.size() > 0)
+ out(&string[0], string.size());
+
+ out.end();
+ return out;
+ }
+
+ /* Convert output of iconvert from unicode_chars. */
+
+ class iconvert::fromu : public iconvert {
+
+ public:
+ bool begin(const std::string &chset);
+
+ using iconvert::operator();
+
+ template<typename iter_t> class to_iter_class;
+
+ template<typename input_iter_t,
+ typename output_iter_t>
+ static output_iter_t convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ output_iter_t out_iter);
+
+ template<typename input_iter_t>
+ static void convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ std::string &out_buf)
+ {
+ out_buf="";
+ std::back_insert_iterator<std::string>
+ insert_iter(out_buf);
+
+ convert(from_iter, to_iter, chset, insert_iter);
+ }
+
+ static void convert(const std::vector<unicode_char> &ubuf,
+ const std::string &chset,
+ std::string &out_buf);
+
+ static std::string convert(const std::vector<unicode_char>
+ &ubuf,
+ const std::string &chset);
+ };
+
+ /* Helper class that saves unicode output into an output iterator */
+
+ template<typename iter_t>
+ class iconvert::fromu::to_iter_class : public iconvert::fromu {
+
+ iter_t iter;
+ public:
+
+ to_iter_class(iter_t iterValue)
+ : iter(iterValue) {}
+
+ using fromu::operator();
+
+ operator iter_t() const { return iter; }
+
+ private:
+ int converted(const char *ptr, size_t cnt)
+ {
+ while (cnt)
+ {
+ *iter=*ptr;
+
+ ++iter;
+ ++ptr;
+ --cnt;
+ }
+ return 0;
+ }
+ };
+
+ template<typename input_iter_t,
+ typename output_iter_t>
+ output_iter_t iconvert::fromu::convert(input_iter_t from_iter,
+ input_iter_t to_iter,
+ const std::string &chset,
+ output_iter_t out_iter)
+ {
+ class to_iter_class<output_iter_t> out(out_iter);
+
+ if (!out.begin(chset))
+ return out;
+
+ std::vector<unicode_char> string;
+
+ while (from_iter != to_iter)
+ {
+ string.push_back(*from_iter++);
+
+ if (string.size() > 31)
+ {
+ out(&string[0], string.size());
+ string.clear();
+ }
+ }
+
+ if (string.size() > 0)
+ out(&string[0], string.size());
+
+ out.end();
+ return out;
+ }
+
+ /*
+ ** Unicode linebreaking algorithm, tr14.
+ */
+
+ extern "C" int linebreak_trampoline(int value, void *ptr);
+ extern "C" int linebreakc_trampoline(int value, unicode_char ch,
+ void *ptr);
+
+ /*
+ ** Subclass linebreak_callback_base, implement operator()(int).
+ **
+ ** Use operator<< or operator()(iterator, iterator) to feed
+ ** unicode_chars into the linebreaking algorithm. The subclass receives
+ ** UNICODE_LB values, as they become available.
+ */
+
+ class linebreak_callback_base {
+
+ unicode_lb_info_t handle;
+
+ int opts;
+
+ linebreak_callback_base(const linebreak_callback_base &);
+ /* NOT IMPLEMENTED */
+
+ linebreak_callback_base &operator==(const
+ linebreak_callback_base &);
+ /* NOT IMPLEMENTED */
+
+ public:
+ linebreak_callback_base();
+ virtual ~linebreak_callback_base();
+
+ void finish();
+
+ void set_opts(int opts);
+
+ friend int linebreak_trampoline(int, void *);
+
+ linebreak_callback_base &operator<<(unicode_char uc);
+
+ template<typename iter_type>
+ linebreak_callback_base &operator()(iter_type beg_iter,
+ iter_type end_iter)
+ {
+ while (beg_iter != end_iter)
+ operator<<(*beg_iter++);
+ return *this;
+ }
+
+ linebreak_callback_base &operator<<(const
+ std::vector<unicode_char>
+ &vec)
+ {
+ return operator()(vec.begin(), vec.end());
+ }
+ private:
+ virtual int operator()(int);
+ };
+
+ class linebreak_callback_save_buf : public linebreak_callback_base {
+
+ public:
+ std::list<int> lb_buf;
+
+ linebreak_callback_save_buf();
+ ~linebreak_callback_save_buf();
+
+ private:
+ int operator()(int value);
+ };
+
+ /*
+ ** Convert an input iterator sequence over unicode_chars into
+ ** an input iterator sequence over linebreak values.
+ */
+
+ template<typename input_t> class linebreak_iter
+ : public std::iterator<std::input_iterator_tag, int, void>
+ {
+ mutable input_t iter_value, end_iter_value;
+
+ mutable linebreak_callback_save_buf *buf;
+
+ void fill() const
+ {
+ if (buf == NULL)
+ return;
+
+ while (buf->lb_buf.empty())
+ {
+ if (iter_value == end_iter_value)
+ {
+ buf->finish();
+ if (buf->lb_buf.empty())
+ {
+ delete buf;
+ buf=NULL;
+ }
+ break;
+ }
+
+ buf->operator<<(*iter_value++);
+ }
+ }
+
+ mutable value_type bufvalue;
+
+ public:
+ linebreak_iter(const input_t &iter_valueArg,
+ const input_t &iter_endvalueArg)
+ : iter_value(iter_valueArg),
+ end_iter_value(iter_endvalueArg),
+ buf(new linebreak_callback_save_buf)
+ {
+ }
+
+ linebreak_iter() : buf(NULL)
+ {
+ }
+
+ void set_opts(int opts)
+ {
+ if (buf)
+ buf->set_opts(opts);
+ }
+
+ ~linebreak_iter()
+ {
+ if (buf)
+ delete buf;
+ }
+
+ linebreak_iter(const linebreak_iter<input_t> &v)
+ : buf(NULL)
+ {
+ operator=(v);
+ }
+
+ linebreak_iter<input_t> &operator=(const
+ linebreak_iter<input_t> &v)
+ {
+ if (buf)
+ delete buf;
+ buf=v.buf;
+ iter_value=v.iter_value;
+ end_iter_value=v.end_iter_value;
+ v.buf=NULL;
+ return *this;
+ }
+
+ bool operator==(const linebreak_iter<input_t> &v) const
+ {
+ fill();
+ v.fill();
+
+ return buf == NULL && v.buf == NULL;
+ }
+
+ bool operator!=(const linebreak_iter<input_t> &v) const
+ {
+ return !operator==(v);
+ }
+
+ value_type operator*() const
+ {
+ fill();
+ return buf == NULL ? UNICODE_LB_MANDATORY:
+ buf->lb_buf.front();
+ }
+
+ linebreak_iter<input_t> &operator++()
+ {
+ bufvalue=operator*();
+
+ if (buf)
+ buf->lb_buf.pop_front();
+ return *this;
+ }
+
+ const value_type *operator++(int)
+ {
+ operator++();
+ return &bufvalue;
+ }
+ };
+
+ /*
+ ** Like linebreak_callback_base, except the subclass receives both
+ ** the linebreaking value, and the unicode character.
+ */
+
+ class linebreakc_callback_base {
+
+ unicode_lbc_info_t handle;
+
+ int opts;
+
+ linebreakc_callback_base(const linebreakc_callback_base &);
+ /* NOT IMPLEMENTED */
+
+ linebreakc_callback_base &operator==(const
+ linebreakc_callback_base
+ &);
+ /* NOT IMPLEMENTED */
+
+
+ public:
+ linebreakc_callback_base();
+ virtual ~linebreakc_callback_base();
+
+ void finish();
+
+ void set_opts(int opts);
+
+ friend int linebreakc_trampoline(int, unicode_char, void *);
+
+ linebreakc_callback_base &operator<<(unicode_char uc);
+
+ template<typename iter_type>
+ linebreakc_callback_base &operator()(iter_type beg_iter,
+ iter_type end_iter)
+ {
+ while (beg_iter != end_iter)
+ operator<<(*beg_iter++);
+ return *this;
+ }
+
+ linebreakc_callback_base &operator<<(const
+ std::vector<unicode_char>
+ &vec)
+ {
+ return operator()(vec.begin(), vec.end());
+ }
+ private:
+ virtual int operator()(int, unicode_char);
+ };
+
+ class linebreakc_callback_save_buf : public linebreakc_callback_base {
+
+ public:
+ std::list<std::pair<int, unicode_char> > lb_buf;
+
+ linebreakc_callback_save_buf();
+ ~linebreakc_callback_save_buf();
+
+ private:
+ int operator()(int, unicode_char);
+ };
+
+
+ /*
+ ** Convert an input iterator sequence over unicode_chars into
+ ** an input iterator sequence over std::pair<int, unicode_char>,
+ ** the original unicode character, and the linebreaking value before
+ ** the character.
+ */
+
+ template<typename input_t> class linebreakc_iter
+ : public std::iterator<std::input_iterator_tag,
+ std::pair<int, unicode_char>, void>
+ {
+ mutable input_t iter_value, end_iter_value;
+
+ mutable linebreakc_callback_save_buf *buf;
+
+ void fill() const
+ {
+ if (buf == NULL)
+ return;
+
+ while (buf->lb_buf.empty())
+ {
+ if (iter_value == end_iter_value)
+ {
+ buf->finish();
+ if (buf->lb_buf.empty())
+ {
+ delete buf;
+ buf=NULL;
+ }
+ break;
+ }
+
+ buf->operator<<(*iter_value);
+ ++iter_value;
+ }
+ }
+
+ mutable value_type bufvalue;
+
+ public:
+ linebreakc_iter(const input_t &iter_valueArg,
+ const input_t &iter_endvalueArg)
+ : iter_value(iter_valueArg),
+ end_iter_value(iter_endvalueArg),
+ buf(new linebreakc_callback_save_buf)
+ {
+ }
+
+ linebreakc_iter() : buf(NULL)
+ {
+ }
+
+ ~linebreakc_iter()
+ {
+ if (buf)
+ delete buf;
+ }
+
+ linebreakc_iter(const linebreakc_iter<input_t> &v)
+ : buf(NULL)
+ {
+ operator=(v);
+ }
+
+ linebreakc_iter<input_t> &operator=(const
+ linebreakc_iter<input_t> &v)
+ {
+ if (buf)
+ delete buf;
+ buf=v.buf;
+ iter_value=v.iter_value;
+ end_iter_value=v.end_iter_value;
+ v.buf=NULL;
+ return *this;
+ }
+
+ bool operator==(const linebreakc_iter<input_t> &v) const
+ {
+ fill();
+ v.fill();
+
+ return buf == NULL && v.buf == NULL;
+ }
+
+ bool operator!=(const linebreakc_iter<input_t> &v) const
+ {
+ return !operator==(v);
+ }
+
+ value_type operator*() const
+ {
+ fill();
+ return buf == NULL ?
+ std::make_pair(UNICODE_LB_MANDATORY,
+ (unicode_char)0):
+ buf->lb_buf.front();
+ }
+
+ linebreakc_iter<input_t> &operator++()
+ {
+ bufvalue=operator*();
+
+ if (buf)
+ buf->lb_buf.pop_front();
+ return *this;
+ }
+
+ const value_type *operator++(int)
+ {
+ operator++();
+ return &bufvalue;
+ }
+ };
+
+
+ /*
+ ** Subclass wordbreak_callback_base, implement operator()(int).
+ **
+ ** Use operator<< or operator()(iterator, iterator) to feed
+ ** unicode_chars into the wordbreaking algorithm. The subclass receives
+ ** word flags, as they become available.
+ */
+
+ extern "C" int wordbreak_trampoline(int value, void *ptr);
+
+ class wordbreak_callback_base {
+
+ unicode_wb_info_t handle;
+
+ wordbreak_callback_base(const wordbreak_callback_base &);
+ /* NOT IMPLEMENTED */
+
+ wordbreak_callback_base &operator==(const
+ wordbreak_callback_base &);
+ /* NOT IMPLEMENTED */
+
+ public:
+ wordbreak_callback_base();
+ virtual ~wordbreak_callback_base();
+
+ void finish();
+
+ friend int wordbreak_trampoline(int, void *);
+
+ wordbreak_callback_base &operator<<(unicode_char uc);
+
+ template<typename iter_type>
+ wordbreak_callback_base &operator()(iter_type beg_iter,
+ iter_type end_iter)
+ {
+ while (beg_iter != end_iter)
+ operator<<(*beg_iter++);
+ return *this;
+ }
+
+ wordbreak_callback_base &operator<<(const
+ std::vector<unicode_char>
+ &vec)
+ {
+ return operator()(vec.begin(), vec.end());
+ }
+ private:
+ virtual int operator()(bool);
+ };
+
+ /*
+ ** A C++ wrapper for unicode_wbscan.
+ */
+
+ class wordbreakscan {
+
+ unicode_wbscan_info_t handle;
+
+ wordbreakscan(const wordbreakscan &);
+ /* NOT IMPLEMENTED */
+
+ wordbreakscan &operator==(const wordbreakscan &);
+ /* NOT IMPLEMENTED */
+ public:
+
+ wordbreakscan();
+ ~wordbreakscan();
+
+ bool operator<<(unicode_char uc);
+
+ size_t finish();
+ };
+
+}
+#endif
+
+#endif
diff --git a/unicode/unicode_graphemebreak.c b/unicode/unicode_graphemebreak.c
new file mode 100644
index 0000000..5939dc8
--- /dev/null
+++ b/unicode/unicode_graphemebreak.c
@@ -0,0 +1,95 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+#include <unistd.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#define UNICODE_GRAPHEMEBREAK_ANY 0x00
+#define UNICODE_GRAPHEMEBREAK_CR 0x01
+#define UNICODE_GRAPHEMEBREAK_LF 0x02
+#define UNICODE_GRAPHEMEBREAK_Control 0x03
+#define UNICODE_GRAPHEMEBREAK_Extend 0x04
+#define UNICODE_GRAPHEMEBREAK_Prepend 0x05
+#define UNICODE_GRAPHEMEBREAK_SpacingMark 0x06
+#define UNICODE_GRAPHEMEBREAK_L 0x07
+#define UNICODE_GRAPHEMEBREAK_V 0x08
+#define UNICODE_GRAPHEMEBREAK_T 0x09
+#define UNICODE_GRAPHEMEBREAK_LV 0x0A
+#define UNICODE_GRAPHEMEBREAK_LVT 0x0B
+
+#include "graphemebreaktab.h"
+
+int unicode_grapheme_break(unicode_char a, unicode_char b)
+{
+ uint8_t ac=unicode_tab_lookup(a, unicode_indextab,
+ sizeof(unicode_indextab)/sizeof(unicode_indextab[0]),
+ unicode_rangetab,
+ unicode_classtab,
+ UNICODE_GRAPHEMEBREAK_ANY),
+ bc=unicode_tab_lookup(b, unicode_indextab,
+ sizeof(unicode_indextab)/sizeof(unicode_indextab[0]),
+ unicode_rangetab,
+ unicode_classtab,
+ UNICODE_GRAPHEMEBREAK_ANY);
+
+ /* GB1 and GB2 are implied */
+
+ if (ac == UNICODE_GRAPHEMEBREAK_CR && bc == UNICODE_GRAPHEMEBREAK_LF)
+ return 0; /* GB3 */
+
+
+ switch (ac) {
+ case UNICODE_GRAPHEMEBREAK_CR:
+ case UNICODE_GRAPHEMEBREAK_LF:
+ case UNICODE_GRAPHEMEBREAK_Control:
+ return 1; /* GB4 */
+ default:
+ break;
+ }
+
+ switch (bc) {
+ case UNICODE_GRAPHEMEBREAK_CR:
+ case UNICODE_GRAPHEMEBREAK_LF:
+ case UNICODE_GRAPHEMEBREAK_Control:
+ return 1; /* GB5 */
+ default:
+ break;
+ }
+
+ if (ac == UNICODE_GRAPHEMEBREAK_L)
+ switch (bc) {
+ case UNICODE_GRAPHEMEBREAK_L:
+ case UNICODE_GRAPHEMEBREAK_V:
+ case UNICODE_GRAPHEMEBREAK_LV:
+ case UNICODE_GRAPHEMEBREAK_LVT:
+ return 0; /* GB6 */
+ }
+
+ if ((ac == UNICODE_GRAPHEMEBREAK_LV ||
+ ac == UNICODE_GRAPHEMEBREAK_V) &&
+ (bc == UNICODE_GRAPHEMEBREAK_V ||
+ bc == UNICODE_GRAPHEMEBREAK_T))
+ return 0; /* GB7 */
+
+ if ((ac == UNICODE_GRAPHEMEBREAK_LVT ||
+ ac == UNICODE_GRAPHEMEBREAK_T) &&
+ bc == UNICODE_GRAPHEMEBREAK_T)
+ return 0; /* GB8 */
+
+ if (bc == UNICODE_GRAPHEMEBREAK_Extend)
+ return 0; /* GB9 */
+
+ if (bc == UNICODE_GRAPHEMEBREAK_SpacingMark)
+ return 0; /* GB9a */
+
+ if (ac == UNICODE_GRAPHEMEBREAK_Prepend)
+ return 0; /* GB9b */
+
+ return 1; /* GB10 */
+}
diff --git a/unicode/unicode_htmlent.c b/unicode/unicode_htmlent.c
new file mode 100644
index 0000000..549d069
--- /dev/null
+++ b/unicode/unicode_htmlent.c
@@ -0,0 +1,55 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <stdlib.h>
+
+struct i {
+ size_t n_start;
+ size_t n_size;
+ unicode_char v;
+};
+
+#include "unicode_htmlent.h"
+
+
+static int compar(const void *key, const void *obj)
+{
+ size_t j;
+ const char *p=n + ((const struct i *)obj)->n_start;
+ const char *ckey=(const char *)key;
+
+ for (j=0; j<((const struct i *)obj)->n_size; ++j)
+ {
+ if (*ckey < *p)
+ return -1;
+
+ if (*ckey > *p)
+ return 1;
+
+ ++p;
+ ++ckey;
+ }
+
+ if (*ckey)
+ return 1;
+
+ return 0;
+}
+
+unicode_char unicode_html40ent_lookup(const char *n)
+{
+ const struct i *ptr=
+ (const struct i *)bsearch(n, ii,
+ sizeof(ii)/sizeof(ii[0]),
+ sizeof(ii[0]), compar);
+
+ if (ptr)
+ return ptr->v;
+ return 0;
+}
diff --git a/unicode/unicode_htmlent.h b/unicode/unicode_htmlent.h
new file mode 100644
index 0000000..a903436
--- /dev/null
+++ b/unicode/unicode_htmlent.h
@@ -0,0 +1,511 @@
+static const char n[]={
+ 65, 69, 108, 105, 103, /* AElig */
+ 65, 97, 99, 117, 116, 101, /* Aacute */
+ 65, 99, 105, 114, 99, /* Acirc */
+ 65, 103, 114, 97, 118, 101, /* Agrave */
+ 65, 108, 112, 104, 97, /* Alpha */
+ 65, 114, 105, 110, 103, /* Aring */
+ 65, 116, 105, 108, 100, 101, /* Atilde */
+ 65, 117, 109, 108, /* Auml */
+ 66, 101, 116, 97, /* Beta */
+ 67, 99, 101, 100, 105, 108, /* Ccedil */
+ 67, 104, 105, /* Chi */
+ 68, 97, 103, 103, 101, 114, /* Dagger */
+ 68, 101, 108, 116, 97, /* Delta */
+ 69, 84, 72, /* ETH */
+ 69, 97, 99, 117, 116, 101, /* Eacute */
+ 69, 99, 105, 114, 99, /* Ecirc */
+ 69, 103, 114, 97, 118, 101, /* Egrave */
+ 69, 112, 115, 105, 108, 111, 110, /* Epsilon */
+ 69, 116, 97, /* Eta */
+ 69, 117, 109, 108, /* Euml */
+ 71, 97, 109, 109, 97, /* Gamma */
+ 73, 97, 99, 117, 116, 101, /* Iacute */
+ 73, 99, 105, 114, 99, /* Icirc */
+ 73, 103, 114, 97, 118, 101, /* Igrave */
+ 73, 111, 116, 97, /* Iota */
+ 73, 117, 109, 108, /* Iuml */
+ 75, 97, 112, 112, 97, /* Kappa */
+ 76, 97, 109, 98, 100, 97, /* Lambda */
+ 77, 117, /* Mu */
+ 78, 116, 105, 108, 100, 101, /* Ntilde */
+ 78, 117, /* Nu */
+ 79, 69, 108, 105, 103, /* OElig */
+ 79, 97, 99, 117, 116, 101, /* Oacute */
+ 79, 99, 105, 114, 99, /* Ocirc */
+ 79, 103, 114, 97, 118, 101, /* Ograve */
+ 79, 109, 101, 103, 97, /* Omega */
+ 79, 109, 105, 99, 114, 111, 110, /* Omicron */
+ 79, 115, 108, 97, 115, 104, /* Oslash */
+ 79, 116, 105, 108, 100, 101, /* Otilde */
+ 79, 117, 109, 108, /* Ouml */
+ 80, 104, 105, /* Phi */
+ 80, 105, /* Pi */
+ 80, 114, 105, 109, 101, /* Prime */
+ 80, 115, 105, /* Psi */
+ 82, 104, 111, /* Rho */
+ 83, 99, 97, 114, 111, 110, /* Scaron */
+ 83, 105, 103, 109, 97, /* Sigma */
+ 84, 72, 79, 82, 78, /* THORN */
+ 84, 97, 117, /* Tau */
+ 84, 104, 101, 116, 97, /* Theta */
+ 85, 97, 99, 117, 116, 101, /* Uacute */
+ 85, 99, 105, 114, 99, /* Ucirc */
+ 85, 103, 114, 97, 118, 101, /* Ugrave */
+ 85, 112, 115, 105, 108, 111, 110, /* Upsilon */
+ 85, 117, 109, 108, /* Uuml */
+ 88, 105, /* Xi */
+ 89, 97, 99, 117, 116, 101, /* Yacute */
+ 89, 117, 109, 108, /* Yuml */
+ 90, 101, 116, 97, /* Zeta */
+ 97, 97, 99, 117, 116, 101, /* aacute */
+ 97, 99, 105, 114, 99, /* acirc */
+ 97, 99, 117, 116, 101, /* acute */
+ 97, 101, 108, 105, 103, /* aelig */
+ 97, 103, 114, 97, 118, 101, /* agrave */
+ 97, 108, 101, 102, 115, 121, 109, /* alefsym */
+ 97, 108, 112, 104, 97, /* alpha */
+ 97, 109, 112, /* amp */
+ 97, 110, 100, /* and */
+ 97, 110, 103, /* ang */
+ 97, 112, 111, 115, /* apos */
+ 97, 114, 105, 110, 103, /* aring */
+ 97, 115, 121, 109, 112, /* asymp */
+ 97, 116, 105, 108, 100, 101, /* atilde */
+ 97, 117, 109, 108, /* auml */
+ 98, 100, 113, 117, 111, /* bdquo */
+ 98, 101, 116, 97, /* beta */
+ 98, 114, 118, 98, 97, 114, /* brvbar */
+ 98, 117, 108, 108, /* bull */
+ 99, 97, 112, /* cap */
+ 99, 99, 101, 100, 105, 108, /* ccedil */
+ 99, 101, 100, 105, 108, /* cedil */
+ 99, 101, 110, 116, /* cent */
+ 99, 104, 105, /* chi */
+ 99, 105, 114, 99, /* circ */
+ 99, 108, 117, 98, 115, /* clubs */
+ 99, 111, 110, 103, /* cong */
+ 99, 111, 112, 121, /* copy */
+ 99, 114, 97, 114, 114, /* crarr */
+ 99, 117, 112, /* cup */
+ 99, 117, 114, 114, 101, 110, /* curren */
+ 100, 65, 114, 114, /* dArr */
+ 100, 97, 103, 103, 101, 114, /* dagger */
+ 100, 97, 114, 114, /* darr */
+ 100, 101, 103, /* deg */
+ 100, 101, 108, 116, 97, /* delta */
+ 100, 105, 97, 109, 115, /* diams */
+ 100, 105, 118, 105, 100, 101, /* divide */
+ 101, 97, 99, 117, 116, 101, /* eacute */
+ 101, 99, 105, 114, 99, /* ecirc */
+ 101, 103, 114, 97, 118, 101, /* egrave */
+ 101, 109, 112, 116, 121, /* empty */
+ 101, 109, 115, 112, /* emsp */
+ 101, 110, 115, 112, /* ensp */
+ 101, 112, 115, 105, 108, 111, 110, /* epsilon */
+ 101, 113, 117, 105, 118, /* equiv */
+ 101, 116, 97, /* eta */
+ 101, 116, 104, /* eth */
+ 101, 117, 109, 108, /* euml */
+ 101, 117, 114, 111, /* euro */
+ 101, 120, 105, 115, 116, /* exist */
+ 102, 110, 111, 102, /* fnof */
+ 102, 111, 114, 97, 108, 108, /* forall */
+ 102, 114, 97, 99, 49, 50, /* frac12 */
+ 102, 114, 97, 99, 49, 52, /* frac14 */
+ 102, 114, 97, 99, 51, 52, /* frac34 */
+ 102, 114, 97, 115, 108, /* frasl */
+ 103, 97, 109, 109, 97, /* gamma */
+ 103, 101, /* ge */
+ 103, 116, /* gt */
+ 104, 65, 114, 114, /* hArr */
+ 104, 97, 114, 114, /* harr */
+ 104, 101, 97, 114, 116, 115, /* hearts */
+ 104, 101, 108, 108, 105, 112, /* hellip */
+ 105, 97, 99, 117, 116, 101, /* iacute */
+ 105, 99, 105, 114, 99, /* icirc */
+ 105, 101, 120, 99, 108, /* iexcl */
+ 105, 103, 114, 97, 118, 101, /* igrave */
+ 105, 109, 97, 103, 101, /* image */
+ 105, 110, 102, 105, 110, /* infin */
+ 105, 110, 116, /* int */
+ 105, 111, 116, 97, /* iota */
+ 105, 113, 117, 101, 115, 116, /* iquest */
+ 105, 115, 105, 110, /* isin */
+ 105, 117, 109, 108, /* iuml */
+ 107, 97, 112, 112, 97, /* kappa */
+ 108, 65, 114, 114, /* lArr */
+ 108, 97, 109, 98, 100, 97, /* lambda */
+ 108, 97, 110, 103, /* lang */
+ 108, 97, 113, 117, 111, /* laquo */
+ 108, 97, 114, 114, /* larr */
+ 108, 99, 101, 105, 108, /* lceil */
+ 108, 100, 113, 117, 111, /* ldquo */
+ 108, 101, /* le */
+ 108, 102, 108, 111, 111, 114, /* lfloor */
+ 108, 111, 119, 97, 115, 116, /* lowast */
+ 108, 111, 122, /* loz */
+ 108, 114, 109, /* lrm */
+ 108, 115, 97, 113, 117, 111, /* lsaquo */
+ 108, 115, 113, 117, 111, /* lsquo */
+ 108, 116, /* lt */
+ 109, 97, 99, 114, /* macr */
+ 109, 100, 97, 115, 104, /* mdash */
+ 109, 105, 99, 114, 111, /* micro */
+ 109, 105, 100, 100, 111, 116, /* middot */
+ 109, 105, 110, 117, 115, /* minus */
+ 109, 117, /* mu */
+ 110, 97, 98, 108, 97, /* nabla */
+ 110, 98, 115, 112, /* nbsp */
+ 110, 100, 97, 115, 104, /* ndash */
+ 110, 101, /* ne */
+ 110, 105, /* ni */
+ 110, 111, 116, /* not */
+ 110, 111, 116, 105, 110, /* notin */
+ 110, 115, 117, 98, /* nsub */
+ 110, 116, 105, 108, 100, 101, /* ntilde */
+ 110, 117, /* nu */
+ 111, 97, 99, 117, 116, 101, /* oacute */
+ 111, 99, 105, 114, 99, /* ocirc */
+ 111, 101, 108, 105, 103, /* oelig */
+ 111, 103, 114, 97, 118, 101, /* ograve */
+ 111, 108, 105, 110, 101, /* oline */
+ 111, 109, 101, 103, 97, /* omega */
+ 111, 109, 105, 99, 114, 111, 110, /* omicron */
+ 111, 112, 108, 117, 115, /* oplus */
+ 111, 114, /* or */
+ 111, 114, 100, 102, /* ordf */
+ 111, 114, 100, 109, /* ordm */
+ 111, 115, 108, 97, 115, 104, /* oslash */
+ 111, 116, 105, 108, 100, 101, /* otilde */
+ 111, 116, 105, 109, 101, 115, /* otimes */
+ 111, 117, 109, 108, /* ouml */
+ 112, 97, 114, 97, /* para */
+ 112, 97, 114, 116, /* part */
+ 112, 101, 114, 109, 105, 108, /* permil */
+ 112, 101, 114, 112, /* perp */
+ 112, 104, 105, /* phi */
+ 112, 105, /* pi */
+ 112, 105, 118, /* piv */
+ 112, 108, 117, 115, 109, 110, /* plusmn */
+ 112, 111, 117, 110, 100, /* pound */
+ 112, 114, 105, 109, 101, /* prime */
+ 112, 114, 111, 100, /* prod */
+ 112, 114, 111, 112, /* prop */
+ 112, 115, 105, /* psi */
+ 113, 117, 111, 116, /* quot */
+ 114, 65, 114, 114, /* rArr */
+ 114, 97, 100, 105, 99, /* radic */
+ 114, 97, 110, 103, /* rang */
+ 114, 97, 113, 117, 111, /* raquo */
+ 114, 97, 114, 114, /* rarr */
+ 114, 99, 101, 105, 108, /* rceil */
+ 114, 100, 113, 117, 111, /* rdquo */
+ 114, 101, 97, 108, /* real */
+ 114, 101, 103, /* reg */
+ 114, 102, 108, 111, 111, 114, /* rfloor */
+ 114, 104, 111, /* rho */
+ 114, 108, 109, /* rlm */
+ 114, 115, 97, 113, 117, 111, /* rsaquo */
+ 114, 115, 113, 117, 111, /* rsquo */
+ 115, 98, 113, 117, 111, /* sbquo */
+ 115, 99, 97, 114, 111, 110, /* scaron */
+ 115, 100, 111, 116, /* sdot */
+ 115, 101, 99, 116, /* sect */
+ 115, 104, 121, /* shy */
+ 115, 105, 103, 109, 97, /* sigma */
+ 115, 105, 103, 109, 97, 102, /* sigmaf */
+ 115, 105, 109, /* sim */
+ 115, 112, 97, 100, 101, 115, /* spades */
+ 115, 117, 98, /* sub */
+ 115, 117, 98, 101, /* sube */
+ 115, 117, 109, /* sum */
+ 115, 117, 112, /* sup */
+ 115, 117, 112, 49, /* sup1 */
+ 115, 117, 112, 50, /* sup2 */
+ 115, 117, 112, 51, /* sup3 */
+ 115, 117, 112, 101, /* supe */
+ 115, 122, 108, 105, 103, /* szlig */
+ 116, 97, 117, /* tau */
+ 116, 104, 101, 114, 101, 52, /* there4 */
+ 116, 104, 101, 116, 97, /* theta */
+ 116, 104, 101, 116, 97, 115, 121, 109, /* thetasym */
+ 116, 104, 105, 110, 115, 112, /* thinsp */
+ 116, 104, 111, 114, 110, /* thorn */
+ 116, 105, 108, 100, 101, /* tilde */
+ 116, 105, 109, 101, 115, /* times */
+ 116, 114, 97, 100, 101, /* trade */
+ 117, 65, 114, 114, /* uArr */
+ 117, 97, 99, 117, 116, 101, /* uacute */
+ 117, 97, 114, 114, /* uarr */
+ 117, 99, 105, 114, 99, /* ucirc */
+ 117, 103, 114, 97, 118, 101, /* ugrave */
+ 117, 109, 108, /* uml */
+ 117, 112, 115, 105, 104, /* upsih */
+ 117, 112, 115, 105, 108, 111, 110, /* upsilon */
+ 117, 117, 109, 108, /* uuml */
+ 119, 101, 105, 101, 114, 112, /* weierp */
+ 120, 105, /* xi */
+ 121, 97, 99, 117, 116, 101, /* yacute */
+ 121, 101, 110, /* yen */
+ 121, 117, 109, 108, /* yuml */
+ 122, 101, 116, 97, /* zeta */
+ 122, 119, 106, /* zwj */
+ 122, 119, 110, 106 /* zwnj */
+};
+
+static const struct i ii[]={
+ {0, 5, 198},
+ {5, 6, 193},
+ {11, 5, 194},
+ {16, 6, 192},
+ {22, 5, 913},
+ {27, 5, 197},
+ {32, 6, 195},
+ {38, 4, 196},
+ {42, 4, 914},
+ {46, 6, 199},
+ {52, 3, 935},
+ {55, 6, 8225},
+ {61, 5, 916},
+ {66, 3, 208},
+ {69, 6, 201},
+ {75, 5, 202},
+ {80, 6, 200},
+ {86, 7, 917},
+ {93, 3, 919},
+ {96, 4, 203},
+ {100, 5, 915},
+ {105, 6, 205},
+ {111, 5, 206},
+ {116, 6, 204},
+ {122, 4, 921},
+ {126, 4, 207},
+ {130, 5, 922},
+ {135, 6, 923},
+ {141, 2, 924},
+ {143, 6, 209},
+ {149, 2, 925},
+ {151, 5, 338},
+ {156, 6, 211},
+ {162, 5, 212},
+ {167, 6, 210},
+ {173, 5, 937},
+ {178, 7, 927},
+ {185, 6, 216},
+ {191, 6, 213},
+ {197, 4, 214},
+ {201, 3, 934},
+ {204, 2, 928},
+ {206, 5, 8243},
+ {211, 3, 936},
+ {214, 3, 929},
+ {217, 6, 352},
+ {223, 5, 931},
+ {228, 5, 222},
+ {233, 3, 932},
+ {236, 5, 920},
+ {241, 6, 218},
+ {247, 5, 219},
+ {252, 6, 217},
+ {258, 7, 933},
+ {265, 4, 220},
+ {269, 2, 926},
+ {271, 6, 221},
+ {277, 4, 376},
+ {281, 4, 918},
+ {285, 6, 225},
+ {291, 5, 226},
+ {296, 5, 180},
+ {301, 5, 230},
+ {306, 6, 224},
+ {312, 7, 8501},
+ {319, 5, 945},
+ {324, 3, 38},
+ {327, 3, 8743},
+ {330, 3, 8736},
+ {333, 4, 39},
+ {337, 5, 229},
+ {342, 5, 8776},
+ {347, 6, 227},
+ {353, 4, 228},
+ {357, 5, 8222},
+ {362, 4, 946},
+ {366, 6, 166},
+ {372, 4, 8226},
+ {376, 3, 8745},
+ {379, 6, 231},
+ {385, 5, 184},
+ {390, 4, 162},
+ {394, 3, 967},
+ {397, 4, 710},
+ {401, 5, 9827},
+ {406, 4, 8773},
+ {410, 4, 169},
+ {414, 5, 8629},
+ {419, 3, 8746},
+ {422, 6, 164},
+ {428, 4, 8659},
+ {432, 6, 8224},
+ {438, 4, 8595},
+ {442, 3, 176},
+ {445, 5, 948},
+ {450, 5, 9830},
+ {455, 6, 247},
+ {461, 6, 233},
+ {467, 5, 234},
+ {472, 6, 232},
+ {478, 5, 8709},
+ {483, 4, 8195},
+ {487, 4, 8194},
+ {491, 7, 949},
+ {498, 5, 8801},
+ {503, 3, 951},
+ {506, 3, 240},
+ {509, 4, 235},
+ {513, 4, 8364},
+ {517, 5, 8707},
+ {522, 4, 402},
+ {526, 6, 8704},
+ {532, 6, 189},
+ {538, 6, 188},
+ {544, 6, 190},
+ {550, 5, 8260},
+ {555, 5, 947},
+ {560, 2, 8805},
+ {562, 2, 62},
+ {564, 4, 8660},
+ {568, 4, 8596},
+ {572, 6, 9829},
+ {578, 6, 8230},
+ {584, 6, 237},
+ {590, 5, 238},
+ {595, 5, 161},
+ {600, 6, 236},
+ {606, 5, 8465},
+ {611, 5, 8734},
+ {616, 3, 8747},
+ {619, 4, 953},
+ {623, 6, 191},
+ {629, 4, 8712},
+ {633, 4, 239},
+ {637, 5, 954},
+ {642, 4, 8656},
+ {646, 6, 955},
+ {652, 4, 9001},
+ {656, 5, 171},
+ {661, 4, 8592},
+ {665, 5, 8968},
+ {670, 5, 8220},
+ {675, 2, 8804},
+ {677, 6, 8970},
+ {683, 6, 8727},
+ {689, 3, 9674},
+ {692, 3, 8206},
+ {695, 6, 8249},
+ {701, 5, 8216},
+ {706, 2, 60},
+ {708, 4, 175},
+ {712, 5, 8212},
+ {717, 5, 181},
+ {722, 6, 183},
+ {728, 5, 8722},
+ {733, 2, 956},
+ {735, 5, 8711},
+ {740, 4, 160},
+ {744, 5, 8211},
+ {749, 2, 8800},
+ {751, 2, 8715},
+ {753, 3, 172},
+ {756, 5, 8713},
+ {761, 4, 8836},
+ {765, 6, 241},
+ {771, 2, 957},
+ {773, 6, 243},
+ {779, 5, 244},
+ {784, 5, 339},
+ {789, 6, 242},
+ {795, 5, 8254},
+ {800, 5, 969},
+ {805, 7, 959},
+ {812, 5, 8853},
+ {817, 2, 8744},
+ {819, 4, 170},
+ {823, 4, 186},
+ {827, 6, 248},
+ {833, 6, 245},
+ {839, 6, 8855},
+ {845, 4, 246},
+ {849, 4, 182},
+ {853, 4, 8706},
+ {857, 6, 8240},
+ {863, 4, 8869},
+ {867, 3, 966},
+ {870, 2, 960},
+ {872, 3, 982},
+ {875, 6, 177},
+ {881, 5, 163},
+ {886, 5, 8242},
+ {891, 4, 8719},
+ {895, 4, 8733},
+ {899, 3, 968},
+ {902, 4, 34},
+ {906, 4, 8658},
+ {910, 5, 8730},
+ {915, 4, 9002},
+ {919, 5, 187},
+ {924, 4, 8594},
+ {928, 5, 8969},
+ {933, 5, 8221},
+ {938, 4, 8476},
+ {942, 3, 174},
+ {945, 6, 8971},
+ {951, 3, 961},
+ {954, 3, 8207},
+ {957, 6, 8250},
+ {963, 5, 8217},
+ {968, 5, 8218},
+ {973, 6, 353},
+ {979, 4, 8901},
+ {983, 4, 167},
+ {987, 3, 173},
+ {990, 5, 963},
+ {995, 6, 962},
+ {1001, 3, 8764},
+ {1004, 6, 9824},
+ {1010, 3, 8834},
+ {1013, 4, 8838},
+ {1017, 3, 8721},
+ {1020, 3, 8835},
+ {1023, 4, 185},
+ {1027, 4, 178},
+ {1031, 4, 179},
+ {1035, 4, 8839},
+ {1039, 5, 223},
+ {1044, 3, 964},
+ {1047, 6, 8756},
+ {1053, 5, 952},
+ {1058, 8, 977},
+ {1066, 6, 8201},
+ {1072, 5, 254},
+ {1077, 5, 732},
+ {1082, 5, 215},
+ {1087, 5, 8482},
+ {1092, 4, 8657},
+ {1096, 6, 250},
+ {1102, 4, 8593},
+ {1106, 5, 251},
+ {1111, 6, 249},
+ {1117, 3, 168},
+ {1120, 5, 978},
+ {1125, 7, 965},
+ {1132, 4, 252},
+ {1136, 6, 8472},
+ {1142, 2, 958},
+ {1144, 6, 253},
+ {1150, 3, 165},
+ {1153, 4, 255},
+ {1157, 4, 950},
+ {1161, 3, 8205},
+ {1164, 4, 8204}
+};
diff --git a/unicode/unicode_linebreak.c b/unicode/unicode_linebreak.c
new file mode 100644
index 0000000..1105dec
--- /dev/null
+++ b/unicode/unicode_linebreak.c
@@ -0,0 +1,632 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <unistd.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "linebreaktab_internal.h"
+
+#include "linebreaktab.h"
+
+#define UNICODE_LB_SOT 0xFF
+
+struct unicode_lb_info {
+ int (*cb_func)(int, void *);
+ void *cb_arg;
+
+ int opts;
+
+ uint8_t savedclass;
+ size_t savedcmcnt;
+
+ uint8_t prevclass;
+ uint8_t prevclass_nsp;
+
+ int (*next_handler)(struct unicode_lb_info *, uint8_t);
+ int (*end_handler)(struct unicode_lb_info *);
+};
+
+
+/* http://www.unicode.org/reports/tr14/#Algorithm */
+
+static int next_def(unicode_lb_info_t, uint8_t);
+static int end_def(unicode_lb_info_t);
+
+static int next_lb25_seenophy(unicode_lb_info_t, uint8_t);
+static int end_lb25_seenophy(unicode_lb_info_t);
+
+static int next_lb25_seennu(unicode_lb_info_t, uint8_t);
+
+static int next_lb25_seennuclcp(unicode_lb_info_t, uint8_t);
+
+static void unicode_lb_reset(unicode_lb_info_t i)
+{
+ i->prevclass=i->prevclass_nsp=UNICODE_LB_SOT;
+ i->next_handler=next_def;
+ i->end_handler=end_def;
+}
+
+unicode_lb_info_t unicode_lb_init(int (*cb_func)(int, void *),
+ void *cb_arg)
+{
+ unicode_lb_info_t i=calloc(1, sizeof(struct unicode_lb_info));
+
+ i->cb_func=cb_func;
+ i->cb_arg=cb_arg;
+
+ unicode_lb_reset(i);
+ return i;
+}
+
+int unicode_lb_end(unicode_lb_info_t i)
+{
+ int rc=(*i->end_handler)(i);
+
+ free(i);
+ return rc;
+}
+
+void unicode_lb_set_opts(unicode_lb_info_t i, int opts)
+{
+ i->opts=opts;
+}
+
+/* Default end handler has nothing to do */
+
+static int end_def(unicode_lb_info_t i)
+{
+ /* LB3 N/A */
+ return 0;
+}
+#define RESULT(x) (*i->cb_func)((x), i->cb_arg)
+
+int unicode_lb_next_cnt(unicode_lb_info_t i,
+ const unicode_char *chars,
+ size_t cnt)
+{
+ while (cnt)
+ {
+ int rc=unicode_lb_next(i, *chars);
+
+ if (rc)
+ return rc;
+
+ ++chars;
+ --cnt;
+ }
+ return 0;
+}
+
+int unicode_lb_lookup(unicode_char ch)
+{
+ return unicode_tab_lookup(ch,
+ unicode_indextab,
+ sizeof(unicode_indextab)
+ / sizeof(unicode_indextab[0]),
+ unicode_rangetab,
+ unicode_classtab,
+ UNICODE_LB_AL /* XX, LB1 */);
+}
+
+int unicode_lb_next(unicode_lb_info_t i,
+ unicode_char ch)
+{
+ return (*i->next_handler)(i, (i->opts & UNICODE_LB_OPT_DASHWJ) &&
+ (ch == 0x2012 || ch == 0x2013)
+ ? UNICODE_LB_WJ:unicode_lb_lookup(ch));
+}
+
+static int next_def_nolb25(unicode_lb_info_t i,
+ uint8_t uclass,
+ int nolb25);
+
+/*
+** Default logic for next unicode char.
+*/
+static int next_def(unicode_lb_info_t i,
+ uint8_t uclass)
+{
+ return next_def_nolb25(i, uclass, 0);
+}
+
+static int next_def_nolb25(unicode_lb_info_t i,
+ uint8_t uclass,
+
+ /* Flag -- recursively invoked after discarding LB25 */
+ int nolb25)
+{
+
+ /* Retrieve the previous unicode character's linebreak class. */
+
+ uint8_t prevclass=i->prevclass;
+ uint8_t prevclass_nsp=i->prevclass_nsp;
+
+ /* Save this unicode char's linebreak class, for the next goaround */
+ i->prevclass=uclass;
+
+ if (uclass != UNICODE_LB_SP)
+ i->prevclass_nsp=uclass;
+
+ if (uclass == UNICODE_LB_NU)
+ i->next_handler=next_lb25_seennu; /* LB25 */
+
+ if (prevclass == UNICODE_LB_SOT)
+ {
+ if (uclass == UNICODE_LB_CM) /* LB9 */
+ i->prevclass=i->prevclass_nsp=uclass=UNICODE_LB_AL;
+
+ return RESULT(UNICODE_LB_NONE); /* LB2 */
+ }
+
+ if (prevclass == UNICODE_LB_CR && uclass == UNICODE_LB_LF)
+ return RESULT(UNICODE_LB_NONE); /* LB5 */
+
+ switch (prevclass) {
+ case UNICODE_LB_BK:
+ case UNICODE_LB_CR:
+ case UNICODE_LB_LF:
+ case UNICODE_LB_NL:
+
+ if (uclass == UNICODE_LB_CM)
+ {
+ i->prevclass=i->prevclass_nsp=uclass=UNICODE_LB_AL;
+ /* LB9 */
+ }
+
+ return RESULT(UNICODE_LB_MANDATORY); /* LB4, LB5 */
+
+ case UNICODE_LB_SP:
+ case UNICODE_LB_ZW:
+ if (uclass == UNICODE_LB_CM)
+ i->prevclass=i->prevclass_nsp=uclass=UNICODE_LB_AL;
+ /* LB10 */
+ break;
+ default:
+ break;
+ }
+
+ switch (uclass) {
+
+ /* LB6: */
+ case UNICODE_LB_BK:
+ case UNICODE_LB_CR:
+ case UNICODE_LB_LF:
+ case UNICODE_LB_NL:
+
+ /* LB7: */
+ case UNICODE_LB_SP:
+ case UNICODE_LB_ZW:
+
+ return RESULT(UNICODE_LB_NONE);
+ default:
+ break;
+ }
+
+ if (prevclass_nsp == UNICODE_LB_ZW)
+ return RESULT(UNICODE_LB_ALLOWED); /* LB8 */
+
+ if (uclass == UNICODE_LB_CM)
+ {
+ i->prevclass=prevclass;
+ i->prevclass_nsp=prevclass_nsp;
+ return RESULT(UNICODE_LB_NONE); /* LB9 */
+ }
+
+ if (prevclass == UNICODE_LB_WJ || uclass == UNICODE_LB_WJ)
+ return RESULT(UNICODE_LB_NONE); /* LB11 */
+
+ if (prevclass == UNICODE_LB_GL)
+ return RESULT(UNICODE_LB_NONE); /* LB12 */
+
+ if (uclass == UNICODE_LB_GL &&
+ prevclass != UNICODE_LB_SP &&
+ prevclass != UNICODE_LB_BA &&
+ prevclass != UNICODE_LB_HY)
+ return RESULT(UNICODE_LB_NONE); /* LB12a */
+
+
+ switch (uclass) {
+ case UNICODE_LB_SY:
+ if (i->opts & UNICODE_LB_OPT_SYBREAK)
+ {
+ if (prevclass == UNICODE_LB_SP)
+ return RESULT(UNICODE_LB_ALLOWED);
+ }
+
+ case UNICODE_LB_CL:
+ case UNICODE_LB_CP:
+ case UNICODE_LB_EX:
+ case UNICODE_LB_IS:
+ return RESULT(UNICODE_LB_NONE); /* LB13 */
+ default:
+ break;
+ }
+
+ if ((i->opts & UNICODE_LB_OPT_SYBREAK) && prevclass == UNICODE_LB_SY)
+ switch (uclass) {
+ case UNICODE_LB_EX:
+ case UNICODE_LB_AL:
+ case UNICODE_LB_ID:
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ if (prevclass_nsp == UNICODE_LB_OP)
+ return RESULT(UNICODE_LB_NONE); /* LB14 */
+
+ if (prevclass_nsp == UNICODE_LB_QU && uclass == UNICODE_LB_OP)
+ return RESULT(UNICODE_LB_NONE); /* LB15 */
+
+ if ((prevclass_nsp == UNICODE_LB_CL || prevclass_nsp == UNICODE_LB_CP)
+ && uclass == UNICODE_LB_NS)
+ return RESULT(UNICODE_LB_NONE); /* LB16 */
+
+ if (prevclass_nsp == UNICODE_LB_B2 && uclass == UNICODE_LB_B2)
+ return RESULT(UNICODE_LB_NONE); /* LB17 */
+
+ if (prevclass == UNICODE_LB_SP)
+ return RESULT(UNICODE_LB_ALLOWED); /* LB18 */
+
+ if (uclass == UNICODE_LB_QU || prevclass == UNICODE_LB_QU)
+ return RESULT(UNICODE_LB_NONE); /* LB19 */
+
+ if (uclass == UNICODE_LB_CB || prevclass == UNICODE_LB_CB)
+ return RESULT(UNICODE_LB_ALLOWED); /* LB20 */
+
+ /* LB21: */
+
+ switch (uclass) {
+ case UNICODE_LB_BA:
+ case UNICODE_LB_HY:
+ case UNICODE_LB_NS:
+ return RESULT(UNICODE_LB_NONE);
+ default:
+ break;
+ }
+
+ if (prevclass == UNICODE_LB_BB)
+ return RESULT(UNICODE_LB_NONE);
+
+ if (uclass == UNICODE_LB_IN)
+ switch (prevclass) {
+ case UNICODE_LB_AL:
+ case UNICODE_LB_ID:
+ case UNICODE_LB_IN:
+ case UNICODE_LB_NU:
+ return RESULT(UNICODE_LB_NONE); /* LB22 */
+ default:
+ break;
+ }
+
+
+ if (prevclass == UNICODE_LB_ID && uclass == UNICODE_LB_PO)
+ return RESULT(UNICODE_LB_NONE); /* LB23 */
+ if (prevclass == UNICODE_LB_AL && uclass == UNICODE_LB_NU)
+ return RESULT(UNICODE_LB_NONE); /* LB23 */
+
+ if (prevclass == UNICODE_LB_NU && uclass == UNICODE_LB_AL)
+ return RESULT(UNICODE_LB_NONE); /* LB23 */
+
+
+ if (prevclass == UNICODE_LB_PR && uclass == UNICODE_LB_ID)
+ return RESULT(UNICODE_LB_NONE); /* LB24 */
+ if (prevclass == UNICODE_LB_PR && uclass == UNICODE_LB_AL)
+ return RESULT(UNICODE_LB_NONE); /* LB24 */
+ if (prevclass == UNICODE_LB_PO && uclass == UNICODE_LB_AL)
+ return RESULT(UNICODE_LB_NONE); /* LB24 */
+
+ if ((i->opts & UNICODE_LB_OPT_PRBREAK) && uclass == UNICODE_LB_PR)
+ switch (prevclass) {
+ case UNICODE_LB_PR:
+ case UNICODE_LB_AL:
+ case UNICODE_LB_ID:
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ if (!nolb25 &&
+ (prevclass == UNICODE_LB_PR || prevclass == UNICODE_LB_PO))
+ {
+ if (uclass == UNICODE_LB_NU)
+ return RESULT(UNICODE_LB_NONE); /* LB25 */
+
+ if (uclass == UNICODE_LB_OP || uclass == UNICODE_LB_HY)
+ {
+ i->prevclass=prevclass;
+ i->prevclass_nsp=prevclass_nsp;
+
+ i->savedclass=uclass;
+ i->savedcmcnt=0;
+ i->next_handler=next_lb25_seenophy;
+ i->end_handler=end_lb25_seenophy;
+ return 0;
+ }
+ }
+
+ if ((prevclass == UNICODE_LB_OP || prevclass == UNICODE_LB_HY) &&
+ uclass == UNICODE_LB_NU)
+ return RESULT(UNICODE_LB_NONE); /* LB25 */
+
+ /*****/
+
+ if (prevclass == UNICODE_LB_JL)
+ switch (uclass) {
+ case UNICODE_LB_JL:
+ case UNICODE_LB_JV:
+ case UNICODE_LB_H2:
+ case UNICODE_LB_H3:
+ return RESULT(UNICODE_LB_NONE); /* LB26 */
+ default:
+ break;
+ }
+
+ if ((prevclass == UNICODE_LB_JV ||
+ prevclass == UNICODE_LB_H2) &&
+ (uclass == UNICODE_LB_JV ||
+ uclass == UNICODE_LB_JT))
+ return RESULT(UNICODE_LB_NONE); /* LB26 */
+
+ if ((prevclass == UNICODE_LB_JT ||
+ prevclass == UNICODE_LB_H3) &&
+ uclass == UNICODE_LB_JT)
+ return RESULT(UNICODE_LB_NONE); /* LB26 */
+
+
+ switch (prevclass) {
+ case UNICODE_LB_JL:
+ case UNICODE_LB_JV:
+ case UNICODE_LB_JT:
+ case UNICODE_LB_H2:
+ case UNICODE_LB_H3:
+ if (uclass == UNICODE_LB_IN || uclass == UNICODE_LB_PO)
+ return RESULT(UNICODE_LB_NONE); /* LB27 */
+ default:
+ break;
+ }
+
+ switch (uclass) {
+ case UNICODE_LB_JL:
+ case UNICODE_LB_JV:
+ case UNICODE_LB_JT:
+ case UNICODE_LB_H2:
+ case UNICODE_LB_H3:
+ if (prevclass == UNICODE_LB_PR)
+ return RESULT(UNICODE_LB_NONE); /* LB27 */
+ default:
+ break;
+ }
+
+ if (prevclass == UNICODE_LB_AL && uclass == UNICODE_LB_AL)
+ return RESULT(UNICODE_LB_NONE); /* LB28 */
+
+ if (prevclass == UNICODE_LB_IS && uclass == UNICODE_LB_AL)
+ return RESULT(UNICODE_LB_NONE); /* LB29 */
+
+ if ((prevclass == UNICODE_LB_AL || prevclass == UNICODE_LB_NU) &&
+ uclass == UNICODE_LB_OP)
+ return RESULT(UNICODE_LB_NONE); /* LB30 */
+
+ if ((uclass == UNICODE_LB_AL || uclass == UNICODE_LB_NU) &&
+ prevclass == UNICODE_LB_CP)
+ return RESULT(UNICODE_LB_NONE); /* LB30 */
+
+ return RESULT(UNICODE_LB_ALLOWED); /* LB31 */
+}
+
+/*
+** Seen (PR|PO)(OP|HY), without returning the linebreak property for the second
+** character, but NU did not follow. Backtrack.
+*/
+
+static int unwind_lb25_seenophy(unicode_lb_info_t i)
+{
+ int rc;
+
+ /*uint8_t class=i->savedclass;*/
+ int nolb25_flag=1;
+
+ i->next_handler=next_def;
+ i->end_handler=end_def;
+
+ do
+ {
+ rc=next_def_nolb25(i, i->savedclass, nolb25_flag);
+
+ if (rc)
+ return rc;
+
+ /*class=UNICODE_LB_CM;*/
+ nolb25_flag=0;
+ } while (i->savedcmcnt--);
+ return 0;
+}
+
+/*
+** Seen (PR|PO)(OP|HY), without returning the linebreak property for the second
+** character. If there's now a NU, we found the modified LB25 regexp.
+*/
+
+static int next_lb25_seenophy(unicode_lb_info_t i,
+ uint8_t uclass)
+{
+ int rc;
+
+ if (uclass == UNICODE_LB_CM)
+ {
+ ++i->savedcmcnt; /* Keep track of CMs, and try again */
+ return 0;
+ }
+
+ if (uclass != UNICODE_LB_NU)
+ {
+ rc=unwind_lb25_seenophy(i);
+
+ if (rc)
+ return rc;
+
+ return next_def_nolb25(i, uclass, 0);
+ }
+
+ do
+ {
+ rc=RESULT(UNICODE_LB_NONE); /* (OP|HY) feedback */
+
+ if (rc)
+ return rc;
+ } while (i->savedcmcnt--);
+
+ i->next_handler=next_lb25_seennu;
+ i->end_handler=end_def;
+ i->prevclass=i->prevclass_nsp=uclass;
+ return RESULT(UNICODE_LB_NONE);
+}
+
+/*
+** Seen (PR|PO)(OP|HY), and now The End. Unwind, and give up.
+*/
+
+static int end_lb25_seenophy(unicode_lb_info_t i)
+{
+ int rc=unwind_lb25_seenophy(i);
+
+ if (rc == 0)
+ rc=end_def(i);
+ return rc;
+}
+
+/*
+** Seen an NU, modified LB25 regexp.
+*/
+static int next_lb25_seennu(unicode_lb_info_t i, uint8_t uclass)
+{
+ if (uclass == UNICODE_LB_NU || uclass == UNICODE_LB_SY ||
+ uclass == UNICODE_LB_IS)
+ {
+ i->prevclass=i->prevclass_nsp=uclass;
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ if (uclass == UNICODE_LB_CM)
+ return RESULT(UNICODE_LB_NONE); /* LB9 */
+
+ if (uclass == UNICODE_LB_CL || uclass == UNICODE_LB_CP)
+ {
+ i->prevclass=i->prevclass_nsp=uclass;
+ i->next_handler=next_lb25_seennuclcp;
+ i->end_handler=end_def;
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ i->next_handler=next_def;
+ i->end_handler=end_def;
+
+ if (uclass == UNICODE_LB_PR || uclass == UNICODE_LB_PO)
+ {
+ i->prevclass=i->prevclass_nsp=uclass;
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ return next_def(i, uclass); /* Not a prefix, process normally */
+}
+
+/*
+** Seen CL|CP, in the modified LB25 regexp.
+*/
+static int next_lb25_seennuclcp(unicode_lb_info_t i, uint8_t uclass)
+{
+ if (uclass == UNICODE_LB_CM)
+ return RESULT(UNICODE_LB_NONE); /* LB9 */
+
+ i->next_handler=next_def;
+ i->end_handler=end_def;
+
+ if (uclass == UNICODE_LB_PR || uclass == UNICODE_LB_PO)
+ {
+ i->prevclass=i->prevclass_nsp=uclass;
+
+ return RESULT(UNICODE_LB_NONE);
+ }
+
+ return next_def(i, uclass);
+}
+
+/******************/
+
+struct unicode_lbc_info {
+ unicode_lb_info_t handle;
+
+ struct unicode_buf buf;
+
+ size_t buf_ptr;
+
+ int (*cb_func)(int, unicode_char, void *);
+ void *cb_arg;
+};
+
+static int unicode_lbc_callback(int value, void *ptr)
+{
+ unicode_lbc_info_t h=(unicode_lbc_info_t)ptr;
+
+ if (h->buf_ptr >= unicode_buf_len(&h->buf))
+ {
+ errno=EINVAL;
+ return -1; /* Shouldn't happen */
+ }
+
+ return (*h->cb_func)(value, unicode_buf_ptr(&h->buf)[h->buf_ptr++],
+ h->cb_arg);
+}
+
+unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, void *),
+ void *cb_arg)
+{
+ unicode_lbc_info_t h=
+ (unicode_lbc_info_t)calloc(1, sizeof(struct unicode_lbc_info));
+
+ if (!h)
+ return NULL;
+
+ h->cb_func=cb_func;
+ h->cb_arg=cb_arg;
+
+ if ((h->handle=unicode_lb_init(unicode_lbc_callback, h)) == NULL)
+ {
+ free(h);
+ return NULL;
+ }
+ unicode_buf_init(&h->buf, (size_t)-1);
+ return h;
+}
+
+void unicode_lbc_set_opts(unicode_lbc_info_t i, int opts)
+{
+ unicode_lb_set_opts(i->handle, opts);
+}
+
+int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch)
+{
+ if (i->buf_ptr >= unicode_buf_len(&i->buf))
+ {
+ i->buf_ptr=0;
+ unicode_buf_clear(&i->buf);
+ }
+
+ unicode_buf_append(&i->buf, &ch, 1);
+ return unicode_lb_next(i->handle, ch);
+}
+
+int unicode_lbc_end(unicode_lbc_info_t i)
+{
+ int rc=unicode_lb_end(i->handle);
+
+ unicode_buf_deinit(&i->buf);
+ free(i);
+ return rc;
+}
diff --git a/unicode/unicode_tablookup.c b/unicode/unicode_tablookup.c
new file mode 100644
index 0000000..c61526d
--- /dev/null
+++ b/unicode/unicode_tablookup.c
@@ -0,0 +1,49 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+#define BLOCK_SIZE 256
+
+uint8_t unicode_tab_lookup(unicode_char ch,
+ const size_t *unicode_indextab,
+ size_t unicode_indextab_sizeof,
+ const uint8_t (*unicode_rangetab)[2],
+ const uint8_t *unicode_classtab,
+ uint8_t uclass)
+{
+ size_t cl=ch / BLOCK_SIZE;
+
+ if (cl < unicode_indextab_sizeof-1)
+ {
+ const size_t start_pos=unicode_indextab[cl];
+ const uint8_t (*p)[2]=unicode_rangetab + start_pos;
+ size_t b=0, e=unicode_indextab[cl+1] - start_pos;
+ uint8_t chmodcl= ch & (BLOCK_SIZE-1);
+
+ while (b < e)
+ {
+ size_t n=b + (e-b)/2;
+
+ if (chmodcl >= p[n][0])
+ {
+ if (chmodcl <= p[n][1])
+ {
+ uclass=unicode_classtab[start_pos+n];
+ break;
+ }
+ b=n+1;
+ }
+ else
+ {
+ e=n;
+ }
+ }
+ }
+
+ return uclass;
+}
diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c
new file mode 100644
index 0000000..e0c339e
--- /dev/null
+++ b/unicode/unicode_ultcase.c
@@ -0,0 +1,57 @@
+/*
+** Copyright 2000-2003 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+extern const unsigned unicode_case_hash;
+extern const unicode_char unicode_case_tab[][4];
+extern const unsigned unicode_case_offset[];
+
+static unsigned find_case(unicode_char c)
+{
+ unsigned idx= c % unicode_case_hash;
+
+ unsigned i=unicode_case_offset[idx];
+
+ unicode_char uc;
+
+ --i;
+
+ do
+ {
+ uc=unicode_case_tab[++i][0];
+ if (uc == c)
+ return (i);
+ } while ( (uc % unicode_case_hash) == idx);
+
+ return (0);
+}
+
+unicode_char unicode_uc(unicode_char c)
+{
+ unsigned i=find_case(c);
+
+ return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][1]);
+}
+
+unicode_char unicode_lc(unicode_char c)
+{
+ unsigned i=find_case(c);
+
+ return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][2]);
+}
+
+unicode_char unicode_tc(unicode_char c)
+{
+ unsigned i;
+ unicode_char oc=c;
+
+ c=unicode_lc(c);
+ i=find_case(c);
+
+ return (unicode_case_tab[i][0] != c ? oc:unicode_case_tab[i][3]);
+}
diff --git a/unicode/unicode_ultcasetab.c b/unicode/unicode_ultcasetab.c
new file mode 100644
index 0000000..ae75340
--- /dev/null
+++ b/unicode/unicode_ultcasetab.c
@@ -0,0 +1,663 @@
+/*
+** Copyright 2000-2004 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode.h"
+
+const unsigned unicode_case_hash=2048;
+/* unicode_case_maxbucket=5*/
+const unicode_char unicode_case_tab[][4]={
+{0x0041,0x0041,0x0061,0x0041},{0x0042,0x0042,0x0062,0x0042},{0x0043,0x0043,0x0063,0x0043},{0x0044,0x0044,0x0064,0x0044},
+{0x0045,0x0045,0x0065,0x0045},{0x0046,0x0046,0x0066,0x0046},{0x0047,0x0047,0x0067,0x0047},{0x0048,0x0048,0x0068,0x0048},
+{0x0049,0x0049,0x0069,0x0049},{0x004a,0x004a,0x006a,0x004a},{0x004b,0x004b,0x006b,0x004b},{0x004c,0x004c,0x006c,0x004c},
+{0x004d,0x004d,0x006d,0x004d},{0x004e,0x004e,0x006e,0x004e},{0x004f,0x004f,0x006f,0x004f},{0x0050,0x0050,0x0070,0x0050},
+{0x0051,0x0051,0x0071,0x0051},{0x0052,0x0052,0x0072,0x0052},{0x0053,0x0053,0x0073,0x0053},{0x0054,0x0054,0x0074,0x0054},
+{0x0055,0x0055,0x0075,0x0055},{0x0056,0x0056,0x0076,0x0056},{0x0057,0x0057,0x0077,0x0057},{0x0058,0x0058,0x0078,0x0058},
+{0x0059,0x0059,0x0079,0x0059},{0x005a,0x005a,0x007a,0x005a},{0x0061,0x0041,0x0061,0x0041},{0x0062,0x0042,0x0062,0x0042},
+{0x0063,0x0043,0x0063,0x0043},{0x0064,0x0044,0x0064,0x0044},{0x0065,0x0045,0x0065,0x0045},{0x0066,0x0046,0x0066,0x0046},
+{0x0067,0x0047,0x0067,0x0047},{0x0068,0x0048,0x0068,0x0048},{0x0069,0x0049,0x0069,0x0049},{0x006a,0x004a,0x006a,0x004a},
+{0x006b,0x004b,0x006b,0x004b},{0x006c,0x004c,0x006c,0x004c},{0x006d,0x004d,0x006d,0x004d},{0x006e,0x004e,0x006e,0x004e},
+{0x006f,0x004f,0x006f,0x004f},{0x0070,0x0050,0x0070,0x0050},{0x0071,0x0051,0x0071,0x0051},{0x0072,0x0052,0x0072,0x0052},
+{0x0073,0x0053,0x0073,0x0053},{0x0074,0x0054,0x0074,0x0054},{0x0075,0x0055,0x0075,0x0055},{0x0076,0x0056,0x0076,0x0056},
+{0x0077,0x0057,0x0077,0x0057},{0x0078,0x0058,0x0078,0x0058},{0x0079,0x0059,0x0079,0x0059},{0x007a,0x005a,0x007a,0x005a},
+{0x10a0,0x10a0,0x2d00,0x10a0},{0x10a1,0x10a1,0x2d01,0x10a1},{0x10a2,0x10a2,0x2d02,0x10a2},{0x10a3,0x10a3,0x2d03,0x10a3},
+{0x10a4,0x10a4,0x2d04,0x10a4},{0x10a5,0x10a5,0x2d05,0x10a5},{0x10a6,0x10a6,0x2d06,0x10a6},{0x10a7,0x10a7,0x2d07,0x10a7},
+{0x10a8,0x10a8,0x2d08,0x10a8},{0x10a9,0x10a9,0x2d09,0x10a9},{0x10aa,0x10aa,0x2d0a,0x10aa},{0x10ab,0x10ab,0x2d0b,0x10ab},
+{0x10ac,0x10ac,0x2d0c,0x10ac},{0x10ad,0x10ad,0x2d0d,0x10ad},{0x10ae,0x10ae,0x2d0e,0x10ae},{0x10af,0x10af,0x2d0f,0x10af},
+{0x10b0,0x10b0,0x2d10,0x10b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x10b2,0x10b2,0x2d12,0x10b2},{0x10b3,0x10b3,0x2d13,0x10b3},
+{0x10b4,0x10b4,0x2d14,0x10b4},{0x00b5,0x039c,0x00b5,0x039c},{0x10b5,0x10b5,0x2d15,0x10b5},{0x10b6,0x10b6,0x2d16,0x10b6},
+{0x10b7,0x10b7,0x2d17,0x10b7},{0x10b8,0x10b8,0x2d18,0x10b8},{0x10b9,0x10b9,0x2d19,0x10b9},{0x10ba,0x10ba,0x2d1a,0x10ba},
+{0x10bb,0x10bb,0x2d1b,0x10bb},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x10bd,0x10bd,0x2d1d,0x10bd},{0x10be,0x10be,0x2d1e,0x10be},
+{0x10bf,0x10bf,0x2d1f,0x10bf},{0x00c0,0x00c0,0x00e0,0x00c0},{0x10c0,0x10c0,0x2d20,0x10c0},{0x00c1,0x00c1,0x00e1,0x00c1},
+{0x10c1,0x10c1,0x2d21,0x10c1},{0x00c2,0x00c2,0x00e2,0x00c2},{0x10c2,0x10c2,0x2d22,0x10c2},{0x10c3,0x10c3,0x2d23,0x10c3},
+{0x00c3,0x00c3,0x00e3,0x00c3},{0x10c4,0x10c4,0x2d24,0x10c4},{0x00c4,0x00c4,0x00e4,0x00c4},{0x10c5,0x10c5,0x2d25,0x10c5},
+{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6},{0x00c7,0x00c7,0x00e7,0x00c7},{0x00c8,0x00c8,0x00e8,0x00c8},
+{0x00c9,0x00c9,0x00e9,0x00c9},{0x00ca,0x00ca,0x00ea,0x00ca},{0x00cb,0x00cb,0x00eb,0x00cb},{0x00cc,0x00cc,0x00ec,0x00cc},
+{0x00cd,0x00cd,0x00ed,0x00cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x00cf,0x00cf,0x00ef,0x00cf},{0x00d0,0x00d0,0x00f0,0x00d0},
+{0x00d1,0x00d1,0x00f1,0x00d1},{0x00d2,0x00d2,0x00f2,0x00d2},{0x00d3,0x00d3,0x00f3,0x00d3},{0x00d4,0x00d4,0x00f4,0x00d4},
+{0x00d5,0x00d5,0x00f5,0x00d5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x00d8,0x00d8,0x00f8,0x00d8},{0x00d9,0x00d9,0x00f9,0x00d9},
+{0x00da,0x00da,0x00fa,0x00da},{0x00db,0x00db,0x00fb,0x00db},{0x00dc,0x00dc,0x00fc,0x00dc},{0x00dd,0x00dd,0x00fd,0x00dd},
+{0x00de,0x00de,0x00fe,0x00de},{0x00e0,0x00c0,0x00e0,0x00c0},{0x00e1,0x00c1,0x00e1,0x00c1},{0x00e2,0x00c2,0x00e2,0x00c2},
+{0x00e3,0x00c3,0x00e3,0x00c3},{0x00e4,0x00c4,0x00e4,0x00c4},{0x00e5,0x00c5,0x00e5,0x00c5},{0x00e6,0x00c6,0x00e6,0x00c6},
+{0x00e7,0x00c7,0x00e7,0x00c7},{0x00e8,0x00c8,0x00e8,0x00c8},{0x00e9,0x00c9,0x00e9,0x00c9},{0x00ea,0x00ca,0x00ea,0x00ca},
+{0x00eb,0x00cb,0x00eb,0x00cb},{0x00ec,0x00cc,0x00ec,0x00cc},{0x00ed,0x00cd,0x00ed,0x00cd},{0x00ee,0x00ce,0x00ee,0x00ce},
+{0x00ef,0x00cf,0x00ef,0x00cf},{0x00f0,0x00d0,0x00f0,0x00d0},{0x00f1,0x00d1,0x00f1,0x00d1},{0x00f2,0x00d2,0x00f2,0x00d2},
+{0x00f3,0x00d3,0x00f3,0x00d3},{0x00f4,0x00d4,0x00f4,0x00d4},{0x00f5,0x00d5,0x00f5,0x00d5},{0x00f6,0x00d6,0x00f6,0x00d6},
+{0x00f8,0x00d8,0x00f8,0x00d8},{0x00f9,0x00d9,0x00f9,0x00d9},{0x00fa,0x00da,0x00fa,0x00da},{0x00fb,0x00db,0x00fb,0x00db},
+{0x00fc,0x00dc,0x00fc,0x00dc},{0x00fd,0x00dd,0x00fd,0x00dd},{0x00fe,0x00de,0x00fe,0x00de},{0x00ff,0x0178,0x00ff,0x0178},
+{0x0100,0x0100,0x0101,0x0100},{0x0101,0x0100,0x0101,0x0100},{0x0102,0x0102,0x0103,0x0102},{0x0103,0x0102,0x0103,0x0102},
+{0x0104,0x0104,0x0105,0x0104},{0x0105,0x0104,0x0105,0x0104},{0x0106,0x0106,0x0107,0x0106},{0x0107,0x0106,0x0107,0x0106},
+{0x0108,0x0108,0x0109,0x0108},{0x0109,0x0108,0x0109,0x0108},{0x010a,0x010a,0x010b,0x010a},{0x010b,0x010a,0x010b,0x010a},
+{0x010c,0x010c,0x010d,0x010c},{0x010d,0x010c,0x010d,0x010c},{0x010e,0x010e,0x010f,0x010e},{0x010f,0x010e,0x010f,0x010e},
+{0x0110,0x0110,0x0111,0x0110},{0x0111,0x0110,0x0111,0x0110},{0x0112,0x0112,0x0113,0x0112},{0x0113,0x0112,0x0113,0x0112},
+{0x0114,0x0114,0x0115,0x0114},{0x0115,0x0114,0x0115,0x0114},{0x0116,0x0116,0x0117,0x0116},{0x0117,0x0116,0x0117,0x0116},
+{0x0118,0x0118,0x0119,0x0118},{0x0119,0x0118,0x0119,0x0118},{0x011a,0x011a,0x011b,0x011a},{0x011b,0x011a,0x011b,0x011a},
+{0x011c,0x011c,0x011d,0x011c},{0x011d,0x011c,0x011d,0x011c},{0x011e,0x011e,0x011f,0x011e},{0x011f,0x011e,0x011f,0x011e},
+{0x0120,0x0120,0x0121,0x0120},{0x0121,0x0120,0x0121,0x0120},{0x0122,0x0122,0x0123,0x0122},{0x0123,0x0122,0x0123,0x0122},
+{0x0124,0x0124,0x0125,0x0124},{0x0125,0x0124,0x0125,0x0124},{0x0126,0x0126,0x0127,0x0126},{0x2126,0x2126,0x03c9,0x2126},
+{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128},{0x0129,0x0128,0x0129,0x0128},{0x212a,0x212a,0x006b,0x212a},
+{0x012a,0x012a,0x012b,0x012a},{0x012b,0x012a,0x012b,0x012a},{0x212b,0x212b,0x00e5,0x212b},{0x012c,0x012c,0x012d,0x012c},
+{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e},{0x012f,0x012e,0x012f,0x012e},{0x0130,0x0130,0x0069,0x0130},
+{0x0131,0x0049,0x0131,0x0049},{0x2132,0x2132,0x214e,0x2132},{0x0132,0x0132,0x0133,0x0132},{0x0133,0x0132,0x0133,0x0132},
+{0x0134,0x0134,0x0135,0x0134},{0x0135,0x0134,0x0135,0x0134},{0x0136,0x0136,0x0137,0x0136},{0x0137,0x0136,0x0137,0x0136},
+{0x0139,0x0139,0x013a,0x0139},{0x013a,0x0139,0x013a,0x0139},{0x013b,0x013b,0x013c,0x013b},{0x013c,0x013b,0x013c,0x013b},
+{0x013d,0x013d,0x013e,0x013d},{0x013e,0x013d,0x013e,0x013d},{0x013f,0x013f,0x0140,0x013f},{0x0140,0x013f,0x0140,0x013f},
+{0x0141,0x0141,0x0142,0x0141},{0x0142,0x0141,0x0142,0x0141},{0x0143,0x0143,0x0144,0x0143},{0x0144,0x0143,0x0144,0x0143},
+{0x0145,0x0145,0x0146,0x0145},{0x0146,0x0145,0x0146,0x0145},{0x0147,0x0147,0x0148,0x0147},{0x0148,0x0147,0x0148,0x0147},
+{0x014a,0x014a,0x014b,0x014a},{0x014b,0x014a,0x014b,0x014a},{0x014c,0x014c,0x014d,0x014c},{0x014d,0x014c,0x014d,0x014c},
+{0x014e,0x014e,0x014f,0x014e},{0x214e,0x2132,0x214e,0x2132},{0x014f,0x014e,0x014f,0x014e},{0x0150,0x0150,0x0151,0x0150},
+{0x0151,0x0150,0x0151,0x0150},{0x0152,0x0152,0x0153,0x0152},{0x0153,0x0152,0x0153,0x0152},{0x0154,0x0154,0x0155,0x0154},
+{0x0155,0x0154,0x0155,0x0154},{0x0156,0x0156,0x0157,0x0156},{0x0157,0x0156,0x0157,0x0156},{0x0158,0x0158,0x0159,0x0158},
+{0x0159,0x0158,0x0159,0x0158},{0x015a,0x015a,0x015b,0x015a},{0x015b,0x015a,0x015b,0x015a},{0x015c,0x015c,0x015d,0x015c},
+{0x015d,0x015c,0x015d,0x015c},{0x015e,0x015e,0x015f,0x015e},{0x015f,0x015e,0x015f,0x015e},{0x2160,0x2160,0x2170,0x2160},
+{0x0160,0x0160,0x0161,0x0160},{0x0161,0x0160,0x0161,0x0160},{0x2161,0x2161,0x2171,0x2161},{0x2162,0x2162,0x2172,0x2162},
+{0x0162,0x0162,0x0163,0x0162},{0x2163,0x2163,0x2173,0x2163},{0x0163,0x0162,0x0163,0x0162},{0x0164,0x0164,0x0165,0x0164},
+{0x2164,0x2164,0x2174,0x2164},{0x2165,0x2165,0x2175,0x2165},{0x0165,0x0164,0x0165,0x0164},{0x2166,0x2166,0x2176,0x2166},
+{0x0166,0x0166,0x0167,0x0166},{0x2167,0x2167,0x2177,0x2167},{0x0167,0x0166,0x0167,0x0166},{0x0168,0x0168,0x0169,0x0168},
+{0x2168,0x2168,0x2178,0x2168},{0x0169,0x0168,0x0169,0x0168},{0x2169,0x2169,0x2179,0x2169},{0x216a,0x216a,0x217a,0x216a},
+{0x016a,0x016a,0x016b,0x016a},{0x216b,0x216b,0x217b,0x216b},{0x016b,0x016a,0x016b,0x016a},{0x216c,0x216c,0x217c,0x216c},
+{0x016c,0x016c,0x016d,0x016c},{0x216d,0x216d,0x217d,0x216d},{0x016d,0x016c,0x016d,0x016c},{0x216e,0x216e,0x217e,0x216e},
+{0x016e,0x016e,0x016f,0x016e},{0x016f,0x016e,0x016f,0x016e},{0x216f,0x216f,0x217f,0x216f},{0x2170,0x2160,0x2170,0x2160},
+{0x0170,0x0170,0x0171,0x0170},{0x2171,0x2161,0x2171,0x2161},{0x0171,0x0170,0x0171,0x0170},{0x0172,0x0172,0x0173,0x0172},
+{0x2172,0x2162,0x2172,0x2162},{0x2173,0x2163,0x2173,0x2163},{0x0173,0x0172,0x0173,0x0172},{0x2174,0x2164,0x2174,0x2164},
+{0x0174,0x0174,0x0175,0x0174},{0x0175,0x0174,0x0175,0x0174},{0x2175,0x2165,0x2175,0x2165},{0x2176,0x2166,0x2176,0x2166},
+{0x0176,0x0176,0x0177,0x0176},{0x0177,0x0176,0x0177,0x0176},{0x2177,0x2167,0x2177,0x2167},{0x0178,0x0178,0x00ff,0x0178},
+{0x2178,0x2168,0x2178,0x2168},{0x2179,0x2169,0x2179,0x2169},{0x0179,0x0179,0x017a,0x0179},{0x217a,0x216a,0x217a,0x216a},
+{0x017a,0x0179,0x017a,0x0179},{0x217b,0x216b,0x217b,0x216b},{0x017b,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},
+{0x017c,0x017b,0x017c,0x017b},{0x217d,0x216d,0x217d,0x216d},{0x017d,0x017d,0x017e,0x017d},{0x017e,0x017d,0x017e,0x017d},
+{0x217e,0x216e,0x217e,0x216e},{0x017f,0x0053,0x017f,0x0053},{0x217f,0x216f,0x217f,0x216f},{0x0180,0x0243,0x0180,0x0243},
+{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182},{0x0183,0x0182,0x0183,0x0182},{0x2183,0x2183,0x2184,0x2183},
+{0x0184,0x0184,0x0185,0x0184},{0x2184,0x2183,0x2184,0x2183},{0x0185,0x0184,0x0185,0x0184},{0x0186,0x0186,0x0254,0x0186},
+{0x0187,0x0187,0x0188,0x0187},{0x0188,0x0187,0x0188,0x0187},{0x0189,0x0189,0x0256,0x0189},{0x018a,0x018a,0x0257,0x018a},
+{0x018b,0x018b,0x018c,0x018b},{0x018c,0x018b,0x018c,0x018b},{0x018e,0x018e,0x01dd,0x018e},{0x018f,0x018f,0x0259,0x018f},
+{0x0190,0x0190,0x025b,0x0190},{0x0191,0x0191,0x0192,0x0191},{0x0192,0x0191,0x0192,0x0191},{0x0193,0x0193,0x0260,0x0193},
+{0x0194,0x0194,0x0263,0x0194},{0x0195,0x01f6,0x0195,0x01f6},{0x0196,0x0196,0x0269,0x0196},{0x0197,0x0197,0x0268,0x0197},
+{0x0198,0x0198,0x0199,0x0198},{0x0199,0x0198,0x0199,0x0198},{0x019a,0x023d,0x019a,0x023d},{0x019c,0x019c,0x026f,0x019c},
+{0x019d,0x019d,0x0272,0x019d},{0x019e,0x0220,0x019e,0x0220},{0x019f,0x019f,0x0275,0x019f},{0x01a0,0x01a0,0x01a1,0x01a0},
+{0x01a1,0x01a0,0x01a1,0x01a0},{0x01a2,0x01a2,0x01a3,0x01a2},{0x01a3,0x01a2,0x01a3,0x01a2},{0x01a4,0x01a4,0x01a5,0x01a4},
+{0x01a5,0x01a4,0x01a5,0x01a4},{0x01a6,0x01a6,0x0280,0x01a6},{0x01a7,0x01a7,0x01a8,0x01a7},{0x01a8,0x01a7,0x01a8,0x01a7},
+{0x01a9,0x01a9,0x0283,0x01a9},{0x01ac,0x01ac,0x01ad,0x01ac},{0x01ad,0x01ac,0x01ad,0x01ac},{0x01ae,0x01ae,0x0288,0x01ae},
+{0x01af,0x01af,0x01b0,0x01af},{0x01b0,0x01af,0x01b0,0x01af},{0x01b1,0x01b1,0x028a,0x01b1},{0x01b2,0x01b2,0x028b,0x01b2},
+{0x01b3,0x01b3,0x01b4,0x01b3},{0x01b4,0x01b3,0x01b4,0x01b3},{0x01b5,0x01b5,0x01b6,0x01b5},{0x01b6,0x01b5,0x01b6,0x01b5},
+{0x01b7,0x01b7,0x0292,0x01b7},{0x01b8,0x01b8,0x01b9,0x01b8},{0x01b9,0x01b8,0x01b9,0x01b8},{0x01bc,0x01bc,0x01bd,0x01bc},
+{0x01bd,0x01bc,0x01bd,0x01bc},{0x01bf,0x01f7,0x01bf,0x01f7},{0x01c4,0x01c4,0x01c6,0x01c5},{0x01c5,0x01c4,0x01c6,0x01c5},
+{0x01c6,0x01c4,0x01c6,0x01c5},{0x01c7,0x01c7,0x01c9,0x01c8},{0x01c8,0x01c7,0x01c9,0x01c8},{0x01c9,0x01c7,0x01c9,0x01c8},
+{0x01ca,0x01ca,0x01cc,0x01cb},{0x01cb,0x01ca,0x01cc,0x01cb},{0x01cc,0x01ca,0x01cc,0x01cb},{0x01cd,0x01cd,0x01ce,0x01cd},
+{0x01ce,0x01cd,0x01ce,0x01cd},{0x01cf,0x01cf,0x01d0,0x01cf},{0x01d0,0x01cf,0x01d0,0x01cf},{0x01d1,0x01d1,0x01d2,0x01d1},
+{0x01d2,0x01d1,0x01d2,0x01d1},{0x01d3,0x01d3,0x01d4,0x01d3},{0x01d4,0x01d3,0x01d4,0x01d3},{0x01d5,0x01d5,0x01d6,0x01d5},
+{0x01d6,0x01d5,0x01d6,0x01d5},{0x01d7,0x01d7,0x01d8,0x01d7},{0x01d8,0x01d7,0x01d8,0x01d7},{0x01d9,0x01d9,0x01da,0x01d9},
+{0x01da,0x01d9,0x01da,0x01d9},{0x01db,0x01db,0x01dc,0x01db},{0x01dc,0x01db,0x01dc,0x01db},{0x01dd,0x018e,0x01dd,0x018e},
+{0x01de,0x01de,0x01df,0x01de},{0x01df,0x01de,0x01df,0x01de},{0x01e0,0x01e0,0x01e1,0x01e0},{0x01e1,0x01e0,0x01e1,0x01e0},
+{0x01e2,0x01e2,0x01e3,0x01e2},{0x01e3,0x01e2,0x01e3,0x01e2},{0x01e4,0x01e4,0x01e5,0x01e4},{0x01e5,0x01e4,0x01e5,0x01e4},
+{0x01e6,0x01e6,0x01e7,0x01e6},{0x01e7,0x01e6,0x01e7,0x01e6},{0x01e8,0x01e8,0x01e9,0x01e8},{0x01e9,0x01e8,0x01e9,0x01e8},
+{0x01ea,0x01ea,0x01eb,0x01ea},{0x01eb,0x01ea,0x01eb,0x01ea},{0x01ec,0x01ec,0x01ed,0x01ec},{0x01ed,0x01ec,0x01ed,0x01ec},
+{0x01ee,0x01ee,0x01ef,0x01ee},{0x01ef,0x01ee,0x01ef,0x01ee},{0x01f1,0x01f1,0x01f3,0x01f2},{0x01f2,0x01f1,0x01f3,0x01f2},
+{0x01f3,0x01f1,0x01f3,0x01f2},{0x01f4,0x01f4,0x01f5,0x01f4},{0x01f5,0x01f4,0x01f5,0x01f4},{0x01f6,0x01f6,0x0195,0x01f6},
+{0x01f7,0x01f7,0x01bf,0x01f7},{0x01f8,0x01f8,0x01f9,0x01f8},{0x01f9,0x01f8,0x01f9,0x01f8},{0x01fa,0x01fa,0x01fb,0x01fa},
+{0x01fb,0x01fa,0x01fb,0x01fa},{0x01fc,0x01fc,0x01fd,0x01fc},{0x01fd,0x01fc,0x01fd,0x01fc},{0x01fe,0x01fe,0x01ff,0x01fe},
+{0x01ff,0x01fe,0x01ff,0x01fe},{0x0200,0x0200,0x0201,0x0200},{0x0201,0x0200,0x0201,0x0200},{0x0202,0x0202,0x0203,0x0202},
+{0x0203,0x0202,0x0203,0x0202},{0x0204,0x0204,0x0205,0x0204},{0x0205,0x0204,0x0205,0x0204},{0x0206,0x0206,0x0207,0x0206},
+{0x0207,0x0206,0x0207,0x0206},{0x0208,0x0208,0x0209,0x0208},{0x0209,0x0208,0x0209,0x0208},{0x020a,0x020a,0x020b,0x020a},
+{0x020b,0x020a,0x020b,0x020a},{0x020c,0x020c,0x020d,0x020c},{0x020d,0x020c,0x020d,0x020c},{0x020e,0x020e,0x020f,0x020e},
+{0x020f,0x020e,0x020f,0x020e},{0x0210,0x0210,0x0211,0x0210},{0x0211,0x0210,0x0211,0x0210},{0x0212,0x0212,0x0213,0x0212},
+{0x0213,0x0212,0x0213,0x0212},{0x0214,0x0214,0x0215,0x0214},{0x0215,0x0214,0x0215,0x0214},{0x0216,0x0216,0x0217,0x0216},
+{0x0217,0x0216,0x0217,0x0216},{0x0218,0x0218,0x0219,0x0218},{0x0219,0x0218,0x0219,0x0218},{0x021a,0x021a,0x021b,0x021a},
+{0x021b,0x021a,0x021b,0x021a},{0x021c,0x021c,0x021d,0x021c},{0x021d,0x021c,0x021d,0x021c},{0x021e,0x021e,0x021f,0x021e},
+{0x021f,0x021e,0x021f,0x021e},{0x0220,0x0220,0x019e,0x0220},{0x0222,0x0222,0x0223,0x0222},{0x0223,0x0222,0x0223,0x0222},
+{0x0224,0x0224,0x0225,0x0224},{0x0225,0x0224,0x0225,0x0224},{0x0226,0x0226,0x0227,0x0226},{0x0227,0x0226,0x0227,0x0226},
+{0x0228,0x0228,0x0229,0x0228},{0x0229,0x0228,0x0229,0x0228},{0x022a,0x022a,0x022b,0x022a},{0x022b,0x022a,0x022b,0x022a},
+{0x022c,0x022c,0x022d,0x022c},{0x022d,0x022c,0x022d,0x022c},{0x022e,0x022e,0x022f,0x022e},{0x022f,0x022e,0x022f,0x022e},
+{0x0230,0x0230,0x0231,0x0230},{0x0231,0x0230,0x0231,0x0230},{0x0232,0x0232,0x0233,0x0232},{0x0233,0x0232,0x0233,0x0232},
+{0x023a,0x023a,0x2c65,0x023a},{0x023b,0x023b,0x023c,0x023b},{0x023c,0x023b,0x023c,0x023b},{0x023d,0x023d,0x019a,0x023d},
+{0x023e,0x023e,0x2c66,0x023e},{0x023f,0x2c7e,0x023f,0x2c7e},{0x0240,0x2c7f,0x0240,0x2c7f},{0x0241,0x0241,0x0242,0x0241},
+{0x0242,0x0241,0x0242,0x0241},{0x0243,0x0243,0x0180,0x0243},{0x0244,0x0244,0x0289,0x0244},{0x0245,0x0245,0x028c,0x0245},
+{0x0246,0x0246,0x0247,0x0246},{0x0247,0x0246,0x0247,0x0246},{0x0248,0x0248,0x0249,0x0248},{0x0249,0x0248,0x0249,0x0248},
+{0x024a,0x024a,0x024b,0x024a},{0x024b,0x024a,0x024b,0x024a},{0x024c,0x024c,0x024d,0x024c},{0x024d,0x024c,0x024d,0x024c},
+{0x024e,0x024e,0x024f,0x024e},{0x024f,0x024e,0x024f,0x024e},{0x0250,0x2c6f,0x0250,0x2c6f},{0x0251,0x2c6d,0x0251,0x2c6d},
+{0x0252,0x2c70,0x0252,0x2c70},{0x0253,0x0181,0x0253,0x0181},{0x0254,0x0186,0x0254,0x0186},{0x0256,0x0189,0x0256,0x0189},
+{0x0257,0x018a,0x0257,0x018a},{0x0259,0x018f,0x0259,0x018f},{0x025b,0x0190,0x025b,0x0190},{0x0260,0x0193,0x0260,0x0193},
+{0x0263,0x0194,0x0263,0x0194},{0x0265,0xa78d,0x0265,0xa78d},{0x0268,0x0197,0x0268,0x0197},{0x0269,0x0196,0x0269,0x0196},
+{0x026b,0x2c62,0x026b,0x2c62},{0x026f,0x019c,0x026f,0x019c},{0x0271,0x2c6e,0x0271,0x2c6e},{0x0272,0x019d,0x0272,0x019d},
+{0x0275,0x019f,0x0275,0x019f},{0x027d,0x2c64,0x027d,0x2c64},{0x0280,0x01a6,0x0280,0x01a6},{0x0283,0x01a9,0x0283,0x01a9},
+{0x0288,0x01ae,0x0288,0x01ae},{0x0289,0x0244,0x0289,0x0244},{0x028a,0x01b1,0x028a,0x01b1},{0x028b,0x01b2,0x028b,0x01b2},
+{0x028c,0x0245,0x028c,0x0245},{0x0292,0x01b7,0x0292,0x01b7},{0x0345,0x0399,0x0345,0x0399},{0x0370,0x0370,0x0371,0x0370},
+{0x0371,0x0370,0x0371,0x0370},{0x0372,0x0372,0x0373,0x0372},{0x0373,0x0372,0x0373,0x0372},{0x0376,0x0376,0x0377,0x0376},
+{0x0377,0x0376,0x0377,0x0376},{0x037b,0x03fd,0x037b,0x03fd},{0x037c,0x03fe,0x037c,0x03fe},{0x037d,0x03ff,0x037d,0x03ff},
+{0x0386,0x0386,0x03ac,0x0386},{0x0388,0x0388,0x03ad,0x0388},{0x0389,0x0389,0x03ae,0x0389},{0x038a,0x038a,0x03af,0x038a},
+{0x038c,0x038c,0x03cc,0x038c},{0x038e,0x038e,0x03cd,0x038e},{0x038f,0x038f,0x03ce,0x038f},{0x0391,0x0391,0x03b1,0x0391},
+{0x0392,0x0392,0x03b2,0x0392},{0x0393,0x0393,0x03b3,0x0393},{0x0394,0x0394,0x03b4,0x0394},{0x0395,0x0395,0x03b5,0x0395},
+{0x0396,0x0396,0x03b6,0x0396},{0x0397,0x0397,0x03b7,0x0397},{0x0398,0x0398,0x03b8,0x0398},{0x0399,0x0399,0x03b9,0x0399},
+{0x039a,0x039a,0x03ba,0x039a},{0x039b,0x039b,0x03bb,0x039b},{0x039c,0x039c,0x03bc,0x039c},{0x039d,0x039d,0x03bd,0x039d},
+{0x039e,0x039e,0x03be,0x039e},{0x039f,0x039f,0x03bf,0x039f},{0x03a0,0x03a0,0x03c0,0x03a0},{0x03a1,0x03a1,0x03c1,0x03a1},
+{0x03a3,0x03a3,0x03c3,0x03a3},{0x03a4,0x03a4,0x03c4,0x03a4},{0x03a5,0x03a5,0x03c5,0x03a5},{0x03a6,0x03a6,0x03c6,0x03a6},
+{0x03a7,0x03a7,0x03c7,0x03a7},{0x03a8,0x03a8,0x03c8,0x03a8},{0x03a9,0x03a9,0x03c9,0x03a9},{0x03aa,0x03aa,0x03ca,0x03aa},
+{0x03ab,0x03ab,0x03cb,0x03ab},{0x03ac,0x0386,0x03ac,0x0386},{0x03ad,0x0388,0x03ad,0x0388},{0x03ae,0x0389,0x03ae,0x0389},
+{0x03af,0x038a,0x03af,0x038a},{0x03b1,0x0391,0x03b1,0x0391},{0x03b2,0x0392,0x03b2,0x0392},{0x03b3,0x0393,0x03b3,0x0393},
+{0x03b4,0x0394,0x03b4,0x0394},{0x03b5,0x0395,0x03b5,0x0395},{0x03b6,0x0396,0x03b6,0x0396},{0x03b7,0x0397,0x03b7,0x0397},
+{0x03b8,0x0398,0x03b8,0x0398},{0x03b9,0x0399,0x03b9,0x0399},{0x03ba,0x039a,0x03ba,0x039a},{0x03bb,0x039b,0x03bb,0x039b},
+{0x03bc,0x039c,0x03bc,0x039c},{0x03bd,0x039d,0x03bd,0x039d},{0x03be,0x039e,0x03be,0x039e},{0x03bf,0x039f,0x03bf,0x039f},
+{0x03c0,0x03a0,0x03c0,0x03a0},{0x03c1,0x03a1,0x03c1,0x03a1},{0x03c2,0x03a3,0x03c2,0x03a3},{0x03c3,0x03a3,0x03c3,0x03a3},
+{0x03c4,0x03a4,0x03c4,0x03a4},{0x03c5,0x03a5,0x03c5,0x03a5},{0x03c6,0x03a6,0x03c6,0x03a6},{0x03c7,0x03a7,0x03c7,0x03a7},
+{0x03c8,0x03a8,0x03c8,0x03a8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x03ca,0x03aa,0x03ca,0x03aa},{0x03cb,0x03ab,0x03cb,0x03ab},
+{0x03cc,0x038c,0x03cc,0x038c},{0x03cd,0x038e,0x03cd,0x038e},{0x03ce,0x038f,0x03ce,0x038f},{0x03cf,0x03cf,0x03d7,0x03cf},
+{0x03d0,0x0392,0x03d0,0x0392},{0x03d1,0x0398,0x03d1,0x0398},{0x03d5,0x03a6,0x03d5,0x03a6},{0x03d6,0x03a0,0x03d6,0x03a0},
+{0x03d7,0x03cf,0x03d7,0x03cf},{0x03d8,0x03d8,0x03d9,0x03d8},{0x03d9,0x03d8,0x03d9,0x03d8},{0x03da,0x03da,0x03db,0x03da},
+{0x03db,0x03da,0x03db,0x03da},{0x03dc,0x03dc,0x03dd,0x03dc},{0x03dd,0x03dc,0x03dd,0x03dc},{0x03de,0x03de,0x03df,0x03de},
+{0x03df,0x03de,0x03df,0x03de},{0x03e0,0x03e0,0x03e1,0x03e0},{0x03e1,0x03e0,0x03e1,0x03e0},{0x03e2,0x03e2,0x03e3,0x03e2},
+{0x03e3,0x03e2,0x03e3,0x03e2},{0x03e4,0x03e4,0x03e5,0x03e4},{0x03e5,0x03e4,0x03e5,0x03e4},{0x03e6,0x03e6,0x03e7,0x03e6},
+{0x03e7,0x03e6,0x03e7,0x03e6},{0x03e8,0x03e8,0x03e9,0x03e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x03ea,0x03ea,0x03eb,0x03ea},
+{0x03eb,0x03ea,0x03eb,0x03ea},{0x03ec,0x03ec,0x03ed,0x03ec},{0x03ed,0x03ec,0x03ed,0x03ec},{0x03ee,0x03ee,0x03ef,0x03ee},
+{0x03ef,0x03ee,0x03ef,0x03ee},{0x03f0,0x039a,0x03f0,0x039a},{0x03f1,0x03a1,0x03f1,0x03a1},{0x03f2,0x03f9,0x03f2,0x03f9},
+{0x03f4,0x03f4,0x03b8,0x03f4},{0x03f5,0x0395,0x03f5,0x0395},{0x03f7,0x03f7,0x03f8,0x03f7},{0x03f8,0x03f7,0x03f8,0x03f7},
+{0x03f9,0x03f9,0x03f2,0x03f9},{0x03fa,0x03fa,0x03fb,0x03fa},{0x03fb,0x03fa,0x03fb,0x03fa},{0x03fd,0x03fd,0x037b,0x03fd},
+{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x0400,0x0400,0x0450,0x0400},{0x10400,0x10400,0x10428,0x10400},
+{0x2c00,0x2c00,0x2c30,0x2c00},{0x2c01,0x2c01,0x2c31,0x2c01},{0x10401,0x10401,0x10429,0x10401},{0x0401,0x0401,0x0451,0x0401},
+{0x2c02,0x2c02,0x2c32,0x2c02},{0x10402,0x10402,0x1042a,0x10402},{0x0402,0x0402,0x0452,0x0402},{0x10403,0x10403,0x1042b,0x10403},
+{0x0403,0x0403,0x0453,0x0403},{0x2c03,0x2c03,0x2c33,0x2c03},{0x0404,0x0404,0x0454,0x0404},{0x10404,0x10404,0x1042c,0x10404},
+{0x2c04,0x2c04,0x2c34,0x2c04},{0x0405,0x0405,0x0455,0x0405},{0x2c05,0x2c05,0x2c35,0x2c05},{0x10405,0x10405,0x1042d,0x10405},
+{0x10406,0x10406,0x1042e,0x10406},{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x0407,0x0407,0x0457,0x0407},
+{0x2c07,0x2c07,0x2c37,0x2c07},{0x10407,0x10407,0x1042f,0x10407},{0x2c08,0x2c08,0x2c38,0x2c08},{0x0408,0x0408,0x0458,0x0408},
+{0x10408,0x10408,0x10430,0x10408},{0x0409,0x0409,0x0459,0x0409},{0x2c09,0x2c09,0x2c39,0x2c09},{0x10409,0x10409,0x10431,0x10409},
+{0x1040a,0x1040a,0x10432,0x1040a},{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x040a,0x040a,0x045a,0x040a},{0x1040b,0x1040b,0x10433,0x1040b},
+{0x040b,0x040b,0x045b,0x040b},{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x2c0c,0x2c0c,0x2c3c,0x2c0c},{0x1040c,0x1040c,0x10434,0x1040c},
+{0x040c,0x040c,0x045c,0x040c},{0x2c0d,0x2c0d,0x2c3d,0x2c0d},{0x040d,0x040d,0x045d,0x040d},{0x1040d,0x1040d,0x10435,0x1040d},
+{0x1040e,0x1040e,0x10436,0x1040e},{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f},
+{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x2c10,0x2c10,0x2c40,0x2c10},{0x0410,0x0410,0x0430,0x0410},
+{0x10410,0x10410,0x10438,0x10410},{0x2c11,0x2c11,0x2c41,0x2c11},{0x10411,0x10411,0x10439,0x10411},{0x0411,0x0411,0x0431,0x0411},
+{0x10412,0x10412,0x1043a,0x10412},{0x2c12,0x2c12,0x2c42,0x2c12},{0x0412,0x0412,0x0432,0x0412},{0x10413,0x10413,0x1043b,0x10413},
+{0x2c13,0x2c13,0x2c43,0x2c13},{0x0413,0x0413,0x0433,0x0413},{0x2c14,0x2c14,0x2c44,0x2c14},{0x0414,0x0414,0x0434,0x0414},
+{0x10414,0x10414,0x1043c,0x10414},{0x2c15,0x2c15,0x2c45,0x2c15},{0x10415,0x10415,0x1043d,0x10415},{0x0415,0x0415,0x0435,0x0415},
+{0x10416,0x10416,0x1043e,0x10416},{0x0416,0x0416,0x0436,0x0416},{0x2c16,0x2c16,0x2c46,0x2c16},{0x0417,0x0417,0x0437,0x0417},
+{0x10417,0x10417,0x1043f,0x10417},{0x2c17,0x2c17,0x2c47,0x2c17},{0x0418,0x0418,0x0438,0x0418},{0x10418,0x10418,0x10440,0x10418},
+{0x2c18,0x2c18,0x2c48,0x2c18},{0x2c19,0x2c19,0x2c49,0x2c19},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419},
+{0x1041a,0x1041a,0x10442,0x1041a},{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x2c1b,0x2c1b,0x2c4b,0x2c1b},
+{0x1041b,0x1041b,0x10443,0x1041b},{0x041b,0x041b,0x043b,0x041b},{0x041c,0x041c,0x043c,0x041c},{0x2c1c,0x2c1c,0x2c4c,0x2c1c},
+{0x1041c,0x1041c,0x10444,0x1041c},{0x1041d,0x1041d,0x10445,0x1041d},{0x041d,0x041d,0x043d,0x041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d},
+{0x1041e,0x1041e,0x10446,0x1041e},{0x041e,0x041e,0x043e,0x041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x2c1f,0x2c1f,0x2c4f,0x2c1f},
+{0x041f,0x041f,0x043f,0x041f},{0x1041f,0x1041f,0x10447,0x1041f},{0x0420,0x0420,0x0440,0x0420},{0x2c20,0x2c20,0x2c50,0x2c20},
+{0x10420,0x10420,0x10448,0x10420},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421},{0x2c21,0x2c21,0x2c51,0x2c21},
+{0x10422,0x10422,0x1044a,0x10422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x0422,0x0422,0x0442,0x0422},{0x0423,0x0423,0x0443,0x0423},
+{0x2c23,0x2c23,0x2c53,0x2c23},{0x10423,0x10423,0x1044b,0x10423},{0x0424,0x0424,0x0444,0x0424},{0x10424,0x10424,0x1044c,0x10424},
+{0x2c24,0x2c24,0x2c54,0x2c24},{0x10425,0x10425,0x1044d,0x10425},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425},
+{0x2c26,0x2c26,0x2c56,0x2c26},{0x0426,0x0426,0x0446,0x0426},{0x10426,0x10426,0x1044e,0x10426},{0x0427,0x0427,0x0447,0x0427},
+{0x2c27,0x2c27,0x2c57,0x2c27},{0x10427,0x10427,0x1044f,0x10427},{0x0428,0x0428,0x0448,0x0428},{0x10428,0x10400,0x10428,0x10400},
+{0x2c28,0x2c28,0x2c58,0x2c28},{0x10429,0x10401,0x10429,0x10401},{0x2c29,0x2c29,0x2c59,0x2c29},{0x0429,0x0429,0x0449,0x0429},
+{0x042a,0x042a,0x044a,0x042a},{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x1042b,0x10403,0x1042b,0x10403},
+{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x042b,0x042b,0x044b,0x042b},{0x042c,0x042c,0x044c,0x042c},{0x2c2c,0x2c2c,0x2c5c,0x2c2c},
+{0x1042c,0x10404,0x1042c,0x10404},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x042d,0x042d,0x044d,0x042d},{0x1042d,0x10405,0x1042d,0x10405},
+{0x1042e,0x10406,0x1042e,0x10406},{0x042e,0x042e,0x044e,0x042e},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407},
+{0x042f,0x042f,0x044f,0x042f},{0x10430,0x10408,0x10430,0x10408},{0x2c30,0x2c00,0x2c30,0x2c00},{0x0430,0x0410,0x0430,0x0410},
+{0x2c31,0x2c01,0x2c31,0x2c01},{0x10431,0x10409,0x10431,0x10409},{0x0431,0x0411,0x0431,0x0411},{0x10432,0x1040a,0x10432,0x1040a},
+{0x0432,0x0412,0x0432,0x0412},{0x2c32,0x2c02,0x2c32,0x2c02},{0x2c33,0x2c03,0x2c33,0x2c03},{0x10433,0x1040b,0x10433,0x1040b},
+{0x0433,0x0413,0x0433,0x0413},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04},{0x10434,0x1040c,0x10434,0x1040c},
+{0x10435,0x1040d,0x10435,0x1040d},{0x0435,0x0415,0x0435,0x0415},{0x2c35,0x2c05,0x2c35,0x2c05},{0x2c36,0x2c06,0x2c36,0x2c06},
+{0x0436,0x0416,0x0436,0x0416},{0x10436,0x1040e,0x10436,0x1040e},{0x2c37,0x2c07,0x2c37,0x2c07},{0x10437,0x1040f,0x10437,0x1040f},
+{0x0437,0x0417,0x0437,0x0417},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410},{0x0438,0x0418,0x0438,0x0418},
+{0x2c39,0x2c09,0x2c39,0x2c09},{0x10439,0x10411,0x10439,0x10411},{0x0439,0x0419,0x0439,0x0419},{0x043a,0x041a,0x043a,0x041a},
+{0x1043a,0x10412,0x1043a,0x10412},{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x043b,0x041b,0x043b,0x041b},{0x1043b,0x10413,0x1043b,0x10413},
+{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x043c,0x041c,0x043c,0x041c},{0x1043c,0x10414,0x1043c,0x10414},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},
+{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x043d,0x041d,0x043d,0x041d},{0x1043d,0x10415,0x1043d,0x10415},{0x2c3e,0x2c0e,0x2c3e,0x2c0e},
+{0x043e,0x041e,0x043e,0x041e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x1043f,0x10417,0x1043f,0x10417},
+{0x043f,0x041f,0x043f,0x041f},{0x2c40,0x2c10,0x2c40,0x2c10},{0x0440,0x0420,0x0440,0x0420},{0x10440,0x10418,0x10440,0x10418},
+{0x0441,0x0421,0x0441,0x0421},{0x2c41,0x2c11,0x2c41,0x2c11},{0x10441,0x10419,0x10441,0x10419},{0x10442,0x1041a,0x10442,0x1041a},
+{0x0442,0x0422,0x0442,0x0422},{0x2c42,0x2c12,0x2c42,0x2c12},{0x10443,0x1041b,0x10443,0x1041b},{0x2c43,0x2c13,0x2c43,0x2c13},
+{0x0443,0x0423,0x0443,0x0423},{0x2c44,0x2c14,0x2c44,0x2c14},{0x0444,0x0424,0x0444,0x0424},{0x10444,0x1041c,0x10444,0x1041c},
+{0x2c45,0x2c15,0x2c45,0x2c15},{0x0445,0x0425,0x0445,0x0425},{0x10445,0x1041d,0x10445,0x1041d},{0x10446,0x1041e,0x10446,0x1041e},
+{0x0446,0x0426,0x0446,0x0426},{0x2c46,0x2c16,0x2c46,0x2c16},{0x2c47,0x2c17,0x2c47,0x2c17},{0x10447,0x1041f,0x10447,0x1041f},
+{0x0447,0x0427,0x0447,0x0427},{0x2c48,0x2c18,0x2c48,0x2c18},{0x0448,0x0428,0x0448,0x0428},{0x10448,0x10420,0x10448,0x10420},
+{0x10449,0x10421,0x10449,0x10421},{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x044a,0x042a,0x044a,0x042a},
+{0x2c4a,0x2c1a,0x2c4a,0x2c1a},{0x1044a,0x10422,0x1044a,0x10422},{0x2c4b,0x2c1b,0x2c4b,0x2c1b},{0x044b,0x042b,0x044b,0x042b},
+{0x1044b,0x10423,0x1044b,0x10423},{0x1044c,0x10424,0x1044c,0x10424},{0x2c4c,0x2c1c,0x2c4c,0x2c1c},{0x044c,0x042c,0x044c,0x042c},
+{0x1044d,0x10425,0x1044d,0x10425},{0x044d,0x042d,0x044d,0x042d},{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x044e,0x042e,0x044e,0x042e},
+{0x1044e,0x10426,0x1044e,0x10426},{0x2c4e,0x2c1e,0x2c4e,0x2c1e},{0x2c4f,0x2c1f,0x2c4f,0x2c1f},{0x044f,0x042f,0x044f,0x042f},
+{0x1044f,0x10427,0x1044f,0x10427},{0x0450,0x0400,0x0450,0x0400},{0x2c50,0x2c20,0x2c50,0x2c20},{0x2c51,0x2c21,0x2c51,0x2c21},
+{0x0451,0x0401,0x0451,0x0401},{0x2c52,0x2c22,0x2c52,0x2c22},{0x0452,0x0402,0x0452,0x0402},{0x0453,0x0403,0x0453,0x0403},
+{0x2c53,0x2c23,0x2c53,0x2c23},{0x2c54,0x2c24,0x2c54,0x2c24},{0x0454,0x0404,0x0454,0x0404},{0x0455,0x0405,0x0455,0x0405},
+{0x2c55,0x2c25,0x2c55,0x2c25},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x2c57,0x2c27,0x2c57,0x2c27},
+{0x0457,0x0407,0x0457,0x0407},{0x0458,0x0408,0x0458,0x0408},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0459,0x0409,0x0459,0x0409},
+{0x2c59,0x2c29,0x2c59,0x2c29},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045a,0x040a,0x045a,0x040a},{0x045b,0x040b,0x045b,0x040b},
+{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x2c5d,0x2c2d,0x2c5d,0x2c2d},
+{0x045d,0x040d,0x045d,0x040d},{0x045e,0x040e,0x045e,0x040e},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045f,0x040f,0x045f,0x040f},
+{0x2c60,0x2c60,0x2c61,0x2c60},{0x0460,0x0460,0x0461,0x0460},{0x0461,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60},
+{0x2c62,0x2c62,0x026b,0x2c62},{0x0462,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63},{0x0463,0x0462,0x0463,0x0462},
+{0x2c64,0x2c64,0x027d,0x2c64},{0x0464,0x0464,0x0465,0x0464},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a},
+{0x2c66,0x023e,0x2c66,0x023e},{0x0466,0x0466,0x0467,0x0466},{0x0467,0x0466,0x0467,0x0466},{0x2c67,0x2c67,0x2c68,0x2c67},
+{0x2c68,0x2c67,0x2c68,0x2c67},{0x0468,0x0468,0x0469,0x0468},{0x0469,0x0468,0x0469,0x0468},{0x2c69,0x2c69,0x2c6a,0x2c69},
+{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x046a,0x046a,0x046b,0x046a},{0x046b,0x046a,0x046b,0x046a},{0x2c6b,0x2c6b,0x2c6c,0x2c6b},
+{0x046c,0x046c,0x046d,0x046c},{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046d,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d},
+{0x2c6e,0x2c6e,0x0271,0x2c6e},{0x046e,0x046e,0x046f,0x046e},{0x046f,0x046e,0x046f,0x046e},{0x2c6f,0x2c6f,0x0250,0x2c6f},
+{0x0470,0x0470,0x0471,0x0470},{0x2c70,0x2c70,0x0252,0x2c70},{0x0471,0x0470,0x0471,0x0470},{0x2c72,0x2c72,0x2c73,0x2c72},
+{0x0472,0x0472,0x0473,0x0472},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474},
+{0x0475,0x0474,0x0475,0x0474},{0x2c75,0x2c75,0x2c76,0x2c75},{0x0476,0x0476,0x0477,0x0476},{0x2c76,0x2c75,0x2c76,0x2c75},
+{0x0477,0x0476,0x0477,0x0476},{0x0478,0x0478,0x0479,0x0478},{0x0479,0x0478,0x0479,0x0478},{0x047a,0x047a,0x047b,0x047a},
+{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x047e,0x047e,0x047f,0x047e},
+{0x2c7e,0x2c7e,0x023f,0x2c7e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x047f,0x047e,0x047f,0x047e},{0x2c80,0x2c80,0x2c81,0x2c80},
+{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x0481,0x0480,0x0481,0x0480},{0x2c82,0x2c82,0x2c83,0x2c82},
+{0x2c83,0x2c82,0x2c83,0x2c82},{0x2c84,0x2c84,0x2c85,0x2c84},{0x2c85,0x2c84,0x2c85,0x2c84},{0x2c86,0x2c86,0x2c87,0x2c86},
+{0x2c87,0x2c86,0x2c87,0x2c86},{0x2c88,0x2c88,0x2c89,0x2c88},{0x2c89,0x2c88,0x2c89,0x2c88},{0x048a,0x048a,0x048b,0x048a},
+{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x2c8b,0x2c8a,0x2c8b,0x2c8a},{0x048b,0x048a,0x048b,0x048a},{0x2c8c,0x2c8c,0x2c8d,0x2c8c},
+{0x048c,0x048c,0x048d,0x048c},{0x048d,0x048c,0x048d,0x048c},{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},
+{0x048e,0x048e,0x048f,0x048e},{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x048f,0x048e,0x048f,0x048e},{0x0490,0x0490,0x0491,0x0490},
+{0x2c90,0x2c90,0x2c91,0x2c90},{0x2c91,0x2c90,0x2c91,0x2c90},{0x0491,0x0490,0x0491,0x0490},{0x0492,0x0492,0x0493,0x0492},
+{0x2c92,0x2c92,0x2c93,0x2c92},{0x2c93,0x2c92,0x2c93,0x2c92},{0x0493,0x0492,0x0493,0x0492},{0x2c94,0x2c94,0x2c95,0x2c94},
+{0x0494,0x0494,0x0495,0x0494},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94},{0x2c96,0x2c96,0x2c97,0x2c96},
+{0x0496,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x0497,0x0496,0x0497,0x0496},{0x0498,0x0498,0x0499,0x0498},
+{0x2c98,0x2c98,0x2c99,0x2c98},{0x2c99,0x2c98,0x2c99,0x2c98},{0x0499,0x0498,0x0499,0x0498},{0x049a,0x049a,0x049b,0x049a},
+{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x049b,0x049a,0x049b,0x049a},{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049c,0x049c,0x049d,0x049c},
+{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049e,0x049e,0x049f,0x049e},
+{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x049f,0x049e,0x049f,0x049e},{0x04a0,0x04a0,0x04a1,0x04a0},
+{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x04a1,0x04a0,0x04a1,0x04a0},{0x2ca1,0x2ca0,0x2ca1,0x2ca0},{0x04a2,0x04a2,0x04a3,0x04a2},
+{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x04a3,0x04a2,0x04a3,0x04a2},{0x2ca4,0x2ca4,0x2ca5,0x2ca4},
+{0x04a4,0x04a4,0x04a5,0x04a4},{0x04a5,0x04a4,0x04a5,0x04a4},{0x2ca5,0x2ca4,0x2ca5,0x2ca4},{0x04a6,0x04a6,0x04a7,0x04a6},
+{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x2ca8,0x2ca8,0x2ca9,0x2ca8},
+{0x04a8,0x04a8,0x04a9,0x04a8},{0x04a9,0x04a8,0x04a9,0x04a8},{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x04aa,0x04aa,0x04ab,0x04aa},
+{0x2caa,0x2caa,0x2cab,0x2caa},{0x04ab,0x04aa,0x04ab,0x04aa},{0x2cab,0x2caa,0x2cab,0x2caa},{0x2cac,0x2cac,0x2cad,0x2cac},
+{0x04ac,0x04ac,0x04ad,0x04ac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac},{0x04ae,0x04ae,0x04af,0x04ae},
+{0x2cae,0x2cae,0x2caf,0x2cae},{0x2caf,0x2cae,0x2caf,0x2cae},{0x04af,0x04ae,0x04af,0x04ae},{0x04b0,0x04b0,0x04b1,0x04b0},
+{0x2cb0,0x2cb0,0x2cb1,0x2cb0},{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0},{0x04b2,0x04b2,0x04b3,0x04b2},
+{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x04b3,0x04b2,0x04b3,0x04b2},{0x2cb3,0x2cb2,0x2cb3,0x2cb2},{0x2cb4,0x2cb4,0x2cb5,0x2cb4},
+{0x04b4,0x04b4,0x04b5,0x04b4},{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b5,0x04b4,0x04b5,0x04b4},{0x04b6,0x04b6,0x04b7,0x04b6},
+{0x2cb6,0x2cb6,0x2cb7,0x2cb6},{0x24b6,0x24b6,0x24d0,0x24b6},{0x24b7,0x24b7,0x24d1,0x24b7},{0x04b7,0x04b6,0x04b7,0x04b6},
+{0x2cb7,0x2cb6,0x2cb7,0x2cb6},{0x04b8,0x04b8,0x04b9,0x04b8},{0x24b8,0x24b8,0x24d2,0x24b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},
+{0x24b9,0x24b9,0x24d3,0x24b9},{0x04b9,0x04b8,0x04b9,0x04b8},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x2cba,0x2cba,0x2cbb,0x2cba},
+{0x04ba,0x04ba,0x04bb,0x04ba},{0x24ba,0x24ba,0x24d4,0x24ba},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},
+{0x04bb,0x04ba,0x04bb,0x04ba},{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x04bc,0x04bc,0x04bd,0x04bc},{0x24bc,0x24bc,0x24d6,0x24bc},
+{0x04bd,0x04bc,0x04bd,0x04bc},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x24bd,0x24bd,0x24d7,0x24bd},{0x24be,0x24be,0x24d8,0x24be},
+{0x04be,0x04be,0x04bf,0x04be},{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x2cbf,0x2cbe,0x2cbf,0x2cbe},{0x24bf,0x24bf,0x24d9,0x24bf},
+{0x04bf,0x04be,0x04bf,0x04be},{0x04c0,0x04c0,0x04cf,0x04c0},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x24c0,0x24c0,0x24da,0x24c0},
+{0x04c1,0x04c1,0x04c2,0x04c1},{0x2cc1,0x2cc0,0x2cc1,0x2cc0},{0x24c1,0x24c1,0x24db,0x24c1},{0x2cc2,0x2cc2,0x2cc3,0x2cc2},
+{0x04c2,0x04c1,0x04c2,0x04c1},{0x24c2,0x24c2,0x24dc,0x24c2},{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2},
+{0x04c3,0x04c3,0x04c4,0x04c3},{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x04c4,0x04c3,0x04c4,0x04c3},{0x24c4,0x24c4,0x24de,0x24c4},
+{0x2cc5,0x2cc4,0x2cc5,0x2cc4},{0x24c5,0x24c5,0x24df,0x24c5},{0x04c5,0x04c5,0x04c6,0x04c5},{0x04c6,0x04c5,0x04c6,0x04c5},
+{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc7,0x2cc6,0x2cc7,0x2cc6},{0x04c7,0x04c7,0x04c8,0x04c7},
+{0x24c7,0x24c7,0x24e1,0x24c7},{0x24c8,0x24c8,0x24e2,0x24c8},{0x2cc8,0x2cc8,0x2cc9,0x2cc8},{0x04c8,0x04c7,0x04c8,0x04c7},
+{0x04c9,0x04c9,0x04ca,0x04c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x24c9,0x24c9,0x24e3,0x24c9},{0x24ca,0x24ca,0x24e4,0x24ca},
+{0x04ca,0x04c9,0x04ca,0x04c9},{0x2cca,0x2cca,0x2ccb,0x2cca},{0x24cb,0x24cb,0x24e5,0x24cb},{0x2ccb,0x2cca,0x2ccb,0x2cca},
+{0x04cb,0x04cb,0x04cc,0x04cb},{0x2ccc,0x2ccc,0x2ccd,0x2ccc},{0x24cc,0x24cc,0x24e6,0x24cc},{0x04cc,0x04cb,0x04cc,0x04cb},
+{0x04cd,0x04cd,0x04ce,0x04cd},{0x24cd,0x24cd,0x24e7,0x24cd},{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04ce,0x04cd,0x04ce,0x04cd},
+{0x2cce,0x2cce,0x2ccf,0x2cce},{0x24ce,0x24ce,0x24e8,0x24ce},{0x24cf,0x24cf,0x24e9,0x24cf},{0x2ccf,0x2cce,0x2ccf,0x2cce},
+{0x04cf,0x04c0,0x04cf,0x04c0},{0x24d0,0x24b6,0x24d0,0x24b6},{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x04d0,0x04d0,0x04d1,0x04d0},
+{0x04d1,0x04d0,0x04d1,0x04d0},{0x2cd1,0x2cd0,0x2cd1,0x2cd0},{0x24d1,0x24b7,0x24d1,0x24b7},{0x04d2,0x04d2,0x04d3,0x04d2},
+{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x24d2,0x24b8,0x24d2,0x24b8},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x24d3,0x24b9,0x24d3,0x24b9},
+{0x04d3,0x04d2,0x04d3,0x04d2},{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4},
+{0x24d5,0x24bb,0x24d5,0x24bb},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4},{0x2cd6,0x2cd6,0x2cd7,0x2cd6},
+{0x04d6,0x04d6,0x04d7,0x04d6},{0x24d6,0x24bc,0x24d6,0x24bc},{0x24d7,0x24bd,0x24d7,0x24bd},{0x2cd7,0x2cd6,0x2cd7,0x2cd6},
+{0x04d7,0x04d6,0x04d7,0x04d6},{0x04d8,0x04d8,0x04d9,0x04d8},{0x2cd8,0x2cd8,0x2cd9,0x2cd8},{0x24d8,0x24be,0x24d8,0x24be},
+{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8},{0x24d9,0x24bf,0x24d9,0x24bf},{0x24da,0x24c0,0x24da,0x24c0},
+{0x2cda,0x2cda,0x2cdb,0x2cda},{0x04da,0x04da,0x04db,0x04da},{0x04db,0x04da,0x04db,0x04da},{0x2cdb,0x2cda,0x2cdb,0x2cda},
+{0x24db,0x24c1,0x24db,0x24c1},{0x04dc,0x04dc,0x04dd,0x04dc},{0x24dc,0x24c2,0x24dc,0x24c2},{0x2cdc,0x2cdc,0x2cdd,0x2cdc},
+{0x2cdd,0x2cdc,0x2cdd,0x2cdc},{0x24dd,0x24c3,0x24dd,0x24c3},{0x04dd,0x04dc,0x04dd,0x04dc},{0x24de,0x24c4,0x24de,0x24c4},
+{0x2cde,0x2cde,0x2cdf,0x2cde},{0x04de,0x04de,0x04df,0x04de},{0x04df,0x04de,0x04df,0x04de},{0x24df,0x24c5,0x24df,0x24c5},
+{0x2cdf,0x2cde,0x2cdf,0x2cde},{0x24e0,0x24c6,0x24e0,0x24c6},{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x04e0,0x04e0,0x04e1,0x04e0},
+{0x2ce1,0x2ce0,0x2ce1,0x2ce0},{0x04e1,0x04e0,0x04e1,0x04e0},{0x24e1,0x24c7,0x24e1,0x24c7},{0x04e2,0x04e2,0x04e3,0x04e2},
+{0x2ce2,0x2ce2,0x2ce3,0x2ce2},{0x24e2,0x24c8,0x24e2,0x24c8},{0x24e3,0x24c9,0x24e3,0x24c9},{0x2ce3,0x2ce2,0x2ce3,0x2ce2},
+{0x04e3,0x04e2,0x04e3,0x04e2},{0x24e4,0x24ca,0x24e4,0x24ca},{0x04e4,0x04e4,0x04e5,0x04e4},{0x24e5,0x24cb,0x24e5,0x24cb},
+{0x04e5,0x04e4,0x04e5,0x04e4},{0x04e6,0x04e6,0x04e7,0x04e6},{0x24e6,0x24cc,0x24e6,0x24cc},{0x24e7,0x24cd,0x24e7,0x24cd},
+{0x04e7,0x04e6,0x04e7,0x04e6},{0x04e8,0x04e8,0x04e9,0x04e8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e9,0x04e8,0x04e9,0x04e8},
+{0x24e9,0x24cf,0x24e9,0x24cf},{0x04ea,0x04ea,0x04eb,0x04ea},{0x04eb,0x04ea,0x04eb,0x04ea},{0x2ceb,0x2ceb,0x2cec,0x2ceb},
+{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x04ec,0x04ec,0x04ed,0x04ec},{0x2ced,0x2ced,0x2cee,0x2ced},{0x04ed,0x04ec,0x04ed,0x04ec},
+{0x04ee,0x04ee,0x04ef,0x04ee},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ef,0x04ee,0x04ef,0x04ee},{0x04f0,0x04f0,0x04f1,0x04f0},
+{0x04f1,0x04f0,0x04f1,0x04f0},{0x04f2,0x04f2,0x04f3,0x04f2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x04f4,0x04f4,0x04f5,0x04f4},
+{0x04f5,0x04f4,0x04f5,0x04f4},{0x04f6,0x04f6,0x04f7,0x04f6},{0x04f7,0x04f6,0x04f7,0x04f6},{0x04f8,0x04f8,0x04f9,0x04f8},
+{0x04f9,0x04f8,0x04f9,0x04f8},{0x04fa,0x04fa,0x04fb,0x04fa},{0x04fb,0x04fa,0x04fb,0x04fa},{0x04fc,0x04fc,0x04fd,0x04fc},
+{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x2d00,0x10a0,0x2d00,0x10a0},
+{0x0500,0x0500,0x0501,0x0500},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x0502,0x0502,0x0503,0x0502},
+{0x2d02,0x10a2,0x2d02,0x10a2},{0x0503,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x2d04,0x10a4,0x2d04,0x10a4},
+{0x0504,0x0504,0x0505,0x0504},{0x0505,0x0504,0x0505,0x0504},{0x2d05,0x10a5,0x2d05,0x10a5},{0x0506,0x0506,0x0507,0x0506},
+{0x2d06,0x10a6,0x2d06,0x10a6},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0507,0x0506,0x0507,0x0506},{0x0508,0x0508,0x0509,0x0508},
+{0x2d08,0x10a8,0x2d08,0x10a8},{0x0509,0x0508,0x0509,0x0508},{0x2d09,0x10a9,0x2d09,0x10a9},{0x2d0a,0x10aa,0x2d0a,0x10aa},
+{0x050a,0x050a,0x050b,0x050a},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x050b,0x050a,0x050b,0x050a},{0x050c,0x050c,0x050d,0x050c},
+{0x2d0c,0x10ac,0x2d0c,0x10ac},{0x050d,0x050c,0x050d,0x050c},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050e,0x050e,0x050f,0x050e},
+{0x2d0e,0x10ae,0x2d0e,0x10ae},{0x2d0f,0x10af,0x2d0f,0x10af},{0x050f,0x050e,0x050f,0x050e},{0x0510,0x0510,0x0511,0x0510},
+{0x2d10,0x10b0,0x2d10,0x10b0},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0511,0x0510,0x0511,0x0510},{0x2d12,0x10b2,0x2d12,0x10b2},
+{0x0512,0x0512,0x0513,0x0512},{0x2d13,0x10b3,0x2d13,0x10b3},{0x0513,0x0512,0x0513,0x0512},{0x2d14,0x10b4,0x2d14,0x10b4},
+{0x0514,0x0514,0x0515,0x0514},{0x0515,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x2d16,0x10b6,0x2d16,0x10b6},
+{0x0516,0x0516,0x0517,0x0516},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x0518,0x0518,0x0519,0x0518},
+{0x2d18,0x10b8,0x2d18,0x10b8},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x2d1a,0x10ba,0x2d1a,0x10ba},
+{0x051a,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x051b,0x051a,0x051b,0x051a},{0x2d1c,0x10bc,0x2d1c,0x10bc},
+{0x051c,0x051c,0x051d,0x051c},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x051d,0x051c,0x051d,0x051c},{0x051e,0x051e,0x051f,0x051e},
+{0x2d1e,0x10be,0x2d1e,0x10be},{0x2d1f,0x10bf,0x2d1f,0x10bf},{0x051f,0x051e,0x051f,0x051e},{0x2d20,0x10c0,0x2d20,0x10c0},
+{0x0520,0x0520,0x0521,0x0520},{0x0521,0x0520,0x0521,0x0520},{0x2d21,0x10c1,0x2d21,0x10c1},{0x2d22,0x10c2,0x2d22,0x10c2},
+{0x0522,0x0522,0x0523,0x0522},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0523,0x0522,0x0523,0x0522},{0x0524,0x0524,0x0525,0x0524},
+{0x2d24,0x10c4,0x2d24,0x10c4},{0x0525,0x0524,0x0525,0x0524},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0526,0x0526,0x0527,0x0526},
+{0x0527,0x0526,0x0527,0x0526},{0x0531,0x0531,0x0561,0x0531},{0x0532,0x0532,0x0562,0x0532},{0x0533,0x0533,0x0563,0x0533},
+{0x0534,0x0534,0x0564,0x0534},{0x0535,0x0535,0x0565,0x0535},{0x0536,0x0536,0x0566,0x0536},{0x0537,0x0537,0x0567,0x0537},
+{0x0538,0x0538,0x0568,0x0538},{0x0539,0x0539,0x0569,0x0539},{0x053a,0x053a,0x056a,0x053a},{0x053b,0x053b,0x056b,0x053b},
+{0x053c,0x053c,0x056c,0x053c},{0x053d,0x053d,0x056d,0x053d},{0x053e,0x053e,0x056e,0x053e},{0x053f,0x053f,0x056f,0x053f},
+{0x0540,0x0540,0x0570,0x0540},{0x0541,0x0541,0x0571,0x0541},{0x0542,0x0542,0x0572,0x0542},{0x0543,0x0543,0x0573,0x0543},
+{0x0544,0x0544,0x0574,0x0544},{0x0545,0x0545,0x0575,0x0545},{0x0546,0x0546,0x0576,0x0546},{0x0547,0x0547,0x0577,0x0547},
+{0x0548,0x0548,0x0578,0x0548},{0x0549,0x0549,0x0579,0x0549},{0x054a,0x054a,0x057a,0x054a},{0x054b,0x054b,0x057b,0x054b},
+{0x054c,0x054c,0x057c,0x054c},{0x054d,0x054d,0x057d,0x054d},{0x054e,0x054e,0x057e,0x054e},{0x054f,0x054f,0x057f,0x054f},
+{0x0550,0x0550,0x0580,0x0550},{0x0551,0x0551,0x0581,0x0551},{0x0552,0x0552,0x0582,0x0552},{0x0553,0x0553,0x0583,0x0553},
+{0x0554,0x0554,0x0584,0x0554},{0x0555,0x0555,0x0585,0x0555},{0x0556,0x0556,0x0586,0x0556},{0x0561,0x0531,0x0561,0x0531},
+{0x0562,0x0532,0x0562,0x0532},{0x0563,0x0533,0x0563,0x0533},{0x0564,0x0534,0x0564,0x0534},{0x0565,0x0535,0x0565,0x0535},
+{0x0566,0x0536,0x0566,0x0536},{0x0567,0x0537,0x0567,0x0537},{0x0568,0x0538,0x0568,0x0538},{0x0569,0x0539,0x0569,0x0539},
+{0x056a,0x053a,0x056a,0x053a},{0x056b,0x053b,0x056b,0x053b},{0x056c,0x053c,0x056c,0x053c},{0x056d,0x053d,0x056d,0x053d},
+{0x056e,0x053e,0x056e,0x053e},{0x056f,0x053f,0x056f,0x053f},{0x0570,0x0540,0x0570,0x0540},{0x0571,0x0541,0x0571,0x0541},
+{0x0572,0x0542,0x0572,0x0542},{0x0573,0x0543,0x0573,0x0543},{0x0574,0x0544,0x0574,0x0544},{0x0575,0x0545,0x0575,0x0545},
+{0x0576,0x0546,0x0576,0x0546},{0x0577,0x0547,0x0577,0x0547},{0x0578,0x0548,0x0578,0x0548},{0x0579,0x0549,0x0579,0x0549},
+{0x1d79,0xa77d,0x1d79,0xa77d},{0x057a,0x054a,0x057a,0x054a},{0x057b,0x054b,0x057b,0x054b},{0x057c,0x054c,0x057c,0x054c},
+{0x1d7d,0x2c63,0x1d7d,0x2c63},{0x057d,0x054d,0x057d,0x054d},{0x057e,0x054e,0x057e,0x054e},{0x057f,0x054f,0x057f,0x054f},
+{0x0580,0x0550,0x0580,0x0550},{0x0581,0x0551,0x0581,0x0551},{0x0582,0x0552,0x0582,0x0552},{0x0583,0x0553,0x0583,0x0553},
+{0x0584,0x0554,0x0584,0x0554},{0x0585,0x0555,0x0585,0x0555},{0x0586,0x0556,0x0586,0x0556},{0x1e00,0x1e00,0x1e01,0x1e00},
+{0x1e01,0x1e00,0x1e01,0x1e00},{0x1e02,0x1e02,0x1e03,0x1e02},{0x1e03,0x1e02,0x1e03,0x1e02},{0x1e04,0x1e04,0x1e05,0x1e04},
+{0x1e05,0x1e04,0x1e05,0x1e04},{0x1e06,0x1e06,0x1e07,0x1e06},{0x1e07,0x1e06,0x1e07,0x1e06},{0x1e08,0x1e08,0x1e09,0x1e08},
+{0x1e09,0x1e08,0x1e09,0x1e08},{0x1e0a,0x1e0a,0x1e0b,0x1e0a},{0x1e0b,0x1e0a,0x1e0b,0x1e0a},{0x1e0c,0x1e0c,0x1e0d,0x1e0c},
+{0x1e0d,0x1e0c,0x1e0d,0x1e0c},{0x1e0e,0x1e0e,0x1e0f,0x1e0e},{0x1e0f,0x1e0e,0x1e0f,0x1e0e},{0x1e10,0x1e10,0x1e11,0x1e10},
+{0x1e11,0x1e10,0x1e11,0x1e10},{0x1e12,0x1e12,0x1e13,0x1e12},{0x1e13,0x1e12,0x1e13,0x1e12},{0x1e14,0x1e14,0x1e15,0x1e14},
+{0x1e15,0x1e14,0x1e15,0x1e14},{0x1e16,0x1e16,0x1e17,0x1e16},{0x1e17,0x1e16,0x1e17,0x1e16},{0x1e18,0x1e18,0x1e19,0x1e18},
+{0x1e19,0x1e18,0x1e19,0x1e18},{0x1e1a,0x1e1a,0x1e1b,0x1e1a},{0x1e1b,0x1e1a,0x1e1b,0x1e1a},{0x1e1c,0x1e1c,0x1e1d,0x1e1c},
+{0x1e1d,0x1e1c,0x1e1d,0x1e1c},{0x1e1e,0x1e1e,0x1e1f,0x1e1e},{0x1e1f,0x1e1e,0x1e1f,0x1e1e},{0x1e20,0x1e20,0x1e21,0x1e20},
+{0x1e21,0x1e20,0x1e21,0x1e20},{0x1e22,0x1e22,0x1e23,0x1e22},{0x1e23,0x1e22,0x1e23,0x1e22},{0x1e24,0x1e24,0x1e25,0x1e24},
+{0x1e25,0x1e24,0x1e25,0x1e24},{0x1e26,0x1e26,0x1e27,0x1e26},{0x1e27,0x1e26,0x1e27,0x1e26},{0x1e28,0x1e28,0x1e29,0x1e28},
+{0x1e29,0x1e28,0x1e29,0x1e28},{0x1e2a,0x1e2a,0x1e2b,0x1e2a},{0x1e2b,0x1e2a,0x1e2b,0x1e2a},{0x1e2c,0x1e2c,0x1e2d,0x1e2c},
+{0x1e2d,0x1e2c,0x1e2d,0x1e2c},{0x1e2e,0x1e2e,0x1e2f,0x1e2e},{0x1e2f,0x1e2e,0x1e2f,0x1e2e},{0x1e30,0x1e30,0x1e31,0x1e30},
+{0x1e31,0x1e30,0x1e31,0x1e30},{0x1e32,0x1e32,0x1e33,0x1e32},{0x1e33,0x1e32,0x1e33,0x1e32},{0x1e34,0x1e34,0x1e35,0x1e34},
+{0x1e35,0x1e34,0x1e35,0x1e34},{0x1e36,0x1e36,0x1e37,0x1e36},{0x1e37,0x1e36,0x1e37,0x1e36},{0x1e38,0x1e38,0x1e39,0x1e38},
+{0x1e39,0x1e38,0x1e39,0x1e38},{0x1e3a,0x1e3a,0x1e3b,0x1e3a},{0x1e3b,0x1e3a,0x1e3b,0x1e3a},{0x1e3c,0x1e3c,0x1e3d,0x1e3c},
+{0x1e3d,0x1e3c,0x1e3d,0x1e3c},{0x1e3e,0x1e3e,0x1e3f,0x1e3e},{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0x1e40,0x1e40,0x1e41,0x1e40},
+{0xa640,0xa640,0xa641,0xa640},{0x1e41,0x1e40,0x1e41,0x1e40},{0xa641,0xa640,0xa641,0xa640},{0x1e42,0x1e42,0x1e43,0x1e42},
+{0xa642,0xa642,0xa643,0xa642},{0xa643,0xa642,0xa643,0xa642},{0x1e43,0x1e42,0x1e43,0x1e42},{0x1e44,0x1e44,0x1e45,0x1e44},
+{0xa644,0xa644,0xa645,0xa644},{0x1e45,0x1e44,0x1e45,0x1e44},{0xa645,0xa644,0xa645,0xa644},{0x1e46,0x1e46,0x1e47,0x1e46},
+{0xa646,0xa646,0xa647,0xa646},{0xa647,0xa646,0xa647,0xa646},{0x1e47,0x1e46,0x1e47,0x1e46},{0xa648,0xa648,0xa649,0xa648},
+{0x1e48,0x1e48,0x1e49,0x1e48},{0xa649,0xa648,0xa649,0xa648},{0x1e49,0x1e48,0x1e49,0x1e48},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},
+{0xa64a,0xa64a,0xa64b,0xa64a},{0xa64b,0xa64a,0xa64b,0xa64a},{0x1e4b,0x1e4a,0x1e4b,0x1e4a},{0xa64c,0xa64c,0xa64d,0xa64c},
+{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c},{0xa64d,0xa64c,0xa64d,0xa64c},{0xa64e,0xa64e,0xa64f,0xa64e},
+{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64f,0xa64e,0xa64f,0xa64e},{0x1e4f,0x1e4e,0x1e4f,0x1e4e},{0x1e50,0x1e50,0x1e51,0x1e50},
+{0xa650,0xa650,0xa651,0xa650},{0x1e51,0x1e50,0x1e51,0x1e50},{0xa651,0xa650,0xa651,0xa650},{0x1e52,0x1e52,0x1e53,0x1e52},
+{0xa652,0xa652,0xa653,0xa652},{0xa653,0xa652,0xa653,0xa652},{0x1e53,0x1e52,0x1e53,0x1e52},{0xa654,0xa654,0xa655,0xa654},
+{0x1e54,0x1e54,0x1e55,0x1e54},{0xa655,0xa654,0xa655,0xa654},{0x1e55,0x1e54,0x1e55,0x1e54},{0xa656,0xa656,0xa657,0xa656},
+{0x1e56,0x1e56,0x1e57,0x1e56},{0x1e57,0x1e56,0x1e57,0x1e56},{0xa657,0xa656,0xa657,0xa656},{0xa658,0xa658,0xa659,0xa658},
+{0x1e58,0x1e58,0x1e59,0x1e58},{0x1e59,0x1e58,0x1e59,0x1e58},{0xa659,0xa658,0xa659,0xa658},{0xa65a,0xa65a,0xa65b,0xa65a},
+{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a},{0xa65b,0xa65a,0xa65b,0xa65a},{0xa65c,0xa65c,0xa65d,0xa65c},
+{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0xa65d,0xa65c,0xa65d,0xa65c},{0xa65e,0xa65e,0xa65f,0xa65e},
+{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0x1e5f,0x1e5e,0x1e5f,0x1e5e},{0xa65f,0xa65e,0xa65f,0xa65e},{0xa660,0xa660,0xa661,0xa660},
+{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60},{0xa661,0xa660,0xa661,0xa660},{0xa662,0xa662,0xa663,0xa662},
+{0x1e62,0x1e62,0x1e63,0x1e62},{0xa663,0xa662,0xa663,0xa662},{0x1e63,0x1e62,0x1e63,0x1e62},{0xa664,0xa664,0xa665,0xa664},
+{0x1e64,0x1e64,0x1e65,0x1e64},{0x1e65,0x1e64,0x1e65,0x1e64},{0xa665,0xa664,0xa665,0xa664},{0x1e66,0x1e66,0x1e67,0x1e66},
+{0xa666,0xa666,0xa667,0xa666},{0xa667,0xa666,0xa667,0xa666},{0x1e67,0x1e66,0x1e67,0x1e66},{0xa668,0xa668,0xa669,0xa668},
+{0x1e68,0x1e68,0x1e69,0x1e68},{0x1e69,0x1e68,0x1e69,0x1e68},{0xa669,0xa668,0xa669,0xa668},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},
+{0xa66a,0xa66a,0xa66b,0xa66a},{0x1e6b,0x1e6a,0x1e6b,0x1e6a},{0xa66b,0xa66a,0xa66b,0xa66a},{0xa66c,0xa66c,0xa66d,0xa66c},
+{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0xa66d,0xa66c,0xa66d,0xa66c},{0x1e6d,0x1e6c,0x1e6d,0x1e6c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},
+{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70},{0x1e71,0x1e70,0x1e71,0x1e70},{0x1e72,0x1e72,0x1e73,0x1e72},
+{0x1e73,0x1e72,0x1e73,0x1e72},{0x1e74,0x1e74,0x1e75,0x1e74},{0x1e75,0x1e74,0x1e75,0x1e74},{0x1e76,0x1e76,0x1e77,0x1e76},
+{0x1e77,0x1e76,0x1e77,0x1e76},{0x1e78,0x1e78,0x1e79,0x1e78},{0x1e79,0x1e78,0x1e79,0x1e78},{0x1e7a,0x1e7a,0x1e7b,0x1e7a},
+{0x1e7b,0x1e7a,0x1e7b,0x1e7a},{0x1e7c,0x1e7c,0x1e7d,0x1e7c},{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},
+{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0x1e80,0x1e80,0x1e81,0x1e80},{0xa680,0xa680,0xa681,0xa680},{0xa681,0xa680,0xa681,0xa680},
+{0x1e81,0x1e80,0x1e81,0x1e80},{0x1e82,0x1e82,0x1e83,0x1e82},{0xa682,0xa682,0xa683,0xa682},{0xa683,0xa682,0xa683,0xa682},
+{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684},{0x1e84,0x1e84,0x1e85,0x1e84},{0x1e85,0x1e84,0x1e85,0x1e84},
+{0xa685,0xa684,0xa685,0xa684},{0x1e86,0x1e86,0x1e87,0x1e86},{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},
+{0x1e87,0x1e86,0x1e87,0x1e86},{0x1e88,0x1e88,0x1e89,0x1e88},{0xa688,0xa688,0xa689,0xa688},{0xa689,0xa688,0xa689,0xa688},
+{0x1e89,0x1e88,0x1e89,0x1e88},{0xa68a,0xa68a,0xa68b,0xa68a},{0x1e8a,0x1e8a,0x1e8b,0x1e8a},{0x1e8b,0x1e8a,0x1e8b,0x1e8a},
+{0xa68b,0xa68a,0xa68b,0xa68a},{0xa68c,0xa68c,0xa68d,0xa68c},{0x1e8c,0x1e8c,0x1e8d,0x1e8c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},
+{0xa68d,0xa68c,0xa68d,0xa68c},{0xa68e,0xa68e,0xa68f,0xa68e},{0x1e8e,0x1e8e,0x1e8f,0x1e8e},{0xa68f,0xa68e,0xa68f,0xa68e},
+{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa690,0xa690,0xa691,0xa690},{0x1e90,0x1e90,0x1e91,0x1e90},{0xa691,0xa690,0xa691,0xa690},
+{0x1e91,0x1e90,0x1e91,0x1e90},{0x1e92,0x1e92,0x1e93,0x1e92},{0xa692,0xa692,0xa693,0xa692},{0xa693,0xa692,0xa693,0xa692},
+{0x1e93,0x1e92,0x1e93,0x1e92},{0xa694,0xa694,0xa695,0xa694},{0x1e94,0x1e94,0x1e95,0x1e94},{0x1e95,0x1e94,0x1e95,0x1e94},
+{0xa695,0xa694,0xa695,0xa694},{0xa696,0xa696,0xa697,0xa696},{0xa697,0xa696,0xa697,0xa696},{0x1e9b,0x1e60,0x1e9b,0x1e60},
+{0x1e9e,0x1e9e,0x00df,0x1e9e},{0x1ea0,0x1ea0,0x1ea1,0x1ea0},{0x1ea1,0x1ea0,0x1ea1,0x1ea0},{0x1ea2,0x1ea2,0x1ea3,0x1ea2},
+{0x1ea3,0x1ea2,0x1ea3,0x1ea2},{0x1ea4,0x1ea4,0x1ea5,0x1ea4},{0x1ea5,0x1ea4,0x1ea5,0x1ea4},{0x1ea6,0x1ea6,0x1ea7,0x1ea6},
+{0x1ea7,0x1ea6,0x1ea7,0x1ea6},{0x1ea8,0x1ea8,0x1ea9,0x1ea8},{0x1ea9,0x1ea8,0x1ea9,0x1ea8},{0x1eaa,0x1eaa,0x1eab,0x1eaa},
+{0x1eab,0x1eaa,0x1eab,0x1eaa},{0x1eac,0x1eac,0x1ead,0x1eac},{0x1ead,0x1eac,0x1ead,0x1eac},{0x1eae,0x1eae,0x1eaf,0x1eae},
+{0x1eaf,0x1eae,0x1eaf,0x1eae},{0x1eb0,0x1eb0,0x1eb1,0x1eb0},{0x1eb1,0x1eb0,0x1eb1,0x1eb0},{0x1eb2,0x1eb2,0x1eb3,0x1eb2},
+{0x1eb3,0x1eb2,0x1eb3,0x1eb2},{0x1eb4,0x1eb4,0x1eb5,0x1eb4},{0x1eb5,0x1eb4,0x1eb5,0x1eb4},{0x1eb6,0x1eb6,0x1eb7,0x1eb6},
+{0x1eb7,0x1eb6,0x1eb7,0x1eb6},{0x1eb8,0x1eb8,0x1eb9,0x1eb8},{0x1eb9,0x1eb8,0x1eb9,0x1eb8},{0x1eba,0x1eba,0x1ebb,0x1eba},
+{0x1ebb,0x1eba,0x1ebb,0x1eba},{0x1ebc,0x1ebc,0x1ebd,0x1ebc},{0x1ebd,0x1ebc,0x1ebd,0x1ebc},{0x1ebe,0x1ebe,0x1ebf,0x1ebe},
+{0x1ebf,0x1ebe,0x1ebf,0x1ebe},{0x1ec0,0x1ec0,0x1ec1,0x1ec0},{0x1ec1,0x1ec0,0x1ec1,0x1ec0},{0x1ec2,0x1ec2,0x1ec3,0x1ec2},
+{0x1ec3,0x1ec2,0x1ec3,0x1ec2},{0x1ec4,0x1ec4,0x1ec5,0x1ec4},{0x1ec5,0x1ec4,0x1ec5,0x1ec4},{0x1ec6,0x1ec6,0x1ec7,0x1ec6},
+{0x1ec7,0x1ec6,0x1ec7,0x1ec6},{0x1ec8,0x1ec8,0x1ec9,0x1ec8},{0x1ec9,0x1ec8,0x1ec9,0x1ec8},{0x1eca,0x1eca,0x1ecb,0x1eca},
+{0x1ecb,0x1eca,0x1ecb,0x1eca},{0x1ecc,0x1ecc,0x1ecd,0x1ecc},{0x1ecd,0x1ecc,0x1ecd,0x1ecc},{0x1ece,0x1ece,0x1ecf,0x1ece},
+{0x1ecf,0x1ece,0x1ecf,0x1ece},{0x1ed0,0x1ed0,0x1ed1,0x1ed0},{0x1ed1,0x1ed0,0x1ed1,0x1ed0},{0x1ed2,0x1ed2,0x1ed3,0x1ed2},
+{0x1ed3,0x1ed2,0x1ed3,0x1ed2},{0x1ed4,0x1ed4,0x1ed5,0x1ed4},{0x1ed5,0x1ed4,0x1ed5,0x1ed4},{0x1ed6,0x1ed6,0x1ed7,0x1ed6},
+{0x1ed7,0x1ed6,0x1ed7,0x1ed6},{0x1ed8,0x1ed8,0x1ed9,0x1ed8},{0x1ed9,0x1ed8,0x1ed9,0x1ed8},{0x1eda,0x1eda,0x1edb,0x1eda},
+{0x1edb,0x1eda,0x1edb,0x1eda},{0x1edc,0x1edc,0x1edd,0x1edc},{0x1edd,0x1edc,0x1edd,0x1edc},{0x1ede,0x1ede,0x1edf,0x1ede},
+{0x1edf,0x1ede,0x1edf,0x1ede},{0x1ee0,0x1ee0,0x1ee1,0x1ee0},{0x1ee1,0x1ee0,0x1ee1,0x1ee0},{0x1ee2,0x1ee2,0x1ee3,0x1ee2},
+{0x1ee3,0x1ee2,0x1ee3,0x1ee2},{0x1ee4,0x1ee4,0x1ee5,0x1ee4},{0x1ee5,0x1ee4,0x1ee5,0x1ee4},{0x1ee6,0x1ee6,0x1ee7,0x1ee6},
+{0x1ee7,0x1ee6,0x1ee7,0x1ee6},{0x1ee8,0x1ee8,0x1ee9,0x1ee8},{0x1ee9,0x1ee8,0x1ee9,0x1ee8},{0x1eea,0x1eea,0x1eeb,0x1eea},
+{0x1eeb,0x1eea,0x1eeb,0x1eea},{0x1eec,0x1eec,0x1eed,0x1eec},{0x1eed,0x1eec,0x1eed,0x1eec},{0x1eee,0x1eee,0x1eef,0x1eee},
+{0x1eef,0x1eee,0x1eef,0x1eee},{0x1ef0,0x1ef0,0x1ef1,0x1ef0},{0x1ef1,0x1ef0,0x1ef1,0x1ef0},{0x1ef2,0x1ef2,0x1ef3,0x1ef2},
+{0x1ef3,0x1ef2,0x1ef3,0x1ef2},{0x1ef4,0x1ef4,0x1ef5,0x1ef4},{0x1ef5,0x1ef4,0x1ef5,0x1ef4},{0x1ef6,0x1ef6,0x1ef7,0x1ef6},
+{0x1ef7,0x1ef6,0x1ef7,0x1ef6},{0x1ef8,0x1ef8,0x1ef9,0x1ef8},{0x1ef9,0x1ef8,0x1ef9,0x1ef8},{0x1efa,0x1efa,0x1efb,0x1efa},
+{0x1efb,0x1efa,0x1efb,0x1efa},{0x1efc,0x1efc,0x1efd,0x1efc},{0x1efd,0x1efc,0x1efd,0x1efc},{0x1efe,0x1efe,0x1eff,0x1efe},
+{0x1eff,0x1efe,0x1eff,0x1efe},{0x1f00,0x1f08,0x1f00,0x1f08},{0x1f01,0x1f09,0x1f01,0x1f09},{0x1f02,0x1f0a,0x1f02,0x1f0a},
+{0x1f03,0x1f0b,0x1f03,0x1f0b},{0x1f04,0x1f0c,0x1f04,0x1f0c},{0x1f05,0x1f0d,0x1f05,0x1f0d},{0x1f06,0x1f0e,0x1f06,0x1f0e},
+{0x1f07,0x1f0f,0x1f07,0x1f0f},{0x1f08,0x1f08,0x1f00,0x1f08},{0x1f09,0x1f09,0x1f01,0x1f09},{0x1f0a,0x1f0a,0x1f02,0x1f0a},
+{0x1f0b,0x1f0b,0x1f03,0x1f0b},{0x1f0c,0x1f0c,0x1f04,0x1f0c},{0x1f0d,0x1f0d,0x1f05,0x1f0d},{0x1f0e,0x1f0e,0x1f06,0x1f0e},
+{0x1f0f,0x1f0f,0x1f07,0x1f0f},{0x1f10,0x1f18,0x1f10,0x1f18},{0x1f11,0x1f19,0x1f11,0x1f19},{0x1f12,0x1f1a,0x1f12,0x1f1a},
+{0x1f13,0x1f1b,0x1f13,0x1f1b},{0x1f14,0x1f1c,0x1f14,0x1f1c},{0x1f15,0x1f1d,0x1f15,0x1f1d},{0x1f18,0x1f18,0x1f10,0x1f18},
+{0x1f19,0x1f19,0x1f11,0x1f19},{0x1f1a,0x1f1a,0x1f12,0x1f1a},{0x1f1b,0x1f1b,0x1f13,0x1f1b},{0x1f1c,0x1f1c,0x1f14,0x1f1c},
+{0x1f1d,0x1f1d,0x1f15,0x1f1d},{0x1f20,0x1f28,0x1f20,0x1f28},{0xff21,0xff21,0xff41,0xff21},{0x1f21,0x1f29,0x1f21,0x1f29},
+{0x1f22,0x1f2a,0x1f22,0x1f2a},{0xff22,0xff22,0xff42,0xff22},{0xa722,0xa722,0xa723,0xa722},{0xa723,0xa722,0xa723,0xa722},
+{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xff23,0xff23,0xff43,0xff23},{0xa724,0xa724,0xa725,0xa724},{0xff24,0xff24,0xff44,0xff24},
+{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff25,0xff25,0xff45,0xff25},{0x1f25,0x1f2d,0x1f25,0x1f2d},{0xa725,0xa724,0xa725,0xa724},
+{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xff26,0xff26,0xff46,0xff26},{0xa726,0xa726,0xa727,0xa726},{0xff27,0xff27,0xff47,0xff27},
+{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xa727,0xa726,0xa727,0xa726},{0xa728,0xa728,0xa729,0xa728},{0xff28,0xff28,0xff48,0xff28},
+{0x1f28,0x1f28,0x1f20,0x1f28},{0xa729,0xa728,0xa729,0xa728},{0xff29,0xff29,0xff49,0xff29},{0x1f29,0x1f29,0x1f21,0x1f29},
+{0x1f2a,0x1f2a,0x1f22,0x1f2a},{0xff2a,0xff2a,0xff4a,0xff2a},{0xa72a,0xa72a,0xa72b,0xa72a},{0xff2b,0xff2b,0xff4b,0xff2b},
+{0xa72b,0xa72a,0xa72b,0xa72a},{0x1f2b,0x1f2b,0x1f23,0x1f2b},{0xa72c,0xa72c,0xa72d,0xa72c},{0xff2c,0xff2c,0xff4c,0xff2c},
+{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xa72d,0xa72c,0xa72d,0xa72c},{0x1f2d,0x1f2d,0x1f25,0x1f2d},{0xff2d,0xff2d,0xff4d,0xff2d},
+{0xff2e,0xff2e,0xff4e,0xff2e},{0xa72e,0xa72e,0xa72f,0xa72e},{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0x1f2f,0x1f2f,0x1f27,0x1f2f},
+{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f30,0x1f38,0x1f30,0x1f38},{0xff30,0xff30,0xff50,0xff30},
+{0x1f31,0x1f39,0x1f31,0x1f39},{0xff31,0xff31,0xff51,0xff31},{0xa732,0xa732,0xa733,0xa732},{0x1f32,0x1f3a,0x1f32,0x1f3a},
+{0xff32,0xff32,0xff52,0xff32},{0xff33,0xff33,0xff53,0xff33},{0x1f33,0x1f3b,0x1f33,0x1f3b},{0xa733,0xa732,0xa733,0xa732},
+{0xa734,0xa734,0xa735,0xa734},{0xff34,0xff34,0xff54,0xff34},{0x1f34,0x1f3c,0x1f34,0x1f3c},{0x1f35,0x1f3d,0x1f35,0x1f3d},
+{0xff35,0xff35,0xff55,0xff35},{0xa735,0xa734,0xa735,0xa734},{0xa736,0xa736,0xa737,0xa736},{0x1f36,0x1f3e,0x1f36,0x1f3e},
+{0xff36,0xff36,0xff56,0xff36},{0xa737,0xa736,0xa737,0xa736},{0x1f37,0x1f3f,0x1f37,0x1f3f},{0xff37,0xff37,0xff57,0xff37},
+{0x1f38,0x1f38,0x1f30,0x1f38},{0xff38,0xff38,0xff58,0xff38},{0xa738,0xa738,0xa739,0xa738},{0xff39,0xff39,0xff59,0xff39},
+{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73a,0xa73a,0xa73b,0xa73a},
+{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xa73b,0xa73a,0xa73b,0xa73a},{0x1f3b,0x1f3b,0x1f33,0x1f3b},{0x1f3c,0x1f3c,0x1f34,0x1f3c},
+{0xa73c,0xa73c,0xa73d,0xa73c},{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0xa73d,0xa73c,0xa73d,0xa73c},{0xa73e,0xa73e,0xa73f,0xa73e},
+{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0x1f3f,0x1f3f,0x1f37,0x1f3f},{0xa73f,0xa73e,0xa73f,0xa73e},{0x1f40,0x1f48,0x1f40,0x1f48},
+{0xa740,0xa740,0xa741,0xa740},{0x1f41,0x1f49,0x1f41,0x1f49},{0xff41,0xff21,0xff41,0xff21},{0xa741,0xa740,0xa741,0xa740},
+{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xa742,0xa742,0xa743,0xa742},{0xff42,0xff22,0xff42,0xff22},{0xa743,0xa742,0xa743,0xa742},
+{0xff43,0xff23,0xff43,0xff23},{0x1f43,0x1f4b,0x1f43,0x1f4b},{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},
+{0xa744,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25},{0xa745,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d},
+{0xa746,0xa746,0xa747,0xa746},{0xff46,0xff26,0xff46,0xff26},{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},
+{0x1f48,0x1f48,0x1f40,0x1f48},{0xff48,0xff28,0xff48,0xff28},{0xa748,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},
+{0x1f49,0x1f49,0x1f41,0x1f49},{0xa749,0xa748,0xa749,0xa748},{0xa74a,0xa74a,0xa74b,0xa74a},{0xff4a,0xff2a,0xff4a,0xff2a},
+{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xa74b,0xa74a,0xa74b,0xa74a},{0xff4b,0xff2b,0xff4b,0xff2b},
+{0x1f4c,0x1f4c,0x1f44,0x1f4c},{0xff4c,0xff2c,0xff4c,0xff2c},{0xa74c,0xa74c,0xa74d,0xa74c},{0xa74d,0xa74c,0xa74d,0xa74c},
+{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xff4d,0xff2d,0xff4d,0xff2d},{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74e,0xa74e,0xa74f,0xa74e},
+{0xff4f,0xff2f,0xff4f,0xff2f},{0xa74f,0xa74e,0xa74f,0xa74e},{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},
+{0xff51,0xff31,0xff51,0xff31},{0x1f51,0x1f59,0x1f51,0x1f59},{0xa751,0xa750,0xa751,0xa750},{0xff52,0xff32,0xff52,0xff32},
+{0xa752,0xa752,0xa753,0xa752},{0xa753,0xa752,0xa753,0xa752},{0x1f53,0x1f5b,0x1f53,0x1f5b},{0xff53,0xff33,0xff53,0xff33},
+{0xa754,0xa754,0xa755,0xa754},{0xff54,0xff34,0xff54,0xff34},{0xff55,0xff35,0xff55,0xff35},{0x1f55,0x1f5d,0x1f55,0x1f5d},
+{0xa755,0xa754,0xa755,0xa754},{0xff56,0xff36,0xff56,0xff36},{0xa756,0xa756,0xa757,0xa756},{0xa757,0xa756,0xa757,0xa756},
+{0xff57,0xff37,0xff57,0xff37},{0x1f57,0x1f5f,0x1f57,0x1f5f},{0xa758,0xa758,0xa759,0xa758},{0xff58,0xff38,0xff58,0xff38},
+{0xa759,0xa758,0xa759,0xa758},{0xff59,0xff39,0xff59,0xff39},{0x1f59,0x1f59,0x1f51,0x1f59},{0xff5a,0xff3a,0xff5a,0xff3a},
+{0xa75a,0xa75a,0xa75b,0xa75a},{0xa75b,0xa75a,0xa75b,0xa75a},{0x1f5b,0x1f5b,0x1f53,0x1f5b},{0xa75c,0xa75c,0xa75d,0xa75c},
+{0x1f5d,0x1f5d,0x1f55,0x1f5d},{0xa75d,0xa75c,0xa75d,0xa75c},{0xa75e,0xa75e,0xa75f,0xa75e},{0xa75f,0xa75e,0xa75f,0xa75e},
+{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0xa760,0xa760,0xa761,0xa760},{0x1f60,0x1f68,0x1f60,0x1f68},{0xa761,0xa760,0xa761,0xa760},
+{0x1f61,0x1f69,0x1f61,0x1f69},{0xa762,0xa762,0xa763,0xa762},{0x1f62,0x1f6a,0x1f62,0x1f6a},{0xa763,0xa762,0xa763,0xa762},
+{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa764,0xa764,0xa765,0xa764},{0x1f64,0x1f6c,0x1f64,0x1f6c},{0x1f65,0x1f6d,0x1f65,0x1f6d},
+{0xa765,0xa764,0xa765,0xa764},{0x1f66,0x1f6e,0x1f66,0x1f6e},{0xa766,0xa766,0xa767,0xa766},{0xa767,0xa766,0xa767,0xa766},
+{0x1f67,0x1f6f,0x1f67,0x1f6f},{0x1f68,0x1f68,0x1f60,0x1f68},{0xa768,0xa768,0xa769,0xa768},{0x1f69,0x1f69,0x1f61,0x1f69},
+{0xa769,0xa768,0xa769,0xa768},{0x1f6a,0x1f6a,0x1f62,0x1f6a},{0xa76a,0xa76a,0xa76b,0xa76a},{0xa76b,0xa76a,0xa76b,0xa76a},
+{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76c,0xa76c,0xa76d,0xa76c},{0x1f6c,0x1f6c,0x1f64,0x1f6c},{0xa76d,0xa76c,0xa76d,0xa76c},
+{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76e,0xa76e,0xa76f,0xa76e},{0x1f6e,0x1f6e,0x1f66,0x1f6e},{0xa76f,0xa76e,0xa76f,0xa76e},
+{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0x1f70,0x1fba,0x1f70,0x1fba},{0x1f71,0x1fbb,0x1f71,0x1fbb},{0x1f72,0x1fc8,0x1f72,0x1fc8},
+{0x1f73,0x1fc9,0x1f73,0x1fc9},{0x1f74,0x1fca,0x1f74,0x1fca},{0x1f75,0x1fcb,0x1f75,0x1fcb},{0x1f76,0x1fda,0x1f76,0x1fda},
+{0x1f77,0x1fdb,0x1f77,0x1fdb},{0x1f78,0x1ff8,0x1f78,0x1ff8},{0x1f79,0x1ff9,0x1f79,0x1ff9},{0xa779,0xa779,0xa77a,0xa779},
+{0x1f7a,0x1fea,0x1f7a,0x1fea},{0xa77a,0xa779,0xa77a,0xa779},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0xa77b,0xa77b,0xa77c,0xa77b},
+{0x1f7c,0x1ffa,0x1f7c,0x1ffa},{0xa77c,0xa77b,0xa77c,0xa77b},{0xa77d,0xa77d,0x1d79,0xa77d},{0x1f7d,0x1ffb,0x1f7d,0x1ffb},
+{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e},{0xa780,0xa780,0xa781,0xa780},{0x1f80,0x1f88,0x1f80,0x1f88},
+{0x1f81,0x1f89,0x1f81,0x1f89},{0xa781,0xa780,0xa781,0xa780},{0xa782,0xa782,0xa783,0xa782},{0x1f82,0x1f8a,0x1f82,0x1f8a},
+{0xa783,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b},{0xa784,0xa784,0xa785,0xa784},{0x1f84,0x1f8c,0x1f84,0x1f8c},
+{0x1f85,0x1f8d,0x1f85,0x1f8d},{0xa785,0xa784,0xa785,0xa784},{0x1f86,0x1f8e,0x1f86,0x1f8e},{0xa786,0xa786,0xa787,0xa786},
+{0xa787,0xa786,0xa787,0xa786},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},
+{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0xa78b,0xa78b,0xa78c,0xa78b},{0x1f8b,0x1f8b,0x1f83,0x1f8b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},
+{0xa78c,0xa78b,0xa78c,0xa78b},{0x1f8d,0x1f8d,0x1f85,0x1f8d},{0xa78d,0xa78d,0x0265,0xa78d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},
+{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0xa790,0xa790,0xa791,0xa790},{0x1f90,0x1f98,0x1f90,0x1f98},{0x1f91,0x1f99,0x1f91,0x1f99},
+{0xa791,0xa790,0xa791,0xa790},{0x1f92,0x1f9a,0x1f92,0x1f9a},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c},
+{0x1f95,0x1f9d,0x1f95,0x1f9d},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0x1f97,0x1f9f,0x1f97,0x1f9f},{0x1f98,0x1f98,0x1f90,0x1f98},
+{0x1f99,0x1f99,0x1f91,0x1f99},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b},{0x1f9c,0x1f9c,0x1f94,0x1f9c},
+{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0x1f9f,0x1f9f,0x1f97,0x1f9f},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},
+{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0x1fa1,0x1fa9,0x1fa1,0x1fa9},{0xa7a1,0xa7a0,0xa7a1,0xa7a0},{0x1fa2,0x1faa,0x1fa2,0x1faa},
+{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab},{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0x1fa4,0x1fac,0x1fa4,0x1fac},
+{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0x1fa5,0x1fad,0x1fa5,0x1fad},{0x1fa6,0x1fae,0x1fa6,0x1fae},
+{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa7,0x1faf,0x1fa7,0x1faf},{0xa7a7,0xa7a6,0xa7a7,0xa7a6},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},
+{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa9,0x1fa9,0x1fa1,0x1fa9},{0xa7a9,0xa7a8,0xa7a9,0xa7a8},{0x1faa,0x1faa,0x1fa2,0x1faa},
+{0x1fab,0x1fab,0x1fa3,0x1fab},{0x1fac,0x1fac,0x1fa4,0x1fac},{0x1fad,0x1fad,0x1fa5,0x1fad},{0x1fae,0x1fae,0x1fa6,0x1fae},
+{0x1faf,0x1faf,0x1fa7,0x1faf},{0x1fb0,0x1fb8,0x1fb0,0x1fb8},{0x1fb1,0x1fb9,0x1fb1,0x1fb9},{0x1fb3,0x1fbc,0x1fb3,0x1fbc},
+{0x1fb8,0x1fb8,0x1fb0,0x1fb8},{0x1fb9,0x1fb9,0x1fb1,0x1fb9},{0x1fba,0x1fba,0x1f70,0x1fba},{0x1fbb,0x1fbb,0x1f71,0x1fbb},
+{0x1fbc,0x1fbc,0x1fb3,0x1fbc},{0x1fbe,0x0399,0x1fbe,0x0399},{0x1fc3,0x1fcc,0x1fc3,0x1fcc},{0x1fc8,0x1fc8,0x1f72,0x1fc8},
+{0x1fc9,0x1fc9,0x1f73,0x1fc9},{0x1fca,0x1fca,0x1f74,0x1fca},{0x1fcb,0x1fcb,0x1f75,0x1fcb},{0x1fcc,0x1fcc,0x1fc3,0x1fcc},
+{0x1fd0,0x1fd8,0x1fd0,0x1fd8},{0x1fd1,0x1fd9,0x1fd1,0x1fd9},{0x1fd8,0x1fd8,0x1fd0,0x1fd8},{0x1fd9,0x1fd9,0x1fd1,0x1fd9},
+{0x1fda,0x1fda,0x1f76,0x1fda},{0x1fdb,0x1fdb,0x1f77,0x1fdb},{0x1fe0,0x1fe8,0x1fe0,0x1fe8},{0x1fe1,0x1fe9,0x1fe1,0x1fe9},
+{0x1fe5,0x1fec,0x1fe5,0x1fec},{0x1fe8,0x1fe8,0x1fe0,0x1fe8},{0x1fe9,0x1fe9,0x1fe1,0x1fe9},{0x1fea,0x1fea,0x1f7a,0x1fea},
+{0x1feb,0x1feb,0x1f7b,0x1feb},{0x1fec,0x1fec,0x1fe5,0x1fec},{0x1ff3,0x1ffc,0x1ff3,0x1ffc},{0x1ff8,0x1ff8,0x1f78,0x1ff8},
+{0x1ff9,0x1ff9,0x1f79,0x1ff9},{0x1ffa,0x1ffa,0x1f7c,0x1ffa},{0x1ffb,0x1ffb,0x1f7d,0x1ffb},{0x1ffc,0x1ffc,0x1ff3,0x1ffc},
+{0,0,0,0}};
+
+const unsigned unicode_case_offset[2048]={
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 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, 26, 26, 26, 26,
+ 26, 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, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+ 85, 87, 89, 91, 93, 95, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 197, 199, 200, 201, 202,
+ 203, 204, 205, 207, 208, 209, 210, 211, 212, 212, 213, 214, 215, 216, 217, 218,
+ 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 228, 229, 230, 231, 232, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281,
+ 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313,
+ 315, 316, 317, 318, 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 343, 344, 345, 346,
+ 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 357, 357, 358, 359, 360,
+ 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 371, 371, 372, 373, 373,
+ 374, 374, 374, 374, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
+ 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
+ 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
+ 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
+ 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
+ 465, 466, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
+ 480, 481, 482, 483, 484, 484, 484, 484, 484, 484, 484, 485, 486, 487, 488, 489,
+ 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
+ 506, 507, 508, 509, 510, 511, 511, 512, 513, 513, 514, 514, 515, 515, 515, 515,
+ 515, 516, 516, 516, 517, 517, 518, 518, 518, 519, 520, 520, 521, 521, 521, 521,
+ 522, 522, 523, 524, 524, 524, 525, 525, 525, 525, 525, 525, 525, 525, 526, 526,
+ 526, 527, 527, 527, 528, 528, 528, 528, 528, 529, 530, 531, 532, 533, 533, 533,
+ 533, 533, 533, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,
+ 534, 534, 534, 534, 534, 534, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535,
+ 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535,
+ 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535,
+ 535, 536, 537, 538, 539, 539, 539, 540, 541, 541, 541, 541, 542, 543, 544, 544,
+ 544, 544, 544, 544, 544, 544, 544, 545, 545, 546, 547, 548, 548, 549, 549, 550,
+ 551, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565,
+ 566, 567, 568, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580,
+ 581, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595,
+ 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611,
+ 612, 613, 614, 614, 614, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624,
+ 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640,
+ 641, 642, 643, 644, 644, 645, 646, 646, 647, 648, 649, 650, 651, 651, 652, 653,
+ 654, 657, 660, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699,
+ 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747,
+ 750, 753, 756, 759, 762, 765, 768, 771, 774, 777, 780, 783, 786, 789, 792, 795,
+ 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 833, 836, 839, 842,
+ 845, 848, 851, 854, 857, 860, 863, 866, 869, 872, 875, 878, 881, 884, 887, 890,
+ 893, 895, 897, 899, 901, 903, 905, 907, 909, 911, 913, 915, 917, 919, 921, 923,
+ 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954,
+ 956, 958, 959, 961, 963, 964, 966, 968, 969, 970, 971, 972, 973, 974, 975, 977,
+ 979, 981, 983, 984, 985, 986, 987, 988, 989, 990, 991, 993, 995, 997, 999,1001,
+1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,
+1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,
+1067,1069,1071,1073,1075,1077,1079,1082,1085,1088,1091,1094,1097,1100,1103,1106,
+1109,1112,1115,1118,1121,1124,1127,1130,1133,1136,1139,1142,1145,1148,1151,1154,
+1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1190,1193,1196,1199,1202,
+1205,1208,1211,1214,1217,1219,1221,1223,1225,1227,1229,1230,1232,1234,1236,1238,
+1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,
+1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,
+1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,
+1319,1321,1323,1325,1327,1329,1331,1332,1333,1333,1333,1333,1333,1333,1333,1333,
+1333,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,
+1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,
+1364,1365,1366,1367,1368,1369,1370,1371,1371,1371,1371,1371,1371,1371,1371,1371,
+1371,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,
+1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1397,1398,1399,1400,1402,1403,
+1404,1405,1406,1407,1408,1409,1410,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,
+1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,
+1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,
+1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,
+1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,
+1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503,1505,
+1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,
+1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1568,
+1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,
+1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,
+1617,1619,1621,1623,1625,1627,1629,1630,1631,1631,1631,1631,1632,1632,1632,1633,
+1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,
+1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,
+1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,
+1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,
+1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,
+1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,
+1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,
+1745,1746,1747,1748,1749,1750,1751,1751,1751,1752,1753,1754,1755,1756,1757,1757,
+1757,1758,1760,1763,1766,1769,1772,1775,1778,1781,1784,1787,1790,1793,1796,1799,
+1802,1804,1806,1809,1812,1815,1818,1821,1824,1827,1830,1833,1835,1837,1839,1841,
+1843,1845,1848,1851,1854,1857,1860,1862,1864,1867,1870,1873,1876,1879,1882,1884,
+1886,1888,1891,1893,1896,1898,1901,1903,1906,1908,1911,1913,1915,1916,1918,1919,
+1921,1923,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,
+1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1964,1966,1968,1970,1972,1973,
+1974,1976,1978,1980,1982,1984,1986,1988,1990,1991,1992,1993,1995,1997,1999,2000,
+2001,2003,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,
+2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2040,2041,2042,2043,2044,
+2045,2046,2047,2047,2048,2048,2048,2048,2048,2049,2050,2051,2052,2053,2053,2054,
+2054,2054,2054,2054,2055,2055,2055,2055,2055,2056,2057,2058,2059,2060,2060,2060,
+2060,2061,2062,2062,2062,2062,2062,2062,2062,2063,2064,2065,2066,2066,2066,2066,
+2066,2067,2068,2068,2068,2068,2069,2069,2069,2070,2071,2072,2073,2074,2074,2074,
+2074,2074,2074,2074,2075,2075,2075,2075,2075,2076,2077,2078,2079,2080,2080,2080
+};
diff --git a/unicode/unicode_wcwidth.c b/unicode/unicode_wcwidth.c
new file mode 100644
index 0000000..372f7a7
--- /dev/null
+++ b/unicode/unicode_wcwidth.c
@@ -0,0 +1,71 @@
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include "eastasianwidth.h"
+#include "linebreaktab_internal.h"
+
+#include <stdlib.h>
+
+int unicode_wcwidth(unicode_char c)
+{
+ size_t b=0;
+ size_t e=sizeof(unicode_wcwidth_tab)/sizeof(unicode_wcwidth_tab[0]);
+
+ while (b < e)
+ {
+ size_t n=b + (e-b)/2;
+
+ if (c >= unicode_wcwidth_tab[n][0])
+ {
+ if (c <= unicode_wcwidth_tab[n][1])
+ return 2;
+ b=n+1;
+ }
+ else
+ {
+ e=n;
+ }
+ }
+
+ switch (unicode_lb_lookup(c)) {
+ case UNICODE_LB_BK:
+ case UNICODE_LB_CR:
+ case UNICODE_LB_LF:
+ case UNICODE_LB_CM:
+ case UNICODE_LB_NL:
+ case UNICODE_LB_WJ:
+ case UNICODE_LB_ZW:
+ return 0;
+ default:
+ break;
+ }
+ return 1;
+}
+
+int unicode_isspace(unicode_char ch)
+{
+ if (ch == 9)
+ return 1;
+
+ switch (unicode_lb_lookup(ch)) {
+ case UNICODE_LB_BK:
+ case UNICODE_LB_CR:
+ case UNICODE_LB_LF:
+ case UNICODE_LB_NL:
+ case UNICODE_LB_SP:
+ return 1;
+ }
+
+ return 0;
+}
+
+size_t unicode_wcwidth_str(const unicode_char *c)
+{
+ size_t w=0;
+
+ while (*c)
+ w += unicode_wcwidth(*c++);
+
+
+ return w;
+}
diff --git a/unicode/unicode_wordbreak.c b/unicode/unicode_wordbreak.c
new file mode 100644
index 0000000..dee4b52
--- /dev/null
+++ b/unicode/unicode_wordbreak.c
@@ -0,0 +1,448 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <unistd.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "wordbreaktab_internal.h"
+#include "wordbreaktab.h"
+
+struct unicode_wb_info {
+ int (*cb_func)(int, void *);
+ void *cb_arg;
+
+ uint8_t prevclass;
+ size_t wb4_cnt;
+
+ size_t wb4_extra_cnt;
+
+ int (*next_handler)(unicode_wb_info_t, uint8_t);
+ int (*end_handler)(unicode_wb_info_t);
+};
+
+static int sot(unicode_wb_info_t i, uint8_t cl);
+static int wb4(unicode_wb_info_t i);
+static int wb1and2_done(unicode_wb_info_t i, uint8_t cl);
+
+static int seen_wb67_handler(unicode_wb_info_t i, uint8_t cl);
+static int seen_wb67_end_handler(unicode_wb_info_t i);
+static int wb67_done(unicode_wb_info_t i, uint8_t prevclass, uint8_t cl);
+
+static int seen_wb1112_handler(unicode_wb_info_t i, uint8_t cl);
+static int seen_wb1112_end_handler(unicode_wb_info_t i);
+static int wb1112_done(unicode_wb_info_t i, uint8_t prevclass, uint8_t cl);
+
+unicode_wb_info_t unicode_wb_init(int (*cb_func)(int, void *),
+ void *cb_arg)
+{
+ unicode_wb_info_t i=calloc(1, sizeof(struct unicode_wb_info));
+
+ if (!i)
+ return NULL;
+
+ i->next_handler=sot;
+ i->cb_func=cb_func;
+ i->cb_arg=cb_arg;
+ return i;
+}
+
+int unicode_wb_end(unicode_wb_info_t i)
+{
+ int rc;
+
+ if (i->end_handler)
+ rc=(*i->end_handler)(i);
+ else
+ rc=wb4(i);
+
+ free(i);
+ return rc;
+}
+
+int unicode_wb_next_cnt(unicode_wb_info_t i,
+ const unicode_char *chars,
+ size_t cnt)
+{
+ int rc;
+
+ while (cnt)
+ {
+ rc=unicode_wb_next(i, *chars++);
+ --cnt;
+ if (rc)
+ return rc;
+ }
+ return 0;
+}
+
+int unicode_wb_next(unicode_wb_info_t i, unicode_char ch)
+{
+ return (*i->next_handler)
+ (i, unicode_tab_lookup(ch,
+ unicode_indextab,
+ sizeof(unicode_indextab)
+ / sizeof(unicode_indextab[0]),
+ unicode_rangetab,
+ unicode_classtab,
+ UNICODE_WB_OTHER));
+}
+
+static int wb4(unicode_wb_info_t i)
+{
+ int rc=0;
+
+ while (i->wb4_cnt > 0)
+ {
+ --i->wb4_cnt;
+
+ if (rc == 0)
+ rc=(*i->cb_func)(0, i->cb_arg);
+ }
+ return rc;
+}
+
+static int result(unicode_wb_info_t i, int flag)
+{
+ int rc=wb4(i);
+
+ if (rc == 0)
+ rc=(*i->cb_func)(flag, i->cb_arg);
+
+ return rc;
+}
+
+#define SET_HANDLER(next,end) (i->next_handler=next, i->end_handler=end)
+
+static int sot(unicode_wb_info_t i, uint8_t cl)
+{
+ i->prevclass=cl;
+ SET_HANDLER(wb1and2_done, NULL);
+
+ return result(i, 1); /* WB1 */
+}
+
+static int wb1and2_done(unicode_wb_info_t i, uint8_t cl)
+{
+ uint8_t prevclass=i->prevclass;
+
+ i->prevclass=cl;
+
+ if (prevclass == UNICODE_WB_CR && cl == UNICODE_WB_LF)
+ return result(i, 0); /* WB3 */
+
+ switch (prevclass) {
+ case UNICODE_WB_CR:
+ case UNICODE_WB_LF:
+ case UNICODE_WB_Newline:
+ return result(i, 1); /* WB3a */
+ }
+
+ switch (cl) {
+ case UNICODE_WB_CR:
+ case UNICODE_WB_LF:
+ case UNICODE_WB_Newline:
+ return result(i, 1); /* WB3b */
+ }
+
+ if (cl == UNICODE_WB_Extend || cl == UNICODE_WB_Format)
+ {
+ i->prevclass=prevclass;
+ ++i->wb4_cnt;
+ return 0; /* WB4 */
+ }
+
+ if (prevclass == UNICODE_WB_ALetter && cl == UNICODE_WB_ALetter)
+ {
+ return result(i, 0); /* WB5 */
+ }
+
+ if (prevclass == UNICODE_WB_ALetter &&
+ (cl == UNICODE_WB_MidLetter || cl == UNICODE_WB_MidNumLet))
+ {
+ i->wb4_extra_cnt=0;
+ SET_HANDLER(seen_wb67_handler, seen_wb67_end_handler);
+ return 0;
+ }
+
+ return wb67_done(i, prevclass, cl);
+}
+
+/*
+** ALetter (MidLetter | MidNumLet ) ?
+**
+** prevclass cl
+**
+** Seen ALetter (MidLetter | MidNumLet), with the second character's status
+** not returned yet.
+*/
+
+static int seen_wb67_handler(unicode_wb_info_t i, uint8_t cl)
+{
+ int rc;
+ uint8_t prevclass;
+ size_t extra_cnt;
+
+ if (cl == UNICODE_WB_Extend || cl == UNICODE_WB_Format)
+ {
+ ++i->wb4_extra_cnt;
+ return 0;
+ }
+
+ extra_cnt=i->wb4_extra_cnt;
+
+ /*
+ ** Reset the handler to the default, then check WB6
+ */
+
+ SET_HANDLER(wb1and2_done, NULL);
+
+ if (cl == UNICODE_WB_ALetter)
+ {
+ rc=result(i, 0); /* WB6 */
+ i->wb4_cnt=extra_cnt;
+
+ if (rc == 0)
+ rc=result(i, 0); /* WB7 */
+
+ i->prevclass=cl;
+
+ return rc;
+ }
+
+ prevclass=i->prevclass; /* This was the second character */
+
+ /*
+ ** Process the second character, starting with WB7
+ */
+
+ rc=wb67_done(i, UNICODE_WB_ALetter, prevclass);
+
+ i->prevclass=prevclass;
+ i->wb4_cnt=extra_cnt;
+
+ if (rc == 0)
+ rc=(*i->next_handler)(i, cl);
+ /* Process the current char now */
+
+ return rc;
+}
+
+/*
+** Seen ALetter (MidLetter | MidNumLet), with the second character's status
+** not returned yet, and now sot.
+*/
+
+static int seen_wb67_end_handler(unicode_wb_info_t i)
+{
+ int rc;
+ size_t extra_cnt=i->wb4_extra_cnt;
+
+ /*
+ ** Process the second character, starting with WB7.
+ */
+
+ rc=wb67_done(i, UNICODE_WB_ALetter, i->prevclass);
+ i->wb4_cnt=extra_cnt;
+ if (rc == 0)
+ rc=wb4(i);
+ return rc;
+}
+
+
+static int wb67_done(unicode_wb_info_t i, uint8_t prevclass, uint8_t cl)
+{
+ if (prevclass == UNICODE_WB_Numeric && cl == UNICODE_WB_Numeric)
+ return result(i, 0); /* WB8 */
+
+ if (prevclass == UNICODE_WB_ALetter && cl == UNICODE_WB_Numeric)
+ return result(i, 0); /* WB9 */
+
+ if (prevclass == UNICODE_WB_Numeric && cl == UNICODE_WB_ALetter)
+ return result(i, 0); /* WB10 */
+
+
+ if (prevclass == UNICODE_WB_Numeric &&
+ (cl == UNICODE_WB_MidNum || cl == UNICODE_WB_MidNumLet))
+ {
+ i->wb4_extra_cnt=0;
+ SET_HANDLER(seen_wb1112_handler, seen_wb1112_end_handler);
+ return 0;
+ }
+
+ return wb1112_done(i, prevclass, cl);
+}
+
+/*
+** Numeric (MidNum | MidNumLet ) ?
+**
+** prevclass cl
+**
+** Seen Numeric (MidNum | MidNumLet), with the second character's status
+** not returned yet.
+*/
+
+static int seen_wb1112_handler(unicode_wb_info_t i, uint8_t cl)
+{
+ int rc;
+ uint8_t prevclass;
+ size_t extra_cnt;
+
+ if (cl == UNICODE_WB_Extend || cl == UNICODE_WB_Format)
+ {
+ ++i->wb4_extra_cnt;
+ return 0;
+ }
+
+ extra_cnt=i->wb4_extra_cnt;
+
+ /*
+ ** Reset the handler to the default, then check WB6
+ */
+
+ SET_HANDLER(wb1and2_done, NULL);
+
+ if (cl == UNICODE_WB_Numeric)
+ {
+ rc=result(i, 0); /* WB11 */
+ i->wb4_cnt=extra_cnt;
+
+ if (rc == 0)
+ rc=result(i, 0); /* WB12 */
+
+ i->prevclass=cl;
+
+ return rc;
+ }
+
+ prevclass=i->prevclass; /* This was the second character */
+
+ /*
+ ** Process the second character, starting with WB7
+ */
+
+ rc=wb1112_done(i, UNICODE_WB_Numeric, prevclass);
+
+ i->prevclass=prevclass;
+ i->wb4_cnt=extra_cnt;
+
+ if (rc == 0)
+ rc=(*i->next_handler)(i, cl);
+ /* Process the current char now */
+
+ return rc;
+}
+
+/*
+** Seen Numeric (MidNum | MidNumLet), with the second character's status
+** not returned yet, and now sot.
+*/
+
+static int seen_wb1112_end_handler(unicode_wb_info_t i)
+{
+ int rc;
+ size_t extra_cnt=i->wb4_extra_cnt;
+
+ /*
+ ** Process the second character, starting with WB11.
+ */
+
+ rc=wb1112_done(i, UNICODE_WB_Numeric, i->prevclass);
+ i->wb4_cnt=extra_cnt;
+ if (rc == 0)
+ rc=wb4(i);
+ return rc;
+}
+
+static int wb1112_done(unicode_wb_info_t i, uint8_t prevclass, uint8_t cl)
+{
+ if (prevclass == UNICODE_WB_Katakana &&
+ cl == UNICODE_WB_Katakana)
+ return result(i, 0); /* WB13 */
+
+ switch (prevclass) {
+ case UNICODE_WB_ALetter:
+ case UNICODE_WB_Numeric:
+ case UNICODE_WB_Katakana:
+ case UNICODE_WB_ExtendNumLet:
+ if (cl == UNICODE_WB_ExtendNumLet)
+ return result(i, 0); /* WB13a */
+ }
+
+ if (prevclass == UNICODE_WB_ExtendNumLet)
+ switch (cl) {
+ case UNICODE_WB_ALetter:
+ case UNICODE_WB_Numeric:
+ case UNICODE_WB_Katakana:
+ return result(i, 0); /* WB13b */
+ }
+
+ return result(i, 1); /* WB14 */
+}
+
+/* --------------------------------------------------------------------- */
+
+struct unicode_wbscan_info {
+ unicode_wb_info_t wb_handle;
+
+ int found;
+ size_t cnt;
+};
+
+static int unicode_wbscan_callback(int, void *);
+
+unicode_wbscan_info_t unicode_wbscan_init()
+{
+ unicode_wbscan_info_t i=calloc(1, sizeof(struct unicode_wbscan_info));
+
+ if (!i)
+ return NULL;
+
+ if ((i->wb_handle=unicode_wb_init(unicode_wbscan_callback, i)) == NULL)
+ {
+ free(i);
+ return NULL;
+ }
+
+ return i;
+}
+
+int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch)
+{
+ if (!i->found)
+ unicode_wb_next(i->wb_handle, ch);
+
+ return i->found;
+}
+
+size_t unicode_wbscan_end(unicode_wbscan_info_t i)
+{
+ size_t n;
+
+ unicode_wb_end(i->wb_handle);
+
+ n=i->cnt;
+ free(i);
+ return n;
+}
+
+static int unicode_wbscan_callback(int flag, void *arg)
+{
+ unicode_wbscan_info_t i=(unicode_wbscan_info_t)arg;
+
+ if (flag && i->cnt > 0)
+ i->found=1;
+
+ if (!i->found)
+ ++i->cnt;
+ return 0;
+}
+
diff --git a/unicode/unicodebuf.c b/unicode/unicodebuf.c
new file mode 100644
index 0000000..66687c3
--- /dev/null
+++ b/unicode/unicodebuf.c
@@ -0,0 +1,127 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+#include <stdlib.h>
+#include <string.h>
+
+void unicode_buf_init(struct unicode_buf *p, size_t max)
+{
+ p->ptr=0;
+ p->size=0;
+ p->len=0;
+ p->max=max;
+}
+
+void unicode_buf_deinit(struct unicode_buf *p)
+{
+ if (p->ptr)
+ free(p->ptr);
+}
+
+int unicode_buf_append(struct unicode_buf *p,
+ const unicode_char *uc, size_t l)
+{
+ if (l > p->max-p->len)
+ l=p->max-p->len;
+
+ if (p->len + l > p->size)
+ {
+ size_t n=(p->len + l) * 2;
+ unicode_char *newp;
+
+ if (n < 256)
+ n=256;
+
+ if (n > p->max)
+ n=p->max;
+
+ newp=p->ptr ? realloc(p->ptr, n * sizeof(unicode_char))
+ : malloc(n * sizeof(unicode_char));
+
+ if (!newp)
+ return -1;
+
+ p->ptr=newp;
+ p->size=n;
+ }
+
+ memcpy(p->ptr + p->len, uc, l * sizeof(unicode_char));
+
+ p->len += l;
+ return 0;
+}
+
+void unicode_buf_append_char(struct unicode_buf *dst,
+ const char *str,
+ size_t cnt)
+{
+ unicode_char unicode_buf[256];
+
+ while (cnt)
+ {
+ size_t n=sizeof(unicode_buf)/sizeof(unicode_buf[0]), i;
+
+ if (n > cnt)
+ n=cnt;
+
+ for (i=0; i<n; ++i)
+ unicode_buf[i]=(unsigned char)str[i];
+
+ str += n;
+ cnt -= n;
+ unicode_buf_append(dst, unicode_buf, i);
+ }
+}
+
+void unicode_buf_remove(struct unicode_buf *p,
+ size_t pos,
+ size_t cnt)
+{
+ if (pos > p->len)
+ pos=p->len;
+
+ if (cnt > p->len-pos)
+ cnt=p->len-pos;
+
+ if (cnt)
+ memmove(p->ptr+pos+cnt, p->ptr+pos, p->len-pos-cnt);
+ p->len -= cnt;
+}
+
+int unicode_buf_cmp(const struct unicode_buf *a,
+ const struct unicode_buf *b)
+{
+ size_t i;
+
+ for (i=0; i<a->len && i<b->len; i++)
+ {
+ if (a->ptr[i] < b->ptr[i])
+ return -1;
+ if (a->ptr[i] > b->ptr[i])
+ return 1;
+ }
+
+ return (a->len < b->len ? -1:a->len > b->len ? 1:0);
+}
+
+int unicode_buf_cmp_str(const struct unicode_buf *p, const char *c,
+ size_t cl)
+{
+ size_t i;
+
+ for (i=0; i<p->len && i < cl; ++i)
+ {
+ if (p->ptr[i] < c[i])
+ return -1;
+
+ if (p->ptr[i] > c[i])
+ return 1;
+ }
+
+ return (p->len < cl ? -1: p->len > cl ? 1:0);
+}
diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C
new file mode 100644
index 0000000..e5c2824
--- /dev/null
+++ b/unicode/unicodecpp.C
@@ -0,0 +1,474 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+
+extern "C" {
+
+ static int iconv_trampoline(const char *str, size_t cnt, void *arg)
+ {
+ return reinterpret_cast<mail::iconvert *>(arg)
+ ->converted(str, cnt);
+ }
+
+ int mail::linebreak_trampoline(int value, void *ptr)
+ {
+ return (*reinterpret_cast<mail::linebreak_callback_base *>
+ (ptr))(value);
+ }
+
+ int mail::linebreakc_trampoline(int value, unicode_char ch, void *ptr)
+ {
+ return (*reinterpret_cast<mail::linebreakc_callback_base *>
+ (ptr))(value, ch);
+ }
+
+ int mail::wordbreak_trampoline(int value, void *ptr)
+ {
+ return (*reinterpret_cast<mail::wordbreak_callback_base *>
+ (ptr))(value != 0);
+ }
+
+}
+
+size_t unicode_wcwidth(const std::vector<unicode_char> &uc)
+{
+ size_t w=0;
+
+ for (std::vector<unicode_char>::const_iterator
+ b(uc.begin()), e(uc.end()); b != e; ++b)
+ w += unicode_wcwidth(*b);
+ return w;
+}
+
+mail::iconvert::iconvert() : handle(NULL)
+{
+}
+
+mail::iconvert::~iconvert()
+{
+ end();
+}
+
+int mail::iconvert::converted(const char *, size_t)
+{
+ return 0;
+}
+
+bool mail::iconvert::begin(const std::string &src_chset,
+ const std::string &dst_chset)
+{
+ end();
+
+ if ((handle=libmail_u_convert_init(src_chset.c_str(),
+ dst_chset.c_str(),
+ &iconv_trampoline,
+ this)) == NULL)
+ return false;
+ return true;
+}
+
+bool mail::iconvert::end(bool *errflag)
+{
+ int errptr;
+
+ int rc;
+
+ if (!handle)
+ return true;
+
+ rc=libmail_u_convert_deinit(handle, &errptr);
+ handle=NULL;
+
+ if (errflag)
+ *errflag=errptr != 0;
+ return rc == 0;
+}
+
+bool mail::iconvert::operator()(const char *str, size_t cnt)
+{
+ if (!handle)
+ return false;
+
+ return (libmail_u_convert(handle, str, cnt) == 0);
+}
+
+bool mail::iconvert::operator()(const unicode_char *str, size_t cnt)
+{
+ if (!handle)
+ return false;
+
+ return (libmail_u_convert_uc(handle, str, cnt) == 0);
+}
+
+std::string mail::iconvert::convert(const std::string &text,
+ const std::string &charset,
+ const std::string &dstcharset,
+ bool &errflag)
+{
+ std::string buf;
+ int errptr;
+
+ char *p=libmail_u_convert_tobuf(text.c_str(),
+ charset.c_str(),
+ dstcharset.c_str(),
+ &errptr);
+
+ errflag= errptr != 0;
+
+ try {
+ buf=p;
+ free(p);
+ } catch (...) {
+ free(p);
+ throw;
+ }
+
+ return buf;
+}
+
+
+std::string mail::iconvert::convert(const std::vector<unicode_char> &uc,
+ const std::string &dstcharset,
+ bool &errflag)
+{
+ std::string buf;
+
+ char *c;
+ size_t csize;
+ int err;
+
+ if (libmail_u_convert_fromu_tobuf(&uc[0], uc.size(),
+ dstcharset.c_str(), &c, &csize,
+ &err))
+ {
+ err=1;
+ }
+ else
+ {
+ if (csize)
+ --csize; // Trailing NULL
+ try {
+ buf.append(c, c+csize);
+ free(c);
+ } catch (...)
+ {
+ free(c);
+ throw;
+ }
+ }
+
+ errflag= err != 0;
+
+ return buf;
+}
+
+bool mail::iconvert::convert(const std::string &text,
+ const std::string &charset,
+ std::vector<unicode_char> &uc)
+{
+ int err;
+
+ unicode_char *ucbuf;
+ size_t ucsize;
+
+ if (libmail_u_convert_tou_tobuf(text.c_str(),
+ text.size(),
+ charset.c_str(),
+ &ucbuf,
+ &ucsize,
+ &err))
+ return false;
+
+ try {
+ uc.clear();
+ uc.reserve(ucsize);
+ uc.insert(uc.end(), ucbuf, ucbuf+ucsize);
+ free(ucbuf);
+ } catch (...)
+ {
+ free(ucbuf);
+ throw;
+ }
+
+ return err == 0;
+}
+
+int mail::iconvert::tou::converted(const unicode_char *, size_t)
+{
+ return 0;
+}
+
+bool mail::iconvert::tou::begin(const std::string &chset)
+{
+ return iconvert::begin(chset, libmail_u_ucs4_native);
+}
+
+int mail::iconvert::tou::converted(const char *ptr, size_t cnt)
+{
+ return converted(reinterpret_cast<const unicode_char *>(ptr),
+ cnt/sizeof(unicode_char));
+}
+
+void mail::iconvert::tou::convert(const std::string &str,
+ const std::string &chset,
+ std::vector<unicode_char> &out_buf)
+{
+ convert(str.begin(), str.end(), chset, out_buf);
+}
+
+bool mail::iconvert::fromu::begin(const std::string &chset)
+{
+ return iconvert::begin(libmail_u_ucs4_native, chset);
+}
+
+std::string mail::iconvert::fromu::convert(const std::vector<unicode_char>
+ &ubuf,
+ const std::string &chset)
+{
+ std::string s;
+
+ convert(ubuf, chset, s);
+ return s;
+}
+
+void mail::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf,
+ const std::string &chset,
+ std::string &out_buf)
+{
+ convert(ubuf.begin(), ubuf.end(), chset, out_buf);
+}
+
+std::string mail::iconvert::convert_tocase(const std::string &text,
+ const std::string &charset,
+ bool &err,
+ unicode_char (*first_char_func)(unicode_char),
+ unicode_char (*char_func)(unicode_char))
+{
+ err=false;
+ std::string s;
+
+ char *p=libmail_u_convert_tocase(text.c_str(),
+ charset.c_str(),
+ first_char_func,
+ char_func);
+
+ if (!p)
+ {
+ err=true;
+ return s;
+ }
+
+ try {
+ s=p;
+ free(p);
+ } catch (...) {
+ free(p);
+ throw;
+ }
+ return s;
+}
+
+mail::linebreak_callback_base::linebreak_callback_base()
+ : handle(NULL), opts(0)
+{
+}
+
+
+void mail::linebreak_callback_base::set_opts(int optsArg)
+{
+ opts=optsArg;
+
+ if (handle)
+ unicode_lb_set_opts(handle, opts);
+}
+
+mail::linebreak_callback_base::~linebreak_callback_base()
+{
+ finish();
+}
+
+int mail::linebreak_callback_base::operator()(int)
+{
+ return 0;
+}
+
+mail::linebreak_callback_base
+&mail::linebreak_callback_base::operator<<(unicode_char uc)
+{
+ if (!handle)
+ {
+ handle=unicode_lb_init(linebreak_trampoline,
+ reinterpret_cast<void *>
+ (static_cast<linebreak_callback_base *>
+ (this)));
+ set_opts(opts);
+ }
+
+ if (handle)
+ if (unicode_lb_next(handle, uc))
+ finish();
+ return *this;
+}
+
+void mail::linebreak_callback_base::finish()
+{
+ if (handle)
+ unicode_lb_end(handle);
+ handle=NULL;
+}
+
+
+mail::linebreak_callback_save_buf::linebreak_callback_save_buf()
+{
+}
+
+mail::linebreak_callback_save_buf::~linebreak_callback_save_buf()
+{
+}
+
+int mail::linebreak_callback_save_buf::operator()(int value)
+{
+ lb_buf.push_back(value);
+ return 0;
+}
+
+mail::linebreakc_callback_base::linebreakc_callback_base()
+ : handle(NULL), opts(0)
+{
+}
+
+mail::linebreakc_callback_base::~linebreakc_callback_base()
+{
+ finish();
+}
+
+int mail::linebreakc_callback_base::operator()(int, unicode_char)
+{
+ return 0;
+}
+
+void mail::linebreakc_callback_base::set_opts(int optsArg)
+{
+ opts=optsArg;
+
+ if (handle)
+ unicode_lbc_set_opts(handle, opts);
+}
+
+mail::linebreakc_callback_base
+&mail::linebreakc_callback_base::operator<<(unicode_char uc)
+{
+ if (handle == NULL)
+ {
+ handle=unicode_lbc_init(linebreakc_trampoline,
+ reinterpret_cast<void *>
+ (static_cast<linebreakc_callback_base *>
+ (this)));
+ set_opts(opts);
+ }
+
+ if (handle)
+ if (unicode_lbc_next(handle, uc))
+ finish();
+ return *this;
+}
+
+void mail::linebreakc_callback_base::finish()
+{
+ if (handle)
+ unicode_lbc_end(handle);
+ handle=NULL;
+}
+
+
+mail::linebreakc_callback_save_buf::linebreakc_callback_save_buf()
+{
+}
+
+mail::linebreakc_callback_save_buf::~linebreakc_callback_save_buf()
+{
+}
+
+int mail::linebreakc_callback_save_buf::operator()(int c, unicode_char ch)
+{
+ lb_buf.push_back(std::make_pair(c, ch));
+ return 0;
+}
+
+mail::wordbreak_callback_base::wordbreak_callback_base()
+ : handle(NULL)
+{
+}
+
+mail::wordbreak_callback_base::~wordbreak_callback_base()
+{
+ finish();
+}
+
+int mail::wordbreak_callback_base::operator()(bool)
+{
+ return 0;
+}
+
+mail::wordbreak_callback_base
+&mail::wordbreak_callback_base::operator<<(unicode_char uc)
+{
+ if (!handle)
+ {
+ handle=unicode_wb_init(wordbreak_trampoline,
+ reinterpret_cast<void *>
+ (static_cast<wordbreak_callback_base *>
+ (this)));
+ }
+
+ if (handle)
+ if (unicode_wb_next(handle, uc))
+ finish();
+ return *this;
+}
+
+void mail::wordbreak_callback_base::finish()
+{
+ if (handle)
+ unicode_wb_end(handle);
+ handle=NULL;
+}
+
+/* -------------------------------------------- */
+
+mail::wordbreakscan::wordbreakscan() : handle(NULL)
+{
+}
+
+mail::wordbreakscan::~wordbreakscan()
+{
+ finish();
+}
+
+bool mail::wordbreakscan::operator<<(unicode_char uc)
+{
+ if (!handle)
+ handle=unicode_wbscan_init();
+
+ if (handle)
+ return unicode_wbscan_next(handle, uc) != 0;
+
+ return false;
+}
+
+size_t mail::wordbreakscan::finish()
+{
+ size_t n=0;
+
+ if (handle)
+ {
+ n=unicode_wbscan_end(handle);
+ handle=NULL;
+ }
+ return n;
+}
diff --git a/unicode/unicodefilter.pl b/unicode/unicodefilter.pl
new file mode 100644
index 0000000..a08c139
--- /dev/null
+++ b/unicode/unicodefilter.pl
@@ -0,0 +1,31 @@
+
+my $unicodes=shift;
+my $testing_hook=shift;
+
+my %unicodes;
+
+grep ( $unicodes{lc($_)}=1, split (/,/, $unicodes));
+
+while (<STDIN>)
+{
+ if ($unicodes eq "" || $unicodes eq "yes")
+ {
+ print;
+ next;
+ }
+
+my ($chset, $structname)=split (/[ \t\r\n]/, $_);
+
+ if ($unicodes eq "no")
+ {
+ next if $structname ne "unicode_ISO8859_1";
+ }
+ else
+ {
+ next unless $unicodes{lc($chset)}
+ || $structname eq "unicode_ISO8859_1";
+ }
+ print;
+}
+
+print "X-TEST\tunicode_XTEST\n" if $testing_hook eq "yes";
diff --git a/unicode/unicodetest.c b/unicode/unicodetest.c
new file mode 100644
index 0000000..0356624
--- /dev/null
+++ b/unicode/unicodetest.c
@@ -0,0 +1,206 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#include "unicode_config.h"
+#include "unicode.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+struct collect_buf {
+ char *ptr;
+ size_t cnt;
+ size_t size;
+};
+
+static int save_output(const char *p, size_t n, void *ptr)
+{
+ struct collect_buf *cb=(struct collect_buf *)ptr;
+
+ while (n)
+ {
+ if (cb->cnt < cb->size)
+ cb->ptr[cb->cnt++]=*p;
+ ++p;
+ --n;
+ }
+ return 0;
+}
+
+static void test1()
+{
+ static const char teststr[]= {
+ 0x00, 0x00, 0x00, 0x41,
+ 0x00, 0x00, 0x04, 0x14,
+ 0x00, 0x00, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x42};
+ char outputbuf[12];
+ struct collect_buf cb;
+ libmail_u_convert_handle_t h;
+ int checkflag;
+
+ cb.ptr=outputbuf;
+ cb.cnt=0;
+ cb.size=sizeof(outputbuf);
+
+ if ((h=libmail_u_convert_init("UCS-4BE", "ISO-8859-1",
+ save_output, &cb)) == NULL)
+ {
+ perror("libmail_u_convert_init");
+ exit(1);
+ }
+
+ libmail_u_convert(h, teststr, sizeof(teststr));
+
+ if (libmail_u_convert_deinit(h, &checkflag))
+ {
+ perror("libmail_u_convert_deinit");
+ exit(1);
+ }
+ if (cb.cnt != 2 || memcmp(cb.ptr, "AB", 2) || !checkflag)
+ {
+ fprintf(stderr, "Unexpected result from convert()\n");
+ exit(1);
+ }
+}
+
+static void test2()
+{
+ unicode_char *ucptr;
+ size_t ucsize;
+ libmail_u_convert_handle_t h=
+ libmail_u_convert_tou_init("utf-8", &ucptr, &ucsize, 1);
+ char *cptr;
+ size_t csize;
+
+ if (h)
+ {
+ size_t i;
+
+ for (i=0; i<1024/32; ++i)
+ libmail_u_convert(h, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ 32);
+
+ if (libmail_u_convert_deinit(h, NULL) == 0 &&
+ ucsize == 1024+1)
+ {
+ for (i=0; i<1024; i++)
+ if (ucptr[i] != 'A')
+ break;
+
+ if (i == 1024)
+ {
+ h=libmail_u_convert_fromu_init("utf-8",
+ &cptr, &csize,
+ 1);
+
+ if (h)
+ {
+ libmail_u_convert_uc(h, ucptr, 1024);
+ if (libmail_u_convert_deinit(h, NULL)
+ == 0 && csize == 1024+1)
+ {
+ for (i=0; i<1024; i++)
+ if (cptr[i] != 'A')
+ break;
+
+ free(ucptr);
+ free(cptr);
+ if (i == 1024)
+ return;
+ }
+ }
+ }
+ }
+ fprintf(stderr, "test2: failed");
+ errno=EINVAL;
+ }
+ perror("test2");
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ const char *chset=unicode_x_imap_modutf7;
+ int argn=1;
+
+ if (argn < argc && strcmp(argv[argn], "--smap") == 0)
+ {
+ chset=unicode_x_imap_modutf7 " ./~:";
+ ++argn;
+ }
+
+ if (argn < argc && strcmp(argv[argn], "--totitle") == 0)
+ {
+ ++argn;
+
+ if (argn < argc)
+ {
+ char *p=libmail_u_convert_tocase(argv[argn],
+ "utf-8",
+ unicode_tc,
+ unicode_lc);
+
+ if (p)
+ {
+ printf("%s\n", p);
+ free(p);
+ exit(0);
+ }
+ }
+ exit(1);
+ }
+
+ if (argn < argc)
+ {
+ int errflag;
+ char *p=libmail_u_convert_tobuf(argv[argn],
+ "utf-8",
+ chset,
+ &errflag);
+ char *q;
+
+ if (!p)
+ {
+ perror("libmail_u_convert");
+ exit(1);
+ }
+
+ if (errflag)
+ {
+ fprintf(stderr, "Conversion error?\n");
+ exit(1);
+ }
+
+ q=libmail_u_convert_tobuf(p, chset, "utf-8", &errflag);
+ if (!q)
+ {
+ perror("libmail_u_convert");
+ exit(1);
+ }
+
+ if (errflag)
+ {
+ fprintf(stderr, "Conversion error?\n");
+ exit(1);
+ }
+ if (strcmp(q, argv[argn]))
+ {
+ fprintf(stderr, "Round trip error\n");
+ exit(1);
+ }
+ printf("%s\n", p);
+ free(p);
+ free(q);
+ }
+ else
+ {
+ test1();
+ test2();
+ }
+ return 0;
+}
diff --git a/unicode/update.sh b/unicode/update.sh
new file mode 100644
index 0000000..2388639
--- /dev/null
+++ b/unicode/update.sh
@@ -0,0 +1,23 @@
+
+filename="$1"
+url="$2"
+
+tmpfilename="$filename.tmp"
+
+echo wget $url
+wget -O - $url >$tmpfilename
+if test ! -s $tmpfilename
+then
+ rm -f $tmpfilename
+ exit 1
+fi
+
+if test -f $filename
+then
+ if cmp -s $filename $tmpfilename
+ then
+ rm -f $tmpfilename
+ exit 0
+ fi
+fi
+mv $tmpfilename $filename
diff --git a/unicode/wordbreaktab.h b/unicode/wordbreaktab.h
new file mode 100644
index 0000000..5e07d7a
--- /dev/null
+++ b/unicode/wordbreaktab.h
@@ -0,0 +1,5083 @@
+static const uint8_t unicode_rangetab[][2]={
+ {0x000a & 0xFF, 0x000a & 0xFF},
+ {0x000b & 0xFF, 0x000c & 0xFF},
+ {0x000d & 0xFF, 0x000d & 0xFF},
+ {0x0027 & 0xFF, 0x0027 & 0xFF},
+ {0x002c & 0xFF, 0x002c & 0xFF},
+ {0x002e & 0xFF, 0x002e & 0xFF},
+ {0x0030 & 0xFF, 0x0039 & 0xFF},
+ {0x003a & 0xFF, 0x003a & 0xFF},
+ {0x003b & 0xFF, 0x003b & 0xFF},
+ {0x0041 & 0xFF, 0x005a & 0xFF},
+ {0x005f & 0xFF, 0x005f & 0xFF},
+ {0x0061 & 0xFF, 0x007a & 0xFF},
+ {0x0085 & 0xFF, 0x0085 & 0xFF},
+ {0x00aa & 0xFF, 0x00aa & 0xFF},
+ {0x00ad & 0xFF, 0x00ad & 0xFF},
+ {0x00b5 & 0xFF, 0x00b5 & 0xFF},
+ {0x00b7 & 0xFF, 0x00b7 & 0xFF},
+ {0x00ba & 0xFF, 0x00ba & 0xFF},
+ {0x00c0 & 0xFF, 0x00d6 & 0xFF},
+ {0x00d8 & 0xFF, 0x00f6 & 0xFF},
+ {0x00f8 & 0xFF, 0x00ff & 0xFF},
+ {0x0100 & 0xFF, 0x01ff & 0xFF},
+ {0x0200 & 0xFF, 0x02c1 & 0xFF},
+ {0x02c6 & 0xFF, 0x02d1 & 0xFF},
+ {0x02e0 & 0xFF, 0x02e4 & 0xFF},
+ {0x02ec & 0xFF, 0x02ec & 0xFF},
+ {0x02ee & 0xFF, 0x02ee & 0xFF},
+ {0x0300 & 0xFF, 0x036f & 0xFF},
+ {0x0370 & 0xFF, 0x0374 & 0xFF},
+ {0x0376 & 0xFF, 0x0377 & 0xFF},
+ {0x037a & 0xFF, 0x037d & 0xFF},
+ {0x037e & 0xFF, 0x037e & 0xFF},
+ {0x0386 & 0xFF, 0x0386 & 0xFF},
+ {0x0387 & 0xFF, 0x0387 & 0xFF},
+ {0x0388 & 0xFF, 0x038a & 0xFF},
+ {0x038c & 0xFF, 0x038c & 0xFF},
+ {0x038e & 0xFF, 0x03a1 & 0xFF},
+ {0x03a3 & 0xFF, 0x03f5 & 0xFF},
+ {0x03f7 & 0xFF, 0x03ff & 0xFF},
+ {0x0400 & 0xFF, 0x0481 & 0xFF},
+ {0x0483 & 0xFF, 0x0489 & 0xFF},
+ {0x048a & 0xFF, 0x04ff & 0xFF},
+ {0x0500 & 0xFF, 0x0527 & 0xFF},
+ {0x0531 & 0xFF, 0x0556 & 0xFF},
+ {0x0559 & 0xFF, 0x0559 & 0xFF},
+ {0x0561 & 0xFF, 0x0587 & 0xFF},
+ {0x0589 & 0xFF, 0x0589 & 0xFF},
+ {0x0591 & 0xFF, 0x05bd & 0xFF},
+ {0x05bf & 0xFF, 0x05bf & 0xFF},
+ {0x05c1 & 0xFF, 0x05c2 & 0xFF},
+ {0x05c4 & 0xFF, 0x05c5 & 0xFF},
+ {0x05c7 & 0xFF, 0x05c7 & 0xFF},
+ {0x05d0 & 0xFF, 0x05ea & 0xFF},
+ {0x05f0 & 0xFF, 0x05f3 & 0xFF},
+ {0x05f4 & 0xFF, 0x05f4 & 0xFF},
+ {0x0600 & 0xFF, 0x0603 & 0xFF},
+ {0x060c & 0xFF, 0x060d & 0xFF},
+ {0x0610 & 0xFF, 0x061a & 0xFF},
+ {0x0620 & 0xFF, 0x064a & 0xFF},
+ {0x064b & 0xFF, 0x065f & 0xFF},
+ {0x0660 & 0xFF, 0x0669 & 0xFF},
+ {0x066b & 0xFF, 0x066b & 0xFF},
+ {0x066c & 0xFF, 0x066c & 0xFF},
+ {0x066e & 0xFF, 0x066f & 0xFF},
+ {0x0670 & 0xFF, 0x0670 & 0xFF},
+ {0x0671 & 0xFF, 0x06d3 & 0xFF},
+ {0x06d5 & 0xFF, 0x06d5 & 0xFF},
+ {0x06d6 & 0xFF, 0x06dc & 0xFF},
+ {0x06dd & 0xFF, 0x06dd & 0xFF},
+ {0x06df & 0xFF, 0x06e4 & 0xFF},
+ {0x06e5 & 0xFF, 0x06e6 & 0xFF},
+ {0x06e7 & 0xFF, 0x06e8 & 0xFF},
+ {0x06ea & 0xFF, 0x06ed & 0xFF},
+ {0x06ee & 0xFF, 0x06ef & 0xFF},
+ {0x06f0 & 0xFF, 0x06f9 & 0xFF},
+ {0x06fa & 0xFF, 0x06fc & 0xFF},
+ {0x06ff & 0xFF, 0x06ff & 0xFF},
+ {0x070f & 0xFF, 0x070f & 0xFF},
+ {0x0710 & 0xFF, 0x0710 & 0xFF},
+ {0x0711 & 0xFF, 0x0711 & 0xFF},
+ {0x0712 & 0xFF, 0x072f & 0xFF},
+ {0x0730 & 0xFF, 0x074a & 0xFF},
+ {0x074d & 0xFF, 0x07a5 & 0xFF},
+ {0x07a6 & 0xFF, 0x07b0 & 0xFF},
+ {0x07b1 & 0xFF, 0x07b1 & 0xFF},
+ {0x07c0 & 0xFF, 0x07c9 & 0xFF},
+ {0x07ca & 0xFF, 0x07ea & 0xFF},
+ {0x07eb & 0xFF, 0x07f3 & 0xFF},
+ {0x07f4 & 0xFF, 0x07f5 & 0xFF},
+ {0x07f8 & 0xFF, 0x07f8 & 0xFF},
+ {0x07fa & 0xFF, 0x07fa & 0xFF},
+ {0x0800 & 0xFF, 0x0815 & 0xFF},
+ {0x0816 & 0xFF, 0x0819 & 0xFF},
+ {0x081a & 0xFF, 0x081a & 0xFF},
+ {0x081b & 0xFF, 0x0823 & 0xFF},
+ {0x0824 & 0xFF, 0x0824 & 0xFF},
+ {0x0825 & 0xFF, 0x0827 & 0xFF},
+ {0x0828 & 0xFF, 0x0828 & 0xFF},
+ {0x0829 & 0xFF, 0x082d & 0xFF},
+ {0x0840 & 0xFF, 0x0858 & 0xFF},
+ {0x0859 & 0xFF, 0x085b & 0xFF},
+ {0x0900 & 0xFF, 0x0903 & 0xFF},
+ {0x0904 & 0xFF, 0x0939 & 0xFF},
+ {0x093a & 0xFF, 0x093c & 0xFF},
+ {0x093d & 0xFF, 0x093d & 0xFF},
+ {0x093e & 0xFF, 0x094f & 0xFF},
+ {0x0950 & 0xFF, 0x0950 & 0xFF},
+ {0x0951 & 0xFF, 0x0957 & 0xFF},
+ {0x0958 & 0xFF, 0x0961 & 0xFF},
+ {0x0962 & 0xFF, 0x0963 & 0xFF},
+ {0x0966 & 0xFF, 0x096f & 0xFF},
+ {0x0971 & 0xFF, 0x0977 & 0xFF},
+ {0x0979 & 0xFF, 0x097f & 0xFF},
+ {0x0981 & 0xFF, 0x0983 & 0xFF},
+ {0x0985 & 0xFF, 0x098c & 0xFF},
+ {0x098f & 0xFF, 0x0990 & 0xFF},
+ {0x0993 & 0xFF, 0x09a8 & 0xFF},
+ {0x09aa & 0xFF, 0x09b0 & 0xFF},
+ {0x09b2 & 0xFF, 0x09b2 & 0xFF},
+ {0x09b6 & 0xFF, 0x09b9 & 0xFF},
+ {0x09bc & 0xFF, 0x09bc & 0xFF},
+ {0x09bd & 0xFF, 0x09bd & 0xFF},
+ {0x09be & 0xFF, 0x09c4 & 0xFF},
+ {0x09c7 & 0xFF, 0x09c8 & 0xFF},
+ {0x09cb & 0xFF, 0x09cd & 0xFF},
+ {0x09ce & 0xFF, 0x09ce & 0xFF},
+ {0x09d7 & 0xFF, 0x09d7 & 0xFF},
+ {0x09dc & 0xFF, 0x09dd & 0xFF},
+ {0x09df & 0xFF, 0x09e1 & 0xFF},
+ {0x09e2 & 0xFF, 0x09e3 & 0xFF},
+ {0x09e6 & 0xFF, 0x09ef & 0xFF},
+ {0x09f0 & 0xFF, 0x09f1 & 0xFF},
+ {0x0a01 & 0xFF, 0x0a03 & 0xFF},
+ {0x0a05 & 0xFF, 0x0a0a & 0xFF},
+ {0x0a0f & 0xFF, 0x0a10 & 0xFF},
+ {0x0a13 & 0xFF, 0x0a28 & 0xFF},
+ {0x0a2a & 0xFF, 0x0a30 & 0xFF},
+ {0x0a32 & 0xFF, 0x0a33 & 0xFF},
+ {0x0a35 & 0xFF, 0x0a36 & 0xFF},
+ {0x0a38 & 0xFF, 0x0a39 & 0xFF},
+ {0x0a3c & 0xFF, 0x0a3c & 0xFF},
+ {0x0a3e & 0xFF, 0x0a42 & 0xFF},
+ {0x0a47 & 0xFF, 0x0a48 & 0xFF},
+ {0x0a4b & 0xFF, 0x0a4d & 0xFF},
+ {0x0a51 & 0xFF, 0x0a51 & 0xFF},
+ {0x0a59 & 0xFF, 0x0a5c & 0xFF},
+ {0x0a5e & 0xFF, 0x0a5e & 0xFF},
+ {0x0a66 & 0xFF, 0x0a6f & 0xFF},
+ {0x0a70 & 0xFF, 0x0a71 & 0xFF},
+ {0x0a72 & 0xFF, 0x0a74 & 0xFF},
+ {0x0a75 & 0xFF, 0x0a75 & 0xFF},
+ {0x0a81 & 0xFF, 0x0a83 & 0xFF},
+ {0x0a85 & 0xFF, 0x0a8d & 0xFF},
+ {0x0a8f & 0xFF, 0x0a91 & 0xFF},
+ {0x0a93 & 0xFF, 0x0aa8 & 0xFF},
+ {0x0aaa & 0xFF, 0x0ab0 & 0xFF},
+ {0x0ab2 & 0xFF, 0x0ab3 & 0xFF},
+ {0x0ab5 & 0xFF, 0x0ab9 & 0xFF},
+ {0x0abc & 0xFF, 0x0abc & 0xFF},
+ {0x0abd & 0xFF, 0x0abd & 0xFF},
+ {0x0abe & 0xFF, 0x0ac5 & 0xFF},
+ {0x0ac7 & 0xFF, 0x0ac9 & 0xFF},
+ {0x0acb & 0xFF, 0x0acd & 0xFF},
+ {0x0ad0 & 0xFF, 0x0ad0 & 0xFF},
+ {0x0ae0 & 0xFF, 0x0ae1 & 0xFF},
+ {0x0ae2 & 0xFF, 0x0ae3 & 0xFF},
+ {0x0ae6 & 0xFF, 0x0aef & 0xFF},
+ {0x0b01 & 0xFF, 0x0b03 & 0xFF},
+ {0x0b05 & 0xFF, 0x0b0c & 0xFF},
+ {0x0b0f & 0xFF, 0x0b10 & 0xFF},
+ {0x0b13 & 0xFF, 0x0b28 & 0xFF},
+ {0x0b2a & 0xFF, 0x0b30 & 0xFF},
+ {0x0b32 & 0xFF, 0x0b33 & 0xFF},
+ {0x0b35 & 0xFF, 0x0b39 & 0xFF},
+ {0x0b3c & 0xFF, 0x0b3c & 0xFF},
+ {0x0b3d & 0xFF, 0x0b3d & 0xFF},
+ {0x0b3e & 0xFF, 0x0b44 & 0xFF},
+ {0x0b47 & 0xFF, 0x0b48 & 0xFF},
+ {0x0b4b & 0xFF, 0x0b4d & 0xFF},
+ {0x0b56 & 0xFF, 0x0b57 & 0xFF},
+ {0x0b5c & 0xFF, 0x0b5d & 0xFF},
+ {0x0b5f & 0xFF, 0x0b61 & 0xFF},
+ {0x0b62 & 0xFF, 0x0b63 & 0xFF},
+ {0x0b66 & 0xFF, 0x0b6f & 0xFF},
+ {0x0b71 & 0xFF, 0x0b71 & 0xFF},
+ {0x0b82 & 0xFF, 0x0b82 & 0xFF},
+ {0x0b83 & 0xFF, 0x0b83 & 0xFF},
+ {0x0b85 & 0xFF, 0x0b8a & 0xFF},
+ {0x0b8e & 0xFF, 0x0b90 & 0xFF},
+ {0x0b92 & 0xFF, 0x0b95 & 0xFF},
+ {0x0b99 & 0xFF, 0x0b9a & 0xFF},
+ {0x0b9c & 0xFF, 0x0b9c & 0xFF},
+ {0x0b9e & 0xFF, 0x0b9f & 0xFF},
+ {0x0ba3 & 0xFF, 0x0ba4 & 0xFF},
+ {0x0ba8 & 0xFF, 0x0baa & 0xFF},
+ {0x0bae & 0xFF, 0x0bb9 & 0xFF},
+ {0x0bbe & 0xFF, 0x0bc2 & 0xFF},
+ {0x0bc6 & 0xFF, 0x0bc8 & 0xFF},
+ {0x0bca & 0xFF, 0x0bcd & 0xFF},
+ {0x0bd0 & 0xFF, 0x0bd0 & 0xFF},
+ {0x0bd7 & 0xFF, 0x0bd7 & 0xFF},
+ {0x0be6 & 0xFF, 0x0bef & 0xFF},
+ {0x0c01 & 0xFF, 0x0c03 & 0xFF},
+ {0x0c05 & 0xFF, 0x0c0c & 0xFF},
+ {0x0c0e & 0xFF, 0x0c10 & 0xFF},
+ {0x0c12 & 0xFF, 0x0c28 & 0xFF},
+ {0x0c2a & 0xFF, 0x0c33 & 0xFF},
+ {0x0c35 & 0xFF, 0x0c39 & 0xFF},
+ {0x0c3d & 0xFF, 0x0c3d & 0xFF},
+ {0x0c3e & 0xFF, 0x0c44 & 0xFF},
+ {0x0c46 & 0xFF, 0x0c48 & 0xFF},
+ {0x0c4a & 0xFF, 0x0c4d & 0xFF},
+ {0x0c55 & 0xFF, 0x0c56 & 0xFF},
+ {0x0c58 & 0xFF, 0x0c59 & 0xFF},
+ {0x0c60 & 0xFF, 0x0c61 & 0xFF},
+ {0x0c62 & 0xFF, 0x0c63 & 0xFF},
+ {0x0c66 & 0xFF, 0x0c6f & 0xFF},
+ {0x0c82 & 0xFF, 0x0c83 & 0xFF},
+ {0x0c85 & 0xFF, 0x0c8c & 0xFF},
+ {0x0c8e & 0xFF, 0x0c90 & 0xFF},
+ {0x0c92 & 0xFF, 0x0ca8 & 0xFF},
+ {0x0caa & 0xFF, 0x0cb3 & 0xFF},
+ {0x0cb5 & 0xFF, 0x0cb9 & 0xFF},
+ {0x0cbc & 0xFF, 0x0cbc & 0xFF},
+ {0x0cbd & 0xFF, 0x0cbd & 0xFF},
+ {0x0cbe & 0xFF, 0x0cc4 & 0xFF},
+ {0x0cc6 & 0xFF, 0x0cc8 & 0xFF},
+ {0x0cca & 0xFF, 0x0ccd & 0xFF},
+ {0x0cd5 & 0xFF, 0x0cd6 & 0xFF},
+ {0x0cde & 0xFF, 0x0cde & 0xFF},
+ {0x0ce0 & 0xFF, 0x0ce1 & 0xFF},
+ {0x0ce2 & 0xFF, 0x0ce3 & 0xFF},
+ {0x0ce6 & 0xFF, 0x0cef & 0xFF},
+ {0x0cf1 & 0xFF, 0x0cf2 & 0xFF},
+ {0x0d02 & 0xFF, 0x0d03 & 0xFF},
+ {0x0d05 & 0xFF, 0x0d0c & 0xFF},
+ {0x0d0e & 0xFF, 0x0d10 & 0xFF},
+ {0x0d12 & 0xFF, 0x0d3a & 0xFF},
+ {0x0d3d & 0xFF, 0x0d3d & 0xFF},
+ {0x0d3e & 0xFF, 0x0d44 & 0xFF},
+ {0x0d46 & 0xFF, 0x0d48 & 0xFF},
+ {0x0d4a & 0xFF, 0x0d4d & 0xFF},
+ {0x0d4e & 0xFF, 0x0d4e & 0xFF},
+ {0x0d57 & 0xFF, 0x0d57 & 0xFF},
+ {0x0d60 & 0xFF, 0x0d61 & 0xFF},
+ {0x0d62 & 0xFF, 0x0d63 & 0xFF},
+ {0x0d66 & 0xFF, 0x0d6f & 0xFF},
+ {0x0d7a & 0xFF, 0x0d7f & 0xFF},
+ {0x0d82 & 0xFF, 0x0d83 & 0xFF},
+ {0x0d85 & 0xFF, 0x0d96 & 0xFF},
+ {0x0d9a & 0xFF, 0x0db1 & 0xFF},
+ {0x0db3 & 0xFF, 0x0dbb & 0xFF},
+ {0x0dbd & 0xFF, 0x0dbd & 0xFF},
+ {0x0dc0 & 0xFF, 0x0dc6 & 0xFF},
+ {0x0dca & 0xFF, 0x0dca & 0xFF},
+ {0x0dcf & 0xFF, 0x0dd4 & 0xFF},
+ {0x0dd6 & 0xFF, 0x0dd6 & 0xFF},
+ {0x0dd8 & 0xFF, 0x0ddf & 0xFF},
+ {0x0df2 & 0xFF, 0x0df3 & 0xFF},
+ {0x0e31 & 0xFF, 0x0e31 & 0xFF},
+ {0x0e34 & 0xFF, 0x0e3a & 0xFF},
+ {0x0e47 & 0xFF, 0x0e4e & 0xFF},
+ {0x0e50 & 0xFF, 0x0e59 & 0xFF},
+ {0x0eb1 & 0xFF, 0x0eb1 & 0xFF},
+ {0x0eb4 & 0xFF, 0x0eb9 & 0xFF},
+ {0x0ebb & 0xFF, 0x0ebc & 0xFF},
+ {0x0ec8 & 0xFF, 0x0ecd & 0xFF},
+ {0x0ed0 & 0xFF, 0x0ed9 & 0xFF},
+ {0x0f00 & 0xFF, 0x0f00 & 0xFF},
+ {0x0f18 & 0xFF, 0x0f19 & 0xFF},
+ {0x0f20 & 0xFF, 0x0f29 & 0xFF},
+ {0x0f35 & 0xFF, 0x0f35 & 0xFF},
+ {0x0f37 & 0xFF, 0x0f37 & 0xFF},
+ {0x0f39 & 0xFF, 0x0f39 & 0xFF},
+ {0x0f3e & 0xFF, 0x0f3f & 0xFF},
+ {0x0f40 & 0xFF, 0x0f47 & 0xFF},
+ {0x0f49 & 0xFF, 0x0f6c & 0xFF},
+ {0x0f71 & 0xFF, 0x0f84 & 0xFF},
+ {0x0f86 & 0xFF, 0x0f87 & 0xFF},
+ {0x0f88 & 0xFF, 0x0f8c & 0xFF},
+ {0x0f8d & 0xFF, 0x0f97 & 0xFF},
+ {0x0f99 & 0xFF, 0x0fbc & 0xFF},
+ {0x0fc6 & 0xFF, 0x0fc6 & 0xFF},
+ {0x102b & 0xFF, 0x103e & 0xFF},
+ {0x1040 & 0xFF, 0x1049 & 0xFF},
+ {0x1056 & 0xFF, 0x1059 & 0xFF},
+ {0x105e & 0xFF, 0x1060 & 0xFF},
+ {0x1062 & 0xFF, 0x1064 & 0xFF},
+ {0x1067 & 0xFF, 0x106d & 0xFF},
+ {0x1071 & 0xFF, 0x1074 & 0xFF},
+ {0x1082 & 0xFF, 0x108d & 0xFF},
+ {0x108f & 0xFF, 0x108f & 0xFF},
+ {0x1090 & 0xFF, 0x1099 & 0xFF},
+ {0x109a & 0xFF, 0x109d & 0xFF},
+ {0x10a0 & 0xFF, 0x10c5 & 0xFF},
+ {0x10d0 & 0xFF, 0x10fa & 0xFF},
+ {0x10fc & 0xFF, 0x10fc & 0xFF},
+ {0x1100 & 0xFF, 0x11ff & 0xFF},
+ {0x1200 & 0xFF, 0x1248 & 0xFF},
+ {0x124a & 0xFF, 0x124d & 0xFF},
+ {0x1250 & 0xFF, 0x1256 & 0xFF},
+ {0x1258 & 0xFF, 0x1258 & 0xFF},
+ {0x125a & 0xFF, 0x125d & 0xFF},
+ {0x1260 & 0xFF, 0x1288 & 0xFF},
+ {0x128a & 0xFF, 0x128d & 0xFF},
+ {0x1290 & 0xFF, 0x12b0 & 0xFF},
+ {0x12b2 & 0xFF, 0x12b5 & 0xFF},
+ {0x12b8 & 0xFF, 0x12be & 0xFF},
+ {0x12c0 & 0xFF, 0x12c0 & 0xFF},
+ {0x12c2 & 0xFF, 0x12c5 & 0xFF},
+ {0x12c8 & 0xFF, 0x12d6 & 0xFF},
+ {0x12d8 & 0xFF, 0x12ff & 0xFF},
+ {0x1300 & 0xFF, 0x1310 & 0xFF},
+ {0x1312 & 0xFF, 0x1315 & 0xFF},
+ {0x1318 & 0xFF, 0x135a & 0xFF},
+ {0x135d & 0xFF, 0x135f & 0xFF},
+ {0x1380 & 0xFF, 0x138f & 0xFF},
+ {0x13a0 & 0xFF, 0x13f4 & 0xFF},
+ {0x1401 & 0xFF, 0x14ff & 0xFF},
+ {0x1500 & 0xFF, 0x15ff & 0xFF},
+ {0x1600 & 0xFF, 0x166c & 0xFF},
+ {0x166f & 0xFF, 0x167f & 0xFF},
+ {0x1681 & 0xFF, 0x169a & 0xFF},
+ {0x16a0 & 0xFF, 0x16ea & 0xFF},
+ {0x16ee & 0xFF, 0x16f0 & 0xFF},
+ {0x1700 & 0xFF, 0x170c & 0xFF},
+ {0x170e & 0xFF, 0x1711 & 0xFF},
+ {0x1712 & 0xFF, 0x1714 & 0xFF},
+ {0x1720 & 0xFF, 0x1731 & 0xFF},
+ {0x1732 & 0xFF, 0x1734 & 0xFF},
+ {0x1740 & 0xFF, 0x1751 & 0xFF},
+ {0x1752 & 0xFF, 0x1753 & 0xFF},
+ {0x1760 & 0xFF, 0x176c & 0xFF},
+ {0x176e & 0xFF, 0x1770 & 0xFF},
+ {0x1772 & 0xFF, 0x1773 & 0xFF},
+ {0x17b4 & 0xFF, 0x17b5 & 0xFF},
+ {0x17b6 & 0xFF, 0x17d3 & 0xFF},
+ {0x17dd & 0xFF, 0x17dd & 0xFF},
+ {0x17e0 & 0xFF, 0x17e9 & 0xFF},
+ {0x180b & 0xFF, 0x180d & 0xFF},
+ {0x1810 & 0xFF, 0x1819 & 0xFF},
+ {0x1820 & 0xFF, 0x1877 & 0xFF},
+ {0x1880 & 0xFF, 0x18a8 & 0xFF},
+ {0x18a9 & 0xFF, 0x18a9 & 0xFF},
+ {0x18aa & 0xFF, 0x18aa & 0xFF},
+ {0x18b0 & 0xFF, 0x18f5 & 0xFF},
+ {0x1900 & 0xFF, 0x191c & 0xFF},
+ {0x1920 & 0xFF, 0x192b & 0xFF},
+ {0x1930 & 0xFF, 0x193b & 0xFF},
+ {0x1946 & 0xFF, 0x194f & 0xFF},
+ {0x19b0 & 0xFF, 0x19c0 & 0xFF},
+ {0x19c8 & 0xFF, 0x19c9 & 0xFF},
+ {0x19d0 & 0xFF, 0x19d9 & 0xFF},
+ {0x1a00 & 0xFF, 0x1a16 & 0xFF},
+ {0x1a17 & 0xFF, 0x1a1b & 0xFF},
+ {0x1a55 & 0xFF, 0x1a5e & 0xFF},
+ {0x1a60 & 0xFF, 0x1a7c & 0xFF},
+ {0x1a7f & 0xFF, 0x1a7f & 0xFF},
+ {0x1a80 & 0xFF, 0x1a89 & 0xFF},
+ {0x1a90 & 0xFF, 0x1a99 & 0xFF},
+ {0x1b00 & 0xFF, 0x1b04 & 0xFF},
+ {0x1b05 & 0xFF, 0x1b33 & 0xFF},
+ {0x1b34 & 0xFF, 0x1b44 & 0xFF},
+ {0x1b45 & 0xFF, 0x1b4b & 0xFF},
+ {0x1b50 & 0xFF, 0x1b59 & 0xFF},
+ {0x1b6b & 0xFF, 0x1b73 & 0xFF},
+ {0x1b80 & 0xFF, 0x1b82 & 0xFF},
+ {0x1b83 & 0xFF, 0x1ba0 & 0xFF},
+ {0x1ba1 & 0xFF, 0x1baa & 0xFF},
+ {0x1bae & 0xFF, 0x1baf & 0xFF},
+ {0x1bb0 & 0xFF, 0x1bb9 & 0xFF},
+ {0x1bc0 & 0xFF, 0x1be5 & 0xFF},
+ {0x1be6 & 0xFF, 0x1bf3 & 0xFF},
+ {0x1c00 & 0xFF, 0x1c23 & 0xFF},
+ {0x1c24 & 0xFF, 0x1c37 & 0xFF},
+ {0x1c40 & 0xFF, 0x1c49 & 0xFF},
+ {0x1c4d & 0xFF, 0x1c4f & 0xFF},
+ {0x1c50 & 0xFF, 0x1c59 & 0xFF},
+ {0x1c5a & 0xFF, 0x1c7d & 0xFF},
+ {0x1cd0 & 0xFF, 0x1cd2 & 0xFF},
+ {0x1cd4 & 0xFF, 0x1ce8 & 0xFF},
+ {0x1ce9 & 0xFF, 0x1cec & 0xFF},
+ {0x1ced & 0xFF, 0x1ced & 0xFF},
+ {0x1cee & 0xFF, 0x1cf1 & 0xFF},
+ {0x1cf2 & 0xFF, 0x1cf2 & 0xFF},
+ {0x1d00 & 0xFF, 0x1dbf & 0xFF},
+ {0x1dc0 & 0xFF, 0x1de6 & 0xFF},
+ {0x1dfc & 0xFF, 0x1dff & 0xFF},
+ {0x1e00 & 0xFF, 0x1eff & 0xFF},
+ {0x1f00 & 0xFF, 0x1f15 & 0xFF},
+ {0x1f18 & 0xFF, 0x1f1d & 0xFF},
+ {0x1f20 & 0xFF, 0x1f45 & 0xFF},
+ {0x1f48 & 0xFF, 0x1f4d & 0xFF},
+ {0x1f50 & 0xFF, 0x1f57 & 0xFF},
+ {0x1f59 & 0xFF, 0x1f59 & 0xFF},
+ {0x1f5b & 0xFF, 0x1f5b & 0xFF},
+ {0x1f5d & 0xFF, 0x1f5d & 0xFF},
+ {0x1f5f & 0xFF, 0x1f7d & 0xFF},
+ {0x1f80 & 0xFF, 0x1fb4 & 0xFF},
+ {0x1fb6 & 0xFF, 0x1fbc & 0xFF},
+ {0x1fbe & 0xFF, 0x1fbe & 0xFF},
+ {0x1fc2 & 0xFF, 0x1fc4 & 0xFF},
+ {0x1fc6 & 0xFF, 0x1fcc & 0xFF},
+ {0x1fd0 & 0xFF, 0x1fd3 & 0xFF},
+ {0x1fd6 & 0xFF, 0x1fdb & 0xFF},
+ {0x1fe0 & 0xFF, 0x1fec & 0xFF},
+ {0x1ff2 & 0xFF, 0x1ff4 & 0xFF},
+ {0x1ff6 & 0xFF, 0x1ffc & 0xFF},
+ {0x200c & 0xFF, 0x200d & 0xFF},
+ {0x200e & 0xFF, 0x200f & 0xFF},
+ {0x2018 & 0xFF, 0x2019 & 0xFF},
+ {0x2024 & 0xFF, 0x2024 & 0xFF},
+ {0x2027 & 0xFF, 0x2027 & 0xFF},
+ {0x2028 & 0xFF, 0x2029 & 0xFF},
+ {0x202a & 0xFF, 0x202e & 0xFF},
+ {0x203f & 0xFF, 0x2040 & 0xFF},
+ {0x2044 & 0xFF, 0x2044 & 0xFF},
+ {0x2054 & 0xFF, 0x2054 & 0xFF},
+ {0x2060 & 0xFF, 0x2064 & 0xFF},
+ {0x206a & 0xFF, 0x206f & 0xFF},
+ {0x2071 & 0xFF, 0x2071 & 0xFF},
+ {0x207f & 0xFF, 0x207f & 0xFF},
+ {0x2090 & 0xFF, 0x209c & 0xFF},
+ {0x20d0 & 0xFF, 0x20f0 & 0xFF},
+ {0x2102 & 0xFF, 0x2102 & 0xFF},
+ {0x2107 & 0xFF, 0x2107 & 0xFF},
+ {0x210a & 0xFF, 0x2113 & 0xFF},
+ {0x2115 & 0xFF, 0x2115 & 0xFF},
+ {0x2119 & 0xFF, 0x211d & 0xFF},
+ {0x2124 & 0xFF, 0x2124 & 0xFF},
+ {0x2126 & 0xFF, 0x2126 & 0xFF},
+ {0x2128 & 0xFF, 0x2128 & 0xFF},
+ {0x212a & 0xFF, 0x212d & 0xFF},
+ {0x212f & 0xFF, 0x2139 & 0xFF},
+ {0x213c & 0xFF, 0x213f & 0xFF},
+ {0x2145 & 0xFF, 0x2149 & 0xFF},
+ {0x214e & 0xFF, 0x214e & 0xFF},
+ {0x2160 & 0xFF, 0x2188 & 0xFF},
+ {0x24b6 & 0xFF, 0x24e9 & 0xFF},
+ {0x2c00 & 0xFF, 0x2c2e & 0xFF},
+ {0x2c30 & 0xFF, 0x2c5e & 0xFF},
+ {0x2c60 & 0xFF, 0x2ce4 & 0xFF},
+ {0x2ceb & 0xFF, 0x2cee & 0xFF},
+ {0x2cef & 0xFF, 0x2cf1 & 0xFF},
+ {0x2d00 & 0xFF, 0x2d25 & 0xFF},
+ {0x2d30 & 0xFF, 0x2d65 & 0xFF},
+ {0x2d6f & 0xFF, 0x2d6f & 0xFF},
+ {0x2d7f & 0xFF, 0x2d7f & 0xFF},
+ {0x2d80 & 0xFF, 0x2d96 & 0xFF},
+ {0x2da0 & 0xFF, 0x2da6 & 0xFF},
+ {0x2da8 & 0xFF, 0x2dae & 0xFF},
+ {0x2db0 & 0xFF, 0x2db6 & 0xFF},
+ {0x2db8 & 0xFF, 0x2dbe & 0xFF},
+ {0x2dc0 & 0xFF, 0x2dc6 & 0xFF},
+ {0x2dc8 & 0xFF, 0x2dce & 0xFF},
+ {0x2dd0 & 0xFF, 0x2dd6 & 0xFF},
+ {0x2dd8 & 0xFF, 0x2dde & 0xFF},
+ {0x2de0 & 0xFF, 0x2dff & 0xFF},
+ {0x2e2f & 0xFF, 0x2e2f & 0xFF},
+ {0x3005 & 0xFF, 0x3005 & 0xFF},
+ {0x302a & 0xFF, 0x302f & 0xFF},
+ {0x3031 & 0xFF, 0x3035 & 0xFF},
+ {0x303b & 0xFF, 0x303c & 0xFF},
+ {0x3099 & 0xFF, 0x309a & 0xFF},
+ {0x309b & 0xFF, 0x309c & 0xFF},
+ {0x30a0 & 0xFF, 0x30fa & 0xFF},
+ {0x30fc & 0xFF, 0x30ff & 0xFF},
+ {0x3105 & 0xFF, 0x312d & 0xFF},
+ {0x3131 & 0xFF, 0x318e & 0xFF},
+ {0x31a0 & 0xFF, 0x31ba & 0xFF},
+ {0x31f0 & 0xFF, 0x31ff & 0xFF},
+ {0x32d0 & 0xFF, 0x32fe & 0xFF},
+ {0x3300 & 0xFF, 0x3357 & 0xFF},
+ {0xa000 & 0xFF, 0xa0ff & 0xFF},
+ {0xa100 & 0xFF, 0xa1ff & 0xFF},
+ {0xa200 & 0xFF, 0xa2ff & 0xFF},
+ {0xa300 & 0xFF, 0xa3ff & 0xFF},
+ {0xa400 & 0xFF, 0xa48c & 0xFF},
+ {0xa4d0 & 0xFF, 0xa4fd & 0xFF},
+ {0xa500 & 0xFF, 0xa5ff & 0xFF},
+ {0xa600 & 0xFF, 0xa60c & 0xFF},
+ {0xa610 & 0xFF, 0xa61f & 0xFF},
+ {0xa620 & 0xFF, 0xa629 & 0xFF},
+ {0xa62a & 0xFF, 0xa62b & 0xFF},
+ {0xa640 & 0xFF, 0xa66e & 0xFF},
+ {0xa66f & 0xFF, 0xa672 & 0xFF},
+ {0xa67c & 0xFF, 0xa67d & 0xFF},
+ {0xa67f & 0xFF, 0xa697 & 0xFF},
+ {0xa6a0 & 0xFF, 0xa6ef & 0xFF},
+ {0xa6f0 & 0xFF, 0xa6f1 & 0xFF},
+ {0xa717 & 0xFF, 0xa71f & 0xFF},
+ {0xa722 & 0xFF, 0xa788 & 0xFF},
+ {0xa78b & 0xFF, 0xa78e & 0xFF},
+ {0xa790 & 0xFF, 0xa791 & 0xFF},
+ {0xa7a0 & 0xFF, 0xa7a9 & 0xFF},
+ {0xa7fa & 0xFF, 0xa7ff & 0xFF},
+ {0xa800 & 0xFF, 0xa801 & 0xFF},
+ {0xa802 & 0xFF, 0xa802 & 0xFF},
+ {0xa803 & 0xFF, 0xa805 & 0xFF},
+ {0xa806 & 0xFF, 0xa806 & 0xFF},
+ {0xa807 & 0xFF, 0xa80a & 0xFF},
+ {0xa80b & 0xFF, 0xa80b & 0xFF},
+ {0xa80c & 0xFF, 0xa822 & 0xFF},
+ {0xa823 & 0xFF, 0xa827 & 0xFF},
+ {0xa840 & 0xFF, 0xa873 & 0xFF},
+ {0xa880 & 0xFF, 0xa881 & 0xFF},
+ {0xa882 & 0xFF, 0xa8b3 & 0xFF},
+ {0xa8b4 & 0xFF, 0xa8c4 & 0xFF},
+ {0xa8d0 & 0xFF, 0xa8d9 & 0xFF},
+ {0xa8e0 & 0xFF, 0xa8f1 & 0xFF},
+ {0xa8f2 & 0xFF, 0xa8f7 & 0xFF},
+ {0xa8fb & 0xFF, 0xa8fb & 0xFF},
+ {0xa900 & 0xFF, 0xa909 & 0xFF},
+ {0xa90a & 0xFF, 0xa925 & 0xFF},
+ {0xa926 & 0xFF, 0xa92d & 0xFF},
+ {0xa930 & 0xFF, 0xa946 & 0xFF},
+ {0xa947 & 0xFF, 0xa953 & 0xFF},
+ {0xa960 & 0xFF, 0xa97c & 0xFF},
+ {0xa980 & 0xFF, 0xa983 & 0xFF},
+ {0xa984 & 0xFF, 0xa9b2 & 0xFF},
+ {0xa9b3 & 0xFF, 0xa9c0 & 0xFF},
+ {0xa9cf & 0xFF, 0xa9cf & 0xFF},
+ {0xa9d0 & 0xFF, 0xa9d9 & 0xFF},
+ {0xaa00 & 0xFF, 0xaa28 & 0xFF},
+ {0xaa29 & 0xFF, 0xaa36 & 0xFF},
+ {0xaa40 & 0xFF, 0xaa42 & 0xFF},
+ {0xaa43 & 0xFF, 0xaa43 & 0xFF},
+ {0xaa44 & 0xFF, 0xaa4b & 0xFF},
+ {0xaa4c & 0xFF, 0xaa4d & 0xFF},
+ {0xaa50 & 0xFF, 0xaa59 & 0xFF},
+ {0xaa7b & 0xFF, 0xaa7b & 0xFF},
+ {0xaab0 & 0xFF, 0xaab0 & 0xFF},
+ {0xaab2 & 0xFF, 0xaab4 & 0xFF},
+ {0xaab7 & 0xFF, 0xaab8 & 0xFF},
+ {0xaabe & 0xFF, 0xaabf & 0xFF},
+ {0xaac1 & 0xFF, 0xaac1 & 0xFF},
+ {0xab01 & 0xFF, 0xab06 & 0xFF},
+ {0xab09 & 0xFF, 0xab0e & 0xFF},
+ {0xab11 & 0xFF, 0xab16 & 0xFF},
+ {0xab20 & 0xFF, 0xab26 & 0xFF},
+ {0xab28 & 0xFF, 0xab2e & 0xFF},
+ {0xabc0 & 0xFF, 0xabe2 & 0xFF},
+ {0xabe3 & 0xFF, 0xabea & 0xFF},
+ {0xabec & 0xFF, 0xabed & 0xFF},
+ {0xabf0 & 0xFF, 0xabf9 & 0xFF},
+ {0xac00 & 0xFF, 0xacff & 0xFF},
+ {0xad00 & 0xFF, 0xadff & 0xFF},
+ {0xae00 & 0xFF, 0xaeff & 0xFF},
+ {0xaf00 & 0xFF, 0xafff & 0xFF},
+ {0xb000 & 0xFF, 0xb0ff & 0xFF},
+ {0xb100 & 0xFF, 0xb1ff & 0xFF},
+ {0xb200 & 0xFF, 0xb2ff & 0xFF},
+ {0xb300 & 0xFF, 0xb3ff & 0xFF},
+ {0xb400 & 0xFF, 0xb4ff & 0xFF},
+ {0xb500 & 0xFF, 0xb5ff & 0xFF},
+ {0xb600 & 0xFF, 0xb6ff & 0xFF},
+ {0xb700 & 0xFF, 0xb7ff & 0xFF},
+ {0xb800 & 0xFF, 0xb8ff & 0xFF},
+ {0xb900 & 0xFF, 0xb9ff & 0xFF},
+ {0xba00 & 0xFF, 0xbaff & 0xFF},
+ {0xbb00 & 0xFF, 0xbbff & 0xFF},
+ {0xbc00 & 0xFF, 0xbcff & 0xFF},
+ {0xbd00 & 0xFF, 0xbdff & 0xFF},
+ {0xbe00 & 0xFF, 0xbeff & 0xFF},
+ {0xbf00 & 0xFF, 0xbfff & 0xFF},
+ {0xc000 & 0xFF, 0xc0ff & 0xFF},
+ {0xc100 & 0xFF, 0xc1ff & 0xFF},
+ {0xc200 & 0xFF, 0xc2ff & 0xFF},
+ {0xc300 & 0xFF, 0xc3ff & 0xFF},
+ {0xc400 & 0xFF, 0xc4ff & 0xFF},
+ {0xc500 & 0xFF, 0xc5ff & 0xFF},
+ {0xc600 & 0xFF, 0xc6ff & 0xFF},
+ {0xc700 & 0xFF, 0xc7ff & 0xFF},
+ {0xc800 & 0xFF, 0xc8ff & 0xFF},
+ {0xc900 & 0xFF, 0xc9ff & 0xFF},
+ {0xca00 & 0xFF, 0xcaff & 0xFF},
+ {0xcb00 & 0xFF, 0xcbff & 0xFF},
+ {0xcc00 & 0xFF, 0xccff & 0xFF},
+ {0xcd00 & 0xFF, 0xcdff & 0xFF},
+ {0xce00 & 0xFF, 0xceff & 0xFF},
+ {0xcf00 & 0xFF, 0xcfff & 0xFF},
+ {0xd000 & 0xFF, 0xd0ff & 0xFF},
+ {0xd100 & 0xFF, 0xd1ff & 0xFF},
+ {0xd200 & 0xFF, 0xd2ff & 0xFF},
+ {0xd300 & 0xFF, 0xd3ff & 0xFF},
+ {0xd400 & 0xFF, 0xd4ff & 0xFF},
+ {0xd500 & 0xFF, 0xd5ff & 0xFF},
+ {0xd600 & 0xFF, 0xd6ff & 0xFF},
+ {0xd700 & 0xFF, 0xd7a3 & 0xFF},
+ {0xd7b0 & 0xFF, 0xd7c6 & 0xFF},
+ {0xd7cb & 0xFF, 0xd7fb & 0xFF},
+ {0xfb00 & 0xFF, 0xfb06 & 0xFF},
+ {0xfb13 & 0xFF, 0xfb17 & 0xFF},
+ {0xfb1d & 0xFF, 0xfb1d & 0xFF},
+ {0xfb1e & 0xFF, 0xfb1e & 0xFF},
+ {0xfb1f & 0xFF, 0xfb28 & 0xFF},
+ {0xfb2a & 0xFF, 0xfb36 & 0xFF},
+ {0xfb38 & 0xFF, 0xfb3c & 0xFF},
+ {0xfb3e & 0xFF, 0xfb3e & 0xFF},
+ {0xfb40 & 0xFF, 0xfb41 & 0xFF},
+ {0xfb43 & 0xFF, 0xfb44 & 0xFF},
+ {0xfb46 & 0xFF, 0xfbb1 & 0xFF},
+ {0xfbd3 & 0xFF, 0xfbff & 0xFF},
+ {0xfc00 & 0xFF, 0xfcff & 0xFF},
+ {0xfd00 & 0xFF, 0xfd3d & 0xFF},
+ {0xfd50 & 0xFF, 0xfd8f & 0xFF},
+ {0xfd92 & 0xFF, 0xfdc7 & 0xFF},
+ {0xfdf0 & 0xFF, 0xfdfb & 0xFF},
+ {0xfe00 & 0xFF, 0xfe0f & 0xFF},
+ {0xfe10 & 0xFF, 0xfe10 & 0xFF},
+ {0xfe13 & 0xFF, 0xfe13 & 0xFF},
+ {0xfe14 & 0xFF, 0xfe14 & 0xFF},
+ {0xfe20 & 0xFF, 0xfe26 & 0xFF},
+ {0xfe33 & 0xFF, 0xfe34 & 0xFF},
+ {0xfe4d & 0xFF, 0xfe4f & 0xFF},
+ {0xfe50 & 0xFF, 0xfe50 & 0xFF},
+ {0xfe52 & 0xFF, 0xfe52 & 0xFF},
+ {0xfe54 & 0xFF, 0xfe54 & 0xFF},
+ {0xfe55 & 0xFF, 0xfe55 & 0xFF},
+ {0xfe70 & 0xFF, 0xfe74 & 0xFF},
+ {0xfe76 & 0xFF, 0xfefc & 0xFF},
+ {0xfeff & 0xFF, 0xfeff & 0xFF},
+ {0xff07 & 0xFF, 0xff07 & 0xFF},
+ {0xff0c & 0xFF, 0xff0c & 0xFF},
+ {0xff0e & 0xFF, 0xff0e & 0xFF},
+ {0xff1a & 0xFF, 0xff1a & 0xFF},
+ {0xff1b & 0xFF, 0xff1b & 0xFF},
+ {0xff21 & 0xFF, 0xff3a & 0xFF},
+ {0xff3f & 0xFF, 0xff3f & 0xFF},
+ {0xff41 & 0xFF, 0xff5a & 0xFF},
+ {0xff66 & 0xFF, 0xff9d & 0xFF},
+ {0xff9e & 0xFF, 0xff9f & 0xFF},
+ {0xffa0 & 0xFF, 0xffbe & 0xFF},
+ {0xffc2 & 0xFF, 0xffc7 & 0xFF},
+ {0xffca & 0xFF, 0xffcf & 0xFF},
+ {0xffd2 & 0xFF, 0xffd7 & 0xFF},
+ {0xffda & 0xFF, 0xffdc & 0xFF},
+ {0xfff9 & 0xFF, 0xfffb & 0xFF},
+ {0x10000 & 0xFF, 0x1000b & 0xFF},
+ {0x1000d & 0xFF, 0x10026 & 0xFF},
+ {0x10028 & 0xFF, 0x1003a & 0xFF},
+ {0x1003c & 0xFF, 0x1003d & 0xFF},
+ {0x1003f & 0xFF, 0x1004d & 0xFF},
+ {0x10050 & 0xFF, 0x1005d & 0xFF},
+ {0x10080 & 0xFF, 0x100fa & 0xFF},
+ {0x10140 & 0xFF, 0x10174 & 0xFF},
+ {0x101fd & 0xFF, 0x101fd & 0xFF},
+ {0x10280 & 0xFF, 0x1029c & 0xFF},
+ {0x102a0 & 0xFF, 0x102d0 & 0xFF},
+ {0x10300 & 0xFF, 0x1031e & 0xFF},
+ {0x10330 & 0xFF, 0x1034a & 0xFF},
+ {0x10380 & 0xFF, 0x1039d & 0xFF},
+ {0x103a0 & 0xFF, 0x103c3 & 0xFF},
+ {0x103c8 & 0xFF, 0x103cf & 0xFF},
+ {0x103d1 & 0xFF, 0x103d5 & 0xFF},
+ {0x10400 & 0xFF, 0x1049d & 0xFF},
+ {0x104a0 & 0xFF, 0x104a9 & 0xFF},
+ {0x10800 & 0xFF, 0x10805 & 0xFF},
+ {0x10808 & 0xFF, 0x10808 & 0xFF},
+ {0x1080a & 0xFF, 0x10835 & 0xFF},
+ {0x10837 & 0xFF, 0x10838 & 0xFF},
+ {0x1083c & 0xFF, 0x1083c & 0xFF},
+ {0x1083f & 0xFF, 0x10855 & 0xFF},
+ {0x10900 & 0xFF, 0x10915 & 0xFF},
+ {0x10920 & 0xFF, 0x10939 & 0xFF},
+ {0x10a00 & 0xFF, 0x10a00 & 0xFF},
+ {0x10a01 & 0xFF, 0x10a03 & 0xFF},
+ {0x10a05 & 0xFF, 0x10a06 & 0xFF},
+ {0x10a0c & 0xFF, 0x10a0f & 0xFF},
+ {0x10a10 & 0xFF, 0x10a13 & 0xFF},
+ {0x10a15 & 0xFF, 0x10a17 & 0xFF},
+ {0x10a19 & 0xFF, 0x10a33 & 0xFF},
+ {0x10a38 & 0xFF, 0x10a3a & 0xFF},
+ {0x10a3f & 0xFF, 0x10a3f & 0xFF},
+ {0x10a60 & 0xFF, 0x10a7c & 0xFF},
+ {0x10b00 & 0xFF, 0x10b35 & 0xFF},
+ {0x10b40 & 0xFF, 0x10b55 & 0xFF},
+ {0x10b60 & 0xFF, 0x10b72 & 0xFF},
+ {0x10c00 & 0xFF, 0x10c48 & 0xFF},
+ {0x11000 & 0xFF, 0x11002 & 0xFF},
+ {0x11003 & 0xFF, 0x11037 & 0xFF},
+ {0x11038 & 0xFF, 0x11046 & 0xFF},
+ {0x11066 & 0xFF, 0x1106f & 0xFF},
+ {0x11080 & 0xFF, 0x11082 & 0xFF},
+ {0x11083 & 0xFF, 0x110af & 0xFF},
+ {0x110b0 & 0xFF, 0x110ba & 0xFF},
+ {0x110bd & 0xFF, 0x110bd & 0xFF},
+ {0x12000 & 0xFF, 0x120ff & 0xFF},
+ {0x12100 & 0xFF, 0x121ff & 0xFF},
+ {0x12200 & 0xFF, 0x122ff & 0xFF},
+ {0x12300 & 0xFF, 0x1236e & 0xFF},
+ {0x12400 & 0xFF, 0x12462 & 0xFF},
+ {0x13000 & 0xFF, 0x130ff & 0xFF},
+ {0x13100 & 0xFF, 0x131ff & 0xFF},
+ {0x13200 & 0xFF, 0x132ff & 0xFF},
+ {0x13300 & 0xFF, 0x133ff & 0xFF},
+ {0x13400 & 0xFF, 0x1342e & 0xFF},
+ {0x16800 & 0xFF, 0x168ff & 0xFF},
+ {0x16900 & 0xFF, 0x169ff & 0xFF},
+ {0x16a00 & 0xFF, 0x16a38 & 0xFF},
+ {0x1b000 & 0xFF, 0x1b000 & 0xFF},
+ {0x1d165 & 0xFF, 0x1d169 & 0xFF},
+ {0x1d16d & 0xFF, 0x1d172 & 0xFF},
+ {0x1d173 & 0xFF, 0x1d17a & 0xFF},
+ {0x1d17b & 0xFF, 0x1d182 & 0xFF},
+ {0x1d185 & 0xFF, 0x1d18b & 0xFF},
+ {0x1d1aa & 0xFF, 0x1d1ad & 0xFF},
+ {0x1d242 & 0xFF, 0x1d244 & 0xFF},
+ {0x1d400 & 0xFF, 0x1d454 & 0xFF},
+ {0x1d456 & 0xFF, 0x1d49c & 0xFF},
+ {0x1d49e & 0xFF, 0x1d49f & 0xFF},
+ {0x1d4a2 & 0xFF, 0x1d4a2 & 0xFF},
+ {0x1d4a5 & 0xFF, 0x1d4a6 & 0xFF},
+ {0x1d4a9 & 0xFF, 0x1d4ac & 0xFF},
+ {0x1d4ae & 0xFF, 0x1d4b9 & 0xFF},
+ {0x1d4bb & 0xFF, 0x1d4bb & 0xFF},
+ {0x1d4bd & 0xFF, 0x1d4c3 & 0xFF},
+ {0x1d4c5 & 0xFF, 0x1d4ff & 0xFF},
+ {0x1d500 & 0xFF, 0x1d505 & 0xFF},
+ {0x1d507 & 0xFF, 0x1d50a & 0xFF},
+ {0x1d50d & 0xFF, 0x1d514 & 0xFF},
+ {0x1d516 & 0xFF, 0x1d51c & 0xFF},
+ {0x1d51e & 0xFF, 0x1d539 & 0xFF},
+ {0x1d53b & 0xFF, 0x1d53e & 0xFF},
+ {0x1d540 & 0xFF, 0x1d544 & 0xFF},
+ {0x1d546 & 0xFF, 0x1d546 & 0xFF},
+ {0x1d54a & 0xFF, 0x1d550 & 0xFF},
+ {0x1d552 & 0xFF, 0x1d5ff & 0xFF},
+ {0x1d600 & 0xFF, 0x1d6a5 & 0xFF},
+ {0x1d6a8 & 0xFF, 0x1d6c0 & 0xFF},
+ {0x1d6c2 & 0xFF, 0x1d6da & 0xFF},
+ {0x1d6dc & 0xFF, 0x1d6fa & 0xFF},
+ {0x1d6fc & 0xFF, 0x1d6ff & 0xFF},
+ {0x1d700 & 0xFF, 0x1d714 & 0xFF},
+ {0x1d716 & 0xFF, 0x1d734 & 0xFF},
+ {0x1d736 & 0xFF, 0x1d74e & 0xFF},
+ {0x1d750 & 0xFF, 0x1d76e & 0xFF},
+ {0x1d770 & 0xFF, 0x1d788 & 0xFF},
+ {0x1d78a & 0xFF, 0x1d7a8 & 0xFF},
+ {0x1d7aa & 0xFF, 0x1d7c2 & 0xFF},
+ {0x1d7c4 & 0xFF, 0x1d7cb & 0xFF},
+ {0x1d7ce & 0xFF, 0x1d7ff & 0xFF},
+ {0xe0001 & 0xFF, 0xe0001 & 0xFF},
+ {0xe0020 & 0xFF, 0xe007f & 0xFF},
+ {0xe0100 & 0xFF, 0xe01ef & 0xFF}};
+
+static const uint8_t unicode_classtab[]={
+ UNICODE_WB_LF,
+ UNICODE_WB_Newline,
+ UNICODE_WB_CR,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Newline,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Format,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_Format,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Format,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Format,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Format,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Format,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_Newline,
+ UNICODE_WB_Format,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_Format,
+ UNICODE_WB_Format,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Format,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_MidNumLet,
+ UNICODE_WB_MidLetter,
+ UNICODE_WB_MidNum,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ExtendNumLet,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Format,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Format,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Katakana,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Format,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_Extend,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_ALetter,
+ UNICODE_WB_Numeric,
+ UNICODE_WB_Format,
+ UNICODE_WB_Format,
+ UNICODE_WB_Extend};
+
+static const size_t unicode_indextab[]={
+ 0,
+ 21,
+ 22,
+ 27,
+ 39,
+ 42,
+ 55,
+ 77,
+ 91,
+ 101,
+ 132,
+ 167,
+ 202,
+ 234,
+ 259,
+ 268,
+ 283,
+ 297,
+ 298,
+ 312,
+ 318,
+ 319,
+ 320,
+ 325,
+ 339,
+ 346,
+ 353,
+ 360,
+ 373,
+ 385,
+ 388,
+ 389,
+ 408,
+ 424,
+ 438,
+ 438,
+ 438,
+ 439,
+ 439,
+ 439,
+ 439,
+ 439,
+ 439,
+ 439,
+ 439,
+ 444,
+ 458,
+ 459,
+ 459,
+ 467,
+ 471,
+ 472,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 479,
+ 480,
+ 490,
+ 496,
+ 512,
+ 523,
+ 536,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 591,
+ 603,
+ 604,
+ 608,
+ 622,
+ 638,
+ 645,
+ 647,
+ 649,
+ 655,
+ 657,
+ 657,
+ 657,
+ 657,
+ 663,
+ 665,
+ 675,
+ 678,
+ 679,
+ 679,
+ 679,
+ 679,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 697,
+ 698,
+ 699,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 700,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 701,
+ 707,
+ 708,
+ 708,
+ 718,
+ 728,
+ 733,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 742,
+ 744,
+ 745};
+
diff --git a/unicode/wordbreaktab_internal.h b/unicode/wordbreaktab_internal.h
new file mode 100644
index 0000000..58d4d20
--- /dev/null
+++ b/unicode/wordbreaktab_internal.h
@@ -0,0 +1,25 @@
+/*
+** Copyright 2011 Double Precision, Inc.
+** See COPYING for distribution information.
+**
+*/
+
+#ifndef wordbreaktab_internal_h
+#define wordbreaktab_internal_h
+
+#define UNICODE_WB_ALetter 0x00
+#define UNICODE_WB_Numeric 0x01
+#define UNICODE_WB_MidLetter 0x02
+#define UNICODE_WB_MidNum 0x03
+#define UNICODE_WB_MidNumLet 0x04
+#define UNICODE_WB_ExtendNumLet 0x05
+
+#define UNICODE_WB_CR 0x06
+#define UNICODE_WB_LF 0x07
+#define UNICODE_WB_Newline 0x08
+#define UNICODE_WB_Extend 0x09
+#define UNICODE_WB_Format 0x0A
+#define UNICODE_WB_Katakana 0x0B
+
+#define UNICODE_WB_OTHER 0xFF
+#endif
diff --git a/unicode/wordbreaktest.C b/unicode/wordbreaktest.C
new file mode 100644
index 0000000..35a1d27
--- /dev/null
+++ b/unicode/wordbreaktest.C
@@ -0,0 +1,145 @@
+#include "unicode_config.h"
+#include "unicode.h"
+
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <iomanip>
+#include <algorithm>
+#include <functional>
+#include <cstdlib>
+#include <list>
+#include <vector>
+
+class collect_wordbreakflags : public mail::wordbreak_callback_base {
+
+public:
+
+ std::vector<bool> flags;
+
+ template<typename iter_type> void operator()(iter_type b, iter_type e)
+ {
+ mail::wordbreak_callback_base::operator()(b, e);
+ }
+
+ using mail::wordbreak_callback_base::operator<<;
+
+private:
+ int operator()(bool flag)
+ {
+ flags.push_back(flag);
+ return 0;
+ }
+};
+
+static void testsuite()
+{
+ std::string buf;
+ int linenum=0;
+
+ std::ifstream fp("WordBreakTest.txt");
+
+ if (!fp.is_open())
+ exit(1);
+
+ while (1)
+ {
+ buf.clear();
+
+ if (std::getline(fp, buf).eof() && buf.empty())
+ break;
+
+ ++linenum;
+
+ buf.erase(std::find(buf.begin(), buf.end(), '#'), buf.end());
+
+ if (buf.empty())
+ continue;
+
+ std::list<std::string> words;
+
+ for (std::string::iterator b=buf.begin(), e=buf.end(); b != e;)
+ {
+ if (isspace(*b))
+ {
+ ++b;
+ continue;
+ }
+
+ std::string::iterator p=b;
+
+ while (b != e)
+ {
+ if (isspace(*b))
+ break;
+ ++b;
+ }
+
+ words.push_back(std::string(p, b));
+ }
+
+ std::vector<unicode_char> ubuf;
+ std::vector<bool> status;
+
+ while (1)
+ {
+ if (!words.empty() && words.front().size() > 1)
+ {
+ bool flag=false;
+ std::string s=words.front();
+
+ words.pop_front();
+
+ if ((unsigned char)s[0] ==
+ (unsigned char)0xc3 &&
+ (unsigned char)s[1] == (unsigned char)0xb7)
+ flag=true;
+
+ if (words.empty())
+ break;
+
+ status.push_back(flag);
+
+ std::istringstream i(words.front());
+
+ unicode_char uc;
+
+ i >> std::hex >> uc;
+
+ words.pop_front();
+
+ if (!i.fail())
+ {
+ ubuf.push_back(uc);
+ continue;
+ }
+ }
+
+ std::cerr << "Parse error, line " << linenum
+ << ": " << buf << std::endl;
+ exit(1);
+ }
+
+ if (linenum == 24)
+ {
+ linenum=24;
+ }
+ collect_wordbreakflags flags;
+
+ flags(ubuf.begin(), ubuf.end());
+ flags.finish();
+
+ if (status != flags.flags)
+ {
+ std::cerr << "Regression, line " << linenum
+ << ": " << buf << std::endl;
+ exit(1);
+ }
+ }
+}
+
+int main(int argc, char **argv)
+{
+ testsuite();
+ return 0;
+}